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

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 FiltersSiteMesh等),最后到FilterDispatcher
  3FilterDispatcher是控制器的核心,就是MVCStruts 2实现中控制层(Controller)的核心。
4  FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个ActionFilterDispatcher则把请求的处理交给ActionProxy
 5 ActionProxy通过Configuration Managerstruts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。
  6ActionProxy创建一个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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值