Struts2研磨

来源:互联网 发布:php项目打包 编辑:程序博客网 时间:2024/04/30 02:38

  同事买了本《研磨Struts2》,花了一个小时略读完。总结如下:

1.Struts2本质上只是一个基于MVC的Web框架,就与Spring MVC是一样的作用。

2.相比于Spring MVC来说,Struts2是围绕着FilterDispatcher来拦截url然后找到struts.xml中配置的action,之后再返回result。而Spring MVC是围绕着DispatcherServlet直接找到@Controller中的对应Mapping方法,然后返回ModelView.

3.相比于Spring MVC来说,Struts2的优势很显然,它的ActionSupport已经封装了HttpServletRequest和HttpServletResponse类,所以相比于Spring的Controller来说,它是解耦和了Servlet API已经不再需要自己手动去从Request中去取值了。

4.正因为它的优势不需要手动去改动Request,所以它的拦截器要怎么弄呢,它提供了一个ValueStack的东西。

5.Struts2中的Action常常会扮演着即是模型又是控制器的角色。而它因此提供了一个叫ModelDriven的类,让Action来实现它,那么它就可以对应一个POJO对象而不需要再在Action类里面写getter和setter方法了。

6.看到Result这章的时候有了解到配置里的ResultType,还有PreReusltListener捕获返回结果前的异常。

7.当然它还有很强大的targlib,国际化,验证框架,Ajax等。

8.这个是我想说的重点:

如何防止重复提交表单?

首先来说原理,struts2采用的是Token机制,在表单页面初始化的时候在Session中加入Token的name以及一个随机数,因为在<s:form>中还加入了<s:token>所以会在此时也将此Token作为隐藏的表单内容。当我们在进行表单提交的时候,Struts2的Token拦截器在抵达Action前会进行校验,如果提交的token随机数和Session中的token随机数相同,那么就提交到Action,否则根据配置是选择跳转到指定的重复提交错误提示页面还是选择使用TokenSession拦截后直接阻塞掉重复提交。


0 0