struts2如何防止表单重复提交

struts2解决表单重复提交问题方法:

1.在s:form 标签中加入s:token标签

1)会生成一个隐藏域,

2)在session中添加一个属性值

3)隐藏域中的值和session中的值是一样的

2.使用token拦截器或者是tokenSession拦截器

这两个拦截器不在默认的拦截器栈中,需要手工配置一下

使用token拦截器,需要配置一个invalid.token的result

使用tokenSession拦截器不用配置任何的result

3.token VS tokenSession

都可以解决表单重复提交问题

如果表单重复提交,token拦截器会跳转到invalid.token这个result

而tokenSession则什么都不会发生

example:

token,jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>My JSP 'token.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
  </head>

  <body>
    <s:form action="token">
    	<s:textfield name="username" label="username"></s:textfield>
    	<s:token></s:token>
    	<s:submit></s:submit>
    </s:form>
  </body>
</html>

TokenAction类:

package cn.lfd.web.token;
import com.opensymphony.xwork2.ActionSupport;
public class TokenAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private String username;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
	@Override
	public String execute() throws Exception {
		System.out.println(username);
		return SUCCESS;
	}
}

struts.xml配置文件:

<action name="token" class="cn.lfd.web.token.TokenAction">
			<interceptor-ref name="tokenSession"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<result>/success.jsp</result>
			<result name="invalid.token">/token-error.jsp</result><!-- 若用的是tokenSession拦截器不用这个result -->
		</action>
				
时间: 2024-10-21 10:22:23

struts2如何防止表单重复提交的相关文章

Struts2中防止表单重复提交

一.防止表单的重复提交 1.在表单中加入<s:token/>标签 2.在动作类中加入token的拦截器<interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> 3.增加一个名称为invalid.token的结果视图<result name="

struts2之防止表单重复提交

struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts

struts1与struts2的防止表单重复提交

struts1的防止表单重复提交 一.方法:利用令牌来解决页面重复提交的问题 二.步骤 2.1  Action中需要添加以下代码 public ActionForward entry(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throws Exception { saveToken(request); return mapping.findFor

【Struts2】防止表单重复提交

一.概述 二.Struts2中解决方案 三.实现步骤 一.概述 regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) 解决方案: 在页面上生成一个令牌(就是一个随机字符串),将其存储到session中,并在表单中携带. 在服务器端,获取数据时,也将令牌获取,将它与session中存储的token对比,没问题,将session中令牌删除. 二.Struts2中解决方案 struts2中怎样解决表单重复提交: 在strut

Struts2中解决表单重复提交

3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮". >> 在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)" > 注意: >> 若刷新表单页面, 再提交表单不算重复提交 >> 若使用的是 redirect 的响应类型,

struts2实现防止表单重复提交

1.使用Struts2的表单标签,其中需要增加token标签. <s:token/>标签其实底层是这么实现的: 首先会在form表单里产生一个hidden类型的<input>标签: <input type="hidden" name="token" value="9AUOGRO10QB77EAJ65NYE6ROHWZ3IIQN" /> 然后struts2会生成一个全局唯一的字符串token放置在session会

12-struts2防止表单重复提交

防止表单重复提交 问题:什么是表单重复提交? regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) 解决方案: 在页面上生成一个令牌(就是一个随机字符串),将其存储到session中,并在表单中携带. 在服务器端,获取数据时,也将令牌获取,将它与session中存储的token对比,没问题, 将session中令牌删除. struts2中怎样解决表单重复提交: 在struts2中解决表单重复提交,可以使用它定义的一个i

struts2 自带的 token防止表单重复提交拦截器

在struts2中,我们可以利用struts2自带的token拦截器轻松实现防止表单重复提交功能! 1. 在相应的action配置中增加:  <interceptor-ref name="token"></interceptor-ref> <result name="invalid.token">/error.jsp</result> 2. 增加error.jsp文件,代码如下:  <h1>禁止重复提交&l

[原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------