实际上在Struts2框架中,一个完整的结果视图配置文件应该是:
1 | < action name = "Action名称" class = "Action类路径" method = "方法名" > |
2 | < result name = "逻辑视图名称" type = "结果类型" > |
3 | < param name = "参数名称" >参数值</ param > |
4 | </ result > |
5 | </ action > |
结果类型的作用
返回类型在Struts2框架下的struts-default.xml中可以找到所支持的结果类型.
常用的有3种:
1、请求转发(dispatcher)
这是Struts2的默认结果类型。
- 请求转发只能请求转发至同一个web应用。
- 利用请求转发浏览器地址栏不会发生变化。
- 利用请求转发调用者与被调用者之间共享相同的request对象和response对象,他们属于同一个访问请求和响应。
2、重定向(redirect)
- 重定向不仅可以指定到一个web应用,还能够制定到任何JSP资源。
- 重定向的访问结束后,浏览器的地址栏中显示URL变化。
- 重定向的调用者与被调用者使用各自的的request对象和response对象,他们属于两个独立的访问请求和响应过程。
重定向之后会丢失前一次访问的数据信息。
3、Action链(chain)
Action链是通过一个chain的拦截器实现的。
第一个Action执行成功后有chain拦截器负责发出第二个Action的请求,Action链中所有Action都共享一个值栈,当执行Action的时候,会将自身的数据全部压入值栈。
注意是怎样从action1的参数传给action2的
防止表单重复提交
方法一就是重定向的方式,如上图,方法二是 session token (session令牌)
通过Session Token(Session令牌):当客户端请求页面时,服务器会通过token标签生成一个随机数,并且将该随机数放置到session当中,然后将该随机数发向客户端;如果客户第一次提交,那么会将该随机数发往服务器端,服务器会接收到该随机数并且与session中所保存的随机数进行比较,这时两者的值是相同的,服务器认为是第一次提交,并且将更新服务器端的这个随机数值;如果此时再次重复提交,那么客户端发向服务器端的随机数还是之前的那个,而服务器端的随机数则已经发生了变化,两者不同,服务器就认为这是重复提交,进而转向invalid.token所指向的结果页面。