struts的理解(struts1和struts2的区别)
2012-06-23 07:58
363 查看
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中动态赋值。
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中动态赋值。
相关文章推荐
- struts2跟struts1的区别
- Struts2与Struts1的区别
- struts2的json-default和struts-default的区别
- Struts1与Struts2原理 区别 详解 汇总
- Struts1.2与Struts2的区别
- struts2的json-default和struts-default的区别
- Struts1.2与Struts2的区别
- struts1 与 struts2的区别
- Struts2 的简介以及 struts2 与struts1的区别
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
- struts1 和struts2 的区别
- Struts1 和Struts2的区别及联系
- struts1 和 struts2的区别
- Struts2和Struts1的区别及工作原理
- struts2 FilterDispatcher 和 StrutsPrepareAndExecuteFilter 的区别
- Struts2 的简介以及 struts2 与struts1的区别
- Struts2和Struts1的区别
- Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别
- Struts2五、Struts1与Struts2的区别
- STRUTS系列之 Struts1 和 Struts2的区别