struts2框架通过拦截器对表单重复提交处理
来源:互联网 发布:微信内置浏览器js跳转 编辑:程序博客网 时间:2024/05/17 08:12
2.拦截器是struts2的一个重要特性。Struts2框架的大多数核心功能都是通过拦截器来实现的,像避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在拦截器的帮助下实现的。拦截器之所以称为“拦截器”,是因为它可以在Action执行之前和执行之后拦截调用。
表单的重复提交的操作:
若刷新表单页面, 再提交表单不算重复提交.
(1)在不刷新表单页面的前提下:
(2)多次点击提交按钮
(3)已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".
(4)在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)“
重复提交的缺点:
(1) 加重了服务器的负担
(2)可能导致错误操作.
3.利用了token和tokenSession拦截器避免表单重复提交;
(1)原理:
当进入表单页面时,在session中存放一个标志量;在表单页面中添加一个隐藏域的值,该值就是session中标质量的值;当用户提交表单时,隐藏域的值会一并提交到后台,此时会把该值和session中的值进行匹配,如果匹配上,证明是第一次提交,立刻将session中的值改变,如果不匹配,就不执行后续的逻辑。
(2)Struts 提供的 token 标签可以用来生成一个独一无二的标记. 这个标签必须嵌套在 form 标签的内部使用, 它将在表单里插入一个隐藏字段并把标记值(隐藏域的字段的值)保存在HttpSession 对象里.:<s:token></s:token>;
Token 标签必须与 Token 或 TokenSession 拦截器配合使用, 这两个拦截器都能对标记进行处理.
Token 拦截器在遇到重复提交情况时, 会返回 invalid.token 结果并加上一个 Action 错误. 这种错误默认的消息是: The form has already been processed or no token was supplied, please try again.
TokenSession 拦截器采取的做法只是阻断后续的提交, 用户将看到同样的响应,但实际上并没有重复提交;
具体实例:
表单域:
<body> <s:form action="sessionAction" method="post"> <s:token></s:token> <s:textfield name="name" label="name"></s:textfield> <s:submit></s:submit> </s:form> <s:debug></s:debug> </body>
Struts.xml配置:
使用token的配置:
<struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="true" /><package name="default" namespace="/" extends="struts-default"><action name="sessionAction" class="com.handler.SessionAction"method="submit1"><interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> <result>/success.jsp</result> <result name="invalid.token">error.jsp</result> //发生重复提交后的跳转页面</action></package></struts>使用tokenSession的配置:
<struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="true" /><package name="default" namespace="/" extends="struts-default"><action name="sessionAction" class="com.handler.SessionAction"method="submit1"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="tokenSession"></interceptor-ref><result>/success.jsp</result></action></package></struts>Action域:
package com.handler;import com.opensymphony.xwork2.ActionSupport;public class SessionAction extends ActionSupport{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String submit1() throws Exception{Thread.sleep(2000);System.out.println(name+"添加成功");/*if(name!=null){throw new Exception();}*/return SUCCESS;}}运行结果:
首次提交:
提交成功后跳转至success.jsp页面:
刚重复点击提交后,页面跳转error.jsp
当时使用TokenSession拦截器:会正常跳转到成功界面,但实际并没有多提交;
- struts2框架通过拦截器对表单重复提交处理
- Struts2处理表单重复提交
- 使用struts2拦截器实现防止表单数据重复提交
- struts2 token拦截器防止表单重复提交
- 令牌拦截器—-struts2表单重复提交
- 基于struts2的令牌拦截器,防止表单重复提交
- struts2中采用拦截器防止表单重复提交
- struts2-令牌拦截器防止表单重复提交
- 表单的重复提交--Struts2框架
- struts2-Token Interceptor(处理表单重复提交)
- 使用拦截器防止表单重复提交
- Struts拦截器解决表单重复提交
- stucts2 表单重复提交拦截器 token
- 表单重复提交拦截器实例
- springmvc 拦截器 防止重复提交表单
- 拦截器及防止表单重复提交
- struts2表单重复提交
- Struts2中的拦截器防止重复提交
- POJ-1845 数论
- Java Volatile关键字
- 我在杭州找实习的那些天
- Java 选择排序
- 如何matlab 读取同一个文件中的多个txt 文档
- struts2框架通过拦截器对表单重复提交处理
- STL算法汇总
- Python基础语法之——继承
- MySQL-MMM高可用集群搭建(可用)
- Android手机文件及文件夹目录详解
- 一维数组、指针、字符数组、字符函数
- InnoDB存储引擎B+树索引介绍
- CART构建与剪枝
- IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段(A、B、C三类地址)