您的位置:首页 > 编程语言 > Java开发

struts的理解(struts1和struts2的区别)

2012-06-23 07:58 316 查看
struts是一种MVC架构的web层处理框架,struts1和struts2有些差别,不过根本原理是一样的。都是通过struts的核心类来处理web页面的请求,将请求分发到不同的action进行处理,并将结果返回给web客户端。
1、Struts1的核心是一个servlet,ActionServlet,接收web页面传来的所有请求,然后根据struts的配置文件来分发这些请求到不同的Action,在Action中进行请求的处理,并与model进行交互;然后将结果向上返回到ActionServlet,渲染jsp页面,给web客户端。
Struts2的核心是一个filter,FilterDispatcher,原理与struts1相似。
如图(struts1):



struts2是webwork的升级,综合了struts1和webwork的优点

执行流程:
(1)客户端提交一个(HttpServletRequest)请求,如
http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。
(2)请求被提交到一系列的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意:这里是有顺序的,先ActionContext
CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。
(3)FilterDispatcher是控制器的核心,就是MVC的Struts
2实现中控制层(Controller)的核心。
(4) FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet
Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
(5) ActionProxy通过Configuration
Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。
(6)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
(7)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。
(参考:http://gaochaojs.blog.51cto.com/812546/163496

2、ActionServlet把请求交给action处理之前,struts1采用formbean的形式对于请求传递来的参数进行封装。并且这个formbean也要配置到struts的配置文件中。
对于参数的处理,struts2也进行了改进,可以直接采用action中的get/set方法来获取和设置参数的值,并且参数的值一直保留,直到action的生命周期结束。当然,struts2也可以处理将参数封装到一个vo里,这样,就避免了action中因为参数个数多造成的get、set方法过多的情况。这个vo既可以是程序员自定义的一个“formbean”(不必配置到配置文件中),也可以直接使用用程序中现有的vo,减少代码量。
3、Action处理完成返回的结果显示视图封装到ActionForward中,ActionForward通过struts的配置中的配置关联到某个jsp页面,或者另外一个请求(也就是重定向),struts1的重定向是不能够加入参数的。
Struts2中的返回值是一个字符串,当然,这个字符串是通过struts的配置文件相关联的,可以关联到一个jsp页面,也可以关联到一个重定向请求。这个重定向请求不同于struts1,是可以包括参数的,可以直接赋值,也可以从action中动态赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: