JAVA-Struts2防止表单重复提交
来源:互联网 发布:ubuntu 安装sqlserver 编辑:程序博客网 时间:2024/05/29 16:09
好记性不如赖笔头……
表单重复提交的问题可能大多数开发者都会遇到,在未使用Struts2框架之前的解决方案是在进入提交表单页面,将验证码保存在session中,当表单提交时,就会验证 验证码是否存在,如果存在,则删除,通过 验证,如果不存在,则提示重复提交或超时。
Struts2中提供了防止表单提效的拦截器token/tokenSession,他们的作用分别是:
1. token拦截器:如果重复提交会直接返回“No result defined for action com.ckinghan.web.action.RegAction and result invalid.token”提示,须要自己定义”invalid.token”的返回视图。
2. tokenSession拦截器:对于重复提交的表单请求忽略,不做任何处理。
注意,它们使用的前提是,在JSP页面,须要使用s:token标签。
示例如下:
1、创建reSubmit.jsp页面,具体代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>重复提交表单测试</title> </head> <body> <hr> <h1>用户注册</h1> <s:form action="reg"> <s:token></s:token> <s:textfield name="userName" label="昵称"/> <s:password name="password" label="密码"/> <s:submit value="注册"></s:submit> </s:form> </body></html>
2、创建RegAction动作类,并继承ActionSupport,具体代码如下:
package com.ckinghan.web.action;import com.opensymphony.xwork2.ActionSupport;public class RegAction extends ActionSupport { private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String reg(){ System.out.println(userName); System.out.println(password); return SUCCESS; }}
3、创建Struts.xml文件,存储在src目录下,具体配置如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.devMode" value="true"/> <package name="formReSumbit" extends="struts-default"> <action name="reg" class="com.ckinghan.web.action.RegAction" method="reg"> <!-- 先执行默认拦截器(如果在这里配置了非默认拦截器,默认拦截器将不在执行,所以在这里将默认拦截器也配置上) --> <interceptor-ref name="defaultStack"/> <!-- tokenSession拦截器,对于重复提交的表单不做任何处理 --> <interceptor-ref name="tokenSession"/> <!-- token拦截器与tokenSession拦截器使用一个就可以了,使用了token拦截器,必须配合“invalid.token”的返回视图 --><!-- <interceptor-ref name="session"/> --> <result>/success.jsp</result> <!-- 配合token拦截器使用 --><!-- <result name="invalid.token">/error.jsp</result> --> </action> </package></struts>
4、error.jsp文件的内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>错误提示</title> </head> <body> 请勿重复提交 </body></html>
配置完成,启动项目,访问结果如下:
提交后,页面提示的内容如下:
后台输出内容如下:
刷新重复提交 后,显示页面包括后台输出无任何变化,说明防止重复提交成功。
阅读全文
0 0
- JAVA-Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交 .
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2 防止表单重复提交
- struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2防止表单重复提交
- 比较全面的druid配置信息
- [转]Cassnadra3.X 特性概述
- chown -R 用户名:组名 ./ 及 chown用法介绍
- 判断文件是否为图片
- 网络安全学习笔记
- JAVA-Struts2防止表单重复提交
- MYSQL性能优化
- 【备忘】2017最新传智播客黑马java 32期基础就业班视频教程
- mongoDB 使用 mongoVue
- 压缩在hadoop中的应用
- poj 1159
- hdu 5000 思维+dp
- codility CountNonDivisible
- 14. Longest Common Prefix