您现在的位置:首页 > >

Struts理解

发布时间:

? ? Struts是Apache软件基金下Jakarta项目的一部分。


? ? ?简单的讲,要应用Struts,就是建立对应的actionForm、action、jsp页面,并配置web.xml, struts-config.xml。配置struts-config.xml相当比较简单,记得添加对应的form-beans, action-mappings即可。而如果不涉及更高级的开发,则几乎无需重新配置web.xml。







  Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。?




  1、Struts的MVC体系结构?




  struts framework是MVC2(引入了"控制器"这个概念,控制器一般由Servlet来担任,客户端的请求不再直接送给一个处理业务逻辑的JSP页面,而是送给这个控制器,再由控制器根据具体的请求调用不同的事务逻辑) 模式的体现。




? ? ??从左到右,分别是其表示层(view)、控制层(controller)、和模型层(Model)。


? ? ? ? 表示层:Struts标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个Taglib。


? ? ? ??控制器:核心是ActionServlet类。ActionServlet类是struts框架中的核心组件。ActionServlet继承了javax.servlet.http.HttpServlet类,它在mvc模型中扮演控制器的角色。ActionServlet主要负责接收http请求信息,根据接收的请求参数和Struts配置(struts-config.XML)中ActionMapping,将请求送给合适的Action去处理,Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。




? ? ? ?
业务逻辑的操作主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。
非常重要的一点:不要在Action中包含任何业务逻辑操作,而是应该调用一个Model层的JavaBean来实现你的业务逻辑操作。


? ? ? ?模型:JavaBean。


? ?2、Struts1与Struts2的区别




? ?3、Sturts的配置文件


? ? ? web.xml文件,这是一个基于servlet的Web应用程序都需要的部署描述文件,Struts有两个组件要在该文件中进行配置,它们是:ActionServlet和标签库。


? ? ?web.xml文件需要配置的 ??http://blog.csdn.net/ff55c/article/details/6736979


? ??一个基本的struts-config.xml文件,并把它放在/Webapps/mystruts/WEB-INF/目录中,该文件是基于Struts应用程序的配置描述文件,它将MVC结构中的各组件结合在一起,开发的过程中会不断对它进行充实和更改。


? ? 4、Struts与JSF的区别


???????Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架


? ? ? 相同点:都是用标签库处理表示层,模型层都采用bean,struts是ActionBean,JSF是BackingBean,都采用XML管理bean配置、页面导航;?这里JSF和Struts的web.xml配置何其相似,简直一模一样。正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml 配置文件.JSF的managed-bean类似Struts的ActionForm,正如可以在struts-config.xml中定义ActionForm的scope一样,这里也定义了managed-bean的scope为session。


? ? ? 不同点:不同的是jsf是标准,struts是一个开源框架;侧重点不同-Struts侧重控制层;JSF侧重表示层;页面与bean的绑定方式不同-在Struts中,jsp和FormBean是紧密结合在一起的,只要写一个jsp就必须对应一个FormBean,同时jsp上的每个组件都对应FormBean中相同名字的字段;在JSF中,JSP页面中的组件通过value属性和backing bean的字段关联,这样就有比较大的灵活性,页面上的每个 组件可以对应相同的backing bean,也可以对应不同的backing bean;?JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。JSF除了managed-bean,还融入了新的Ioc模式/依赖性注射等技术。




???5、?几个重要的类:




? ? ?ActionServlet?


? ? ??org.apache.struts.action.ActionServlet 是Struts Controller中最主要的部分,所有用户请求都会被发送到这里,所有的其它处理也必须从这里经过。ActionServlet是从HttpServlet中继承过来的。


   当ActionServlet接收到HTTP request的时候,不管是doGet()或者doPost()方法,都会调用process()方法。


? ? Action


? ?Action类是实现整个体系的核心部分,它在客户请求、界面表示和业务逻辑之间起到一个桥梁的作用。每一个Action都用来处理某一项任务,或者进行一个业务操作。当然了,我们说一项任务不是说Action只实现一个业务操作方法,而是集中实现某一个功能单元。比如登录用的LogonAction、查找用的SearchAction等等。Action是在RequestProcessor中,由processActionPerform方法调用的


? ??ActionMapping


? ??通过ActionMapping,Action在转发时,并不是转发给一个实际的页面。而是转发给在strus-config.xml中已经配置的对象。这意味着,在不改变Action代码的情况下就可以更换其转发的页面;有了ActionMapping后,只需要在Struts-config.xml中修改相应的配置即可,这样既查找方便,又不用重新编译。action 执行完后要返回显示的结果视图 , 这个结果视图是用一个 ActionForward 对象来表示的 , actionforward 对象通过 struts-config.xml 配置文件中的配置关联到某个 jsp 页面 , 因为程序中使用的是在 struts-config.xml 配置文件为 jsp 页面设置的逻辑名,这样可以实现 actio n?程序代码与返回的 jsp 页面名称的解耦。



? ?????ActionForward?


? ? ? Action类的execute()方法返回一个ActionForward对象。ActionForward对象代表了web资源


的逻辑抽象,这里的web资源可以是jsp页,java servlet或action。从execute()方法中返回


? ? ? ActionForward对象有2种方法:
? ? a、在execute()方法只动态创建一个ActionForward实例:
? ? ? ?return new ActionForward("Failure","/secruity/singnin.jsp",true);
? ? ? 以上ActionForward构造方法的第一个参数代表ActionForward实例的逻辑名,第2个参数指定转发路径,第3个参数指定是否进行重定向。


? ? b、在struts配置文件中配置元素:


? ? ? ?actionforward 对象通过 struts-config.xml 配置文件中的配置关联到某个 jsp 页面 , 因为程序中使用的是在 struts-config.xml 配置文件为 jsp 页面设置的逻辑名,这样可以实现 actio n?
程序代码与返回的 jsp 页面名称的解耦。








http://www.wangchao.net.cn/bbsdetail_46736.html


http://news.dayoo.com/tech/201005/21/10000617_102079567.htm


热文推荐
猜你喜欢
友情链接: