郑州大学软件工程JSF与Struts的区别
- 格式:doc
- 大小:18.00 KB
- 文档页数:2
Java中的Web开发框架有哪些在Java中,有多种用于Web开发的框架。
这些框架提供了一套工具和结构,帮助开发人员快速构建可靠、高效的Web应用程序。
本文将介绍几种常用的Java Web开发框架。
一、Spring MVCSpring MVC是一个基于Java的轻量级Web框架,它是Spring框架的一部分。
Spring MVC通过使用模型-视图-控制器(MVC)的设计模式,将应用程序的不同组件分离开来。
它提供了灵活的配置选项和强大的功能,包括请求映射、表单处理、数据验证和视图解析等。
Spring MVC也支持RESTful风格的Web服务开发。
二、StrutsStruts是另一个受欢迎的Java Web框架,它遵循MVC设计模式。
Struts框架提供了一种结构化的方法来构建Web应用程序。
它使用Struts配置文件来管理请求和处理逻辑,同时提供了多种标签库和表单验证机制。
Struts还支持国际化和本地化,使得开发多语言应用程序更加简便。
三、JSFJavaServer Faces(JSF)是Java EE的一部分,它是一种用于构建用户界面的Web框架。
相比于其他框架,JSF更加面向组件。
它提供了一系列可重用的UI组件,开发人员可以通过简单地组合这些组件来构建复杂的用户界面。
JSF还具有良好的可扩展性和集成性,可以轻松地与其他Java技术和框架进行集成。
四、Play框架Play框架是一个用于构建Web应用程序的响应式全栈框架。
它采用了基于Actor模型的异步编程模型,这使得Play应用程序能够处理高并发和高吞吐量的请求。
Play框架还提供了内置的开发工具和自动重新加载功能,使得开发变得更加高效。
此外,Play还支持多种数据库和模板引擎,开发人员可以根据自己的需求进行选择。
五、Spring BootSpring Boot是一个用于简化Spring应用程序开发的框架。
它提供了一种约定优于配置的方式,通过自动配置和快速启动器,可以快速构建独立运行的、生产级别的Spring应用程序。
对比分析Struts和Spring两种MVC框架2008年08月12日星期二17:26基于Web的MVC framework在J2EE的世界内已是空前繁荣。
TTS网站上几乎每隔一两个星期就会有新的MVC框架发布。
目前比较好的MVC,老牌的有Struts、Webwork。
新兴的MVC 框架有Spring MVC、Tapestry、JSF等。
这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRaptor等。
这些框架都提供了较好的层次分隔能力。
在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。
如何选择一个好的框架应用在你的项目中,将会对你的项目的效率和可重用是至关重要的。
本文将对目前最流行、最常用的两种framework进行介绍。
一)StrutsStruts是Apache软件基金下Jakarta项目的一部分。
Struts框架的主要架构设计和开发者是Craig R.McClanahan。
Struts 是目前Java Web MVC框架中不争的王者。
经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。
但是Struts某些技术特性上已经落后于新兴的MVC框架。
面对Spring MVC、Webwork2 这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。
但站在产品开发的角度而言,Struts仍然是最稳妥的选择。
Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。
基于struts构架的web 应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。
根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。
但Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。
【译者按】这是Matt Raible在今年(2007年)6月24-27号召开的JA-SIG夏季会议上所作的主题演讲,Matt从众多方面对Java Web层框架做了一个全面、深入的比较。
笔者认为这是一份及时的文档,它对开发者如何判定一个Web层框架的好坏、如何选择适合自己项目的框架有极大的指导作用。
本文是对Matt Raible演讲稿的整理归纳。
【作者介绍】Matt Raible,开源框架AppFuse的发起者、主要开发者;《Professional JSP 2.0》、《Spring Live》等书的作者;众多会议的演讲者,MySQL User Conference, ApacheCon, ApacheCon EU等;现任Raible Designs的CEO。
首先,Matt以自己的实践经验,指出了Java Web层框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他们各自的优、缺点:JSF优点:Java EE标准,这意味着有很大的市场需求和更多的工作机会上手快速并且相对容易有大量可用的组件库缺点:大量的JSP标签对REST和安全支持不好没有一个统一的实现。
既有SUN的实现,又有Apache的实现——MyFaces。
Spring MVC优点:对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等便于测试——归功于IoC缺点:大量的XML配置文件太过灵活——没有公共的父控制器没有内置的Ajax支持Stripes优点:不需要书写XML配置文件良好的学习文档社区成员很热心缺点:社区比较小不如其他的项目活跃ActionBean里面的URL是硬编码的Struts 2优点:架构简单——易于扩展标记库很容易利用FreeMarker或者Velocity来定制基于控制器或者基于页面的导航缺点:文档组织得很差对新特征过分关注通过Google搜索到的大多是Struts 1.x的文档Tapestry优点:一旦学会它,将极大地提高生产率HTML模板——对页面设计师非常有利每出一个新版本,都会有大量的创新缺点:文档过于概念性,不够实用学习曲线陡峭发行周期长——每年都有较大的升级Wicket优点:对Java开发者有利(不是Web开发者)页面和显示绑定紧密社区活跃——有来自创建者的支持缺点:HTML模板和Java代码紧挨着需要对OO有较好的理解Wicket逻辑——什么都用Java搞定接着,Matt通过采访这些框架的作者,与他们讨论各种开源的Java Web框架,并且突出各个框架的长处、听取框架作者对其他框架的看法,希望借此了解这些框架的未来发展方向。
一、单项选题(共60题,每题1分)(1)Struts应用框架是____B__模式的实现。
A)JSP Model1 B)MVC C)DAO D)Facade(2)相比Struts框架,JSP框架具备_D____等Struts框架所不具备的特点。
A)页面导航B)表单验证C)国际化应用D)组件时间模型(3)针对J2EE企业应用来讲,最简洁的Wed服务器系统有两个参加者,__A__,前者供应服务的接口和实现,后者运用Web服务。
A)服务供应者和服务恳求者C)服务供应者和服务代理商B)服务代理商和服务恳求者D)服务恳求者和服务代理商(4)下面对Web应用开发中Servlet组件说法错误的是___C__。
A)Servlet是依据接受恳求/返回响应的模式工作的C)在Struts框架中,Servlet充当模型组件B)运行于Servlet容器中,是被动态加载的D)在Struts框架中,Servlet充当限制器组件(5)下列关于Struts框架的说法中,不正确的是__D___。
A)Struts实质是JSP Model2的基础上实现的一个MVC框架B)在Struts框架中,视图是由一组JSP文件组成C)在Struts框架中,限制器是由ActiongServlet和Action来实现D)在Struts仅仅可以在服务器端运行,仅仅能通过ActionForm中的validate()方法能对提交的表单数据进行验证(6)下列选项中不能获得Locale实例的有_D____。
A)Locale locale=new Locale("ch","CH"); C)Locale locale=request.getLocale();B)Locale locale=Locale.CHINA; D)Locale locale=response.getLocale();(7)假如要创建用于上传文件的表单,<html:form>标签的编码类型“method”属性必需设置为__C___。
JavaServer Faces(JSF)JSF是RAD框架(MVC框架),JSF规范本身是MVC规范,它的目的是使网页开发更方便快捷,它提倡以页面组件的方式隐藏传统web应用开发的HTTP细节(代替request,response,makeup)。
Model1模式:JSp身兼view和controller两种角色,将控制逻辑和表现逻辑混杂在一起,导致代码重用性非常低Model2:servlet作为前段控制器(C),负责接收客户端发送的请求,然后调用javabean(M)来完成实际的逻辑处理,最后转发到相应的JSp(V)页面处理显示逻辑经典的MVC模式:把多个视图注册到同一个模型,当模型发生改变时,模型向所有注册过的视图发送通知,接下来,视图从对应的模型中获得信息,然后完成视图显示的更新JSF与传统的MVC框架的不同点在于:JSF不再基于请求--响应,它是以事件响应机制来进行通信的,它可以将视图页面的UI组件状态绑定到托管bean,也可以通过视图页面中UI 组件的事件来触发托管bean的方法。
FacesServlet是JSF的核心控制器JSF请求的基本配置:一个标准的web container---Tomcat,以及一个JSF框架的实现---MyFaces基础的JSF由以下组成:用UI控件定义的web页面Faces-config.xml----用于定义web页面之间的导航规则Managed bean 和backing beanHelper object如event listener,validators,converters等注册在组件上的Web.xml---注册FacesServlet和它的mappingJSF是由自定义的JSP标签综合成的Renderer:盖属性指定一个条件表达式,只有当该值为true时该组件才会被绘制出来。
renderer 可以对应多个UI控件,一个UI控件可以对应多个rendererValidatoe:负责确保输入合法,由服务端控制Backing beans:包含用户想要收回的属性以及操纵UI的event listener方法一个view可以有多个backing bean。
struts框架详细介绍Struts是一个开源的Java Web应用程序开发框架,可以帮助开发者构建可扩展的、高性能的Web应用程序。
它遵循了Model-View-Controller(MVC)设计模式,通过将业务逻辑、表示逻辑和用户交互进行分离,使得应用程序更易于开发、测试和维护。
下面是关于Struts框架的详细介绍。
1.MVC设计模式:Struts采用了MVC设计模式,将应用程序的不同组成部分进行分离。
- Model层负责处理数据和业务逻辑。
在Struts中,开发者可以使用JavaBean、EJB、Hibernate等技术作为Model层的实现。
- View层负责展示数据和用户界面。
Struts提供了JSP(JavaServer Pages)作为主要的View技术,也可以使用Velocity、Freemarker等模板引擎。
- Controller层负责接收用户请求、处理业务逻辑以及将结果返回给View层。
Struts的Controller层使用ActionServlet来处理请求,它根据配置文件中的映射规则将请求转发给合适的Action类进行处理。
2.核心组件:Struts由以下几个核心组件组成:- ActionServlet:负责接收和处理来自客户端的请求,并根据配置文件中的映射规则将请求转发给合适的Action类进行处理。
- Action类:实现了业务逻辑的处理,接收请求和返回结果。
开发者需要继承Action类,并覆写其中的execute(方法来实现自定义的业务逻辑。
- ActionForm:用于封装请求参数并传递给Action类进行处理。
ActionForm可以与表单元素进行绑定,从而方便地获取和验证用户输入。
- ActionMapping:配置文件中的一项规则,用于将请求URL映射到具体的Action类和方法。
- ActionForward:配置文件中的一项规则,用于指定请求处理完成后需要跳转到的页面。
JavaWeb开发框架对比分析随着互联网的迅猛发展,Web应用程序的需求也日益增加。
为了提高开发效率、降低工作量,各种开发框架应运而生。
本文将对几种常见的JavaWeb开发框架进行对比分析,以帮助开发者选择适合自己项目的框架。
一、Struts2框架Struts2是一个基于MVC模式的开发框架,其核心功能是对请求进行分发和处理。
它采用了拦截器的机制,并通过配置文件将请求映射到相应的处理方法上。
Struts2具有良好的可扩展性和灵活性,并且提供了丰富的标签库和插件,可满足不同开发需求。
然而,Struts2在性能方面稍逊于其他框架,并且配置复杂度较高。
二、Spring MVC框架Spring MVC是Spring框架的一部分,它建立在Servlet API之上,通过使用控制器、模型和视图来实现MVC模式。
Spring MVC具有简单易用、轻量级的特点,是许多企业级应用的首选框架。
它提供了丰富的注解和标签支持,使得开发者可以更加便捷地进行开发工作。
但是,Spring MVC对于初学者来说可能会有一定的学习曲线。
三、JSF框架JSF(JavaServer Faces)是一个标准的JavaWeb用户界面框架,由Oracle主导开发。
它提供了一套可重用的用户界面组件,并支持自定义组件的开发。
JSF具有良好的生命周期管理、事件处理和表单验证机制,能够帮助开发人员快速构建功能强大的Web应用程序。
但是,由于其较高的复杂性和较长的学习曲线,对于初学者来说可能不太友好。
四、Play框架Play框架是一款基于Java和Scala的轻量级Web开发框架,具有高度的开发效率和灵活性。
它采用了响应式编程的思想,通过模型-视图-控制器(MVC)的架构实现了高度的解耦和可测试性。
Play框架支持热部署、自动重载和自动化测试等特性,能够极大地提高开发效率。
然而,由于其较新的理念和相对较小的社区规模,学习资料和插件支持相对较少。
五、总结综上所述,每个JavaWeb开发框架都有其独特的优势和适用场景。
JSF的主要负责人就是struts的主要作者,所以二者的相似点还是有很多的。
都采用taglib来处理表示层:在jsp页面中,二者都是采用一套标记库来处理页面的表示和model层的交互。
二者都采用了bean来作为和jsp页面对应的model层。
该model层保存了jsp页面上的数据,同时可以作一些验证工作,在struts中就是FormBean,在JSF中就是back bean。
都采用bean作为控制层,Struts中采用ActionBean来处理业务逻辑,对于简单的应用可以直接在ActionBean中编写业务逻辑代码,也可以调用另外的bean或者EJB来处理业务逻辑;对于JSF则采用backing bean来处理业务逻辑,同样,backing bean也可以直接编写业务逻辑或者调用其他的bean来处理业务逻辑。
都采用xml配置文件来处理bean的配置,页面导航等问题,增加了系统的灵活性。
都采用资源文件来处理国际化和本地化的问题。
1然而,二者的不同点也很多,下面分别说明:首先二者的侧重点不同,Struts侧重于控制层,侧重于如何分派和处理用户的请求,所以表示层的taglib功能不够强大。
而JSF则侧重于表示层,实现了大量的标准组件,允许开发人员对表示层有更多的控制权,同时JSF实现了一个开放的架构,允许开发人员创建自己的组件,或者在现有的组件上继承,开发功能更强大的自定义组件。
2和jsp 对应的model层,在Struts中采用FormBean来封装用户输入的数据,基本上一般字段的类型都是String。
而且可以进行简单的验证,当然如果采用动态的FormBean就不能在FormBean 中进行验证了。
在Struts中,jsp和FormBean是紧密结合在一起的,只要写一个jsp就必须对应一个FormBean,同时jsp上的每个组件都对应FormBean中相同名字的字段。
感觉不太灵活,比如,开发页面的时候就必须考虑后台的FormBean的实现,但此时如果该页面没有FormBean则程序运行时会出错。
然而,在JSF中,JSP页面中的组件通过value属性和backing bean的字段关联,这样就有比较大的灵活性,页面上的每个组件可以对应相同的backing bean,也可以对应不同的backing b ean,而且在设计页面的时候可以不考虑backing bean如何设计,可以在设计完页面之后再考虑bac king bean的具体实现问题。
3关于数据验证,Struts可以采用在FormBean中的验证函数中进行验证,也可以使用validator进行验证。
在JSF中,提供了一些标准的validator。
可以对输入的数据做一些简单的验证,例如验证数值数据的范围,字段是否必填等。
另外对于input类型的组件可以通过validator属性关联到backing bean的一个验证方法上。
在事件处理方法中进行验证也是一个办法。
在JSF中还有一个问题就是在JSF生成的页面中,组件的Id命名比较怪异,所有的组件的id都类似于“form.:compnentid”即form的名称+“:”+组件的id。
这样通过javascript访问组件就不是很方便,通过form.id形式好像不能访问到组件。
控制层:Struts 中通过form的action来提交请求,通过ActionServlet来分发请求,最后由ActionBean
来处理请求,在Action中实现业务逻辑或者调用其他的业务逻辑bean来完成用户的请求并返回客户端。
在这里,一个form只有一个action,即一个页面只能提交到一个action Bean。
对于页面上有多个按钮都需要提交的情况就需要使用一些变通的方法了。
和传统的web开发的模式比较接近。
对于JSF,采用了事件驱动模式来处理用户提交的请求。
JSF实现了事件监听器来监测事件,例如当用户单击了一个按钮就会触发一个按钮单击事件,还有valuechange事件监听器来监测数值改变的事件等。
例如在页面中通过通过CommandButton按钮的action属性来关联到backing bean的方法来执行相应的操作。
每个不同的按钮都可以关联不同的方法,当然也可以关联相同的方法(这样就和Action Bean非常类似了)。
这中开发模式比较接近于传统的c/s开发模式。
对于那些从c/s架构程序架构转过来的开发者来说,这种方式可能更自然一些。
在JSF的一些简单的示例程序中,通常把和jsp对应的model层和jsp所提交的action放在同一个backi ng bean中,即业务逻辑和业务逻辑所处理的数据在同一个bean中。
这样的结构只能用在简单的应用中,
对于企业级的开发并不适合。
应该将页面所关联的数据和页面所做的action分开,这样的结构更好一些,比较类似于struts的结构。
4页面的导航:关于页面的导航,struts和JSF比较类似。
都是在xml的配置文件中配置导航规则。
每个要跳转的页面都有一个别名,在程序中通过别名进行跳转。
另外Struts中的跳转是在ActionBean 中发生,execute方法最后返回一个actionForward来进行跳转。
而JSF则在事件处理方法中最后返回一个字符串,由系统在xml文件中匹配自动进行跳转。
在JSF中也可以通过在JSP页面的Comma ndButton的action 属性中直接填写跳转的别名直接跳转,而不必经过事件处理方法的处理。
5资源文件的管理:Struts和JSF对于资源文件的管理比较类似,Struts中在struts-config.xml中对资源文件进行配置,实现整个程序的统一管理。
而对于JSF则可以在每个JSP页面中分别定义资源文件,然后通过资源文件的别名来访问资源文件中的内容。
两者的格式也不相同,在Struts中,格式为:grade1.grade2.grade3 = your information,通过“.”来表示级别。
而在JSF中则必须通过下划线来表示级别,例如grade1_grade2_grade3= your information。
本人认为还是struts的方案更直观一些。
另外在Struts的资源文件中可以定义信息的显示格式,例如: error.header,error.footer。
而JSF 中如何定义还不太清楚,或者可以通过定义Messages标记的属性来定义。