Struts是Apache软件基金下Jakarta项目的一部分。
简单的讲,要应用Struts,就是建立对应的actionForm、action、jsp页面,并配置web.xml, struts-config.xml。配置struts-config.xml相当比较简单,记得添加对应的form-beans, action-mappings即可。而如果不涉及更高级的开发,则几乎无需重新配置web.xml。
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以将响应呈现给客户。
模型: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配置文件中配置<forward>元素:
actionforward 对象通过 struts-config.xml 配置文件中的配置关联到某个 jsp 页面 , 因为程序中使用的是在 struts-config.xml 配置文件为 jsp 页面设置的逻辑名,这样可以实现 actio n 程序代码与返回的 jsp 页面名称的解耦。