防止表单重复提交(拦截器)

1、回顾之前的解决办法:

2、Struts2中的解决办法:

2.1、使用重定向

<result type="redirect">/success.jsp</result>

遗留的问题:防不住后退,再提交。

2.2、使用<s:token/>生成令牌配合token拦截器

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2中的表单重复提交</title>
</head>
<body>
<%--使用一个struts2的内置标签 s:token --%>
<s:form action="login1">
<s:token></s:token>
<s:textfield name="name" label="用户名" />
<s:submit value="提交"/>
</s:form>
</body>
</html>

.jsp

struts.xml 中配置 token拦截器

     <action name="login" class="com.itheima.web.action.Demo1Action" method="login">
<!-- 由于默认的拦截器栈中没有令牌的拦截器,所以需要把默认的拦截器栈配上 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 使用struts2提供的一个令牌的拦截器:token -->
<interceptor-ref name="token"></interceptor-ref>
<!--<result>/success.jsp</result> 请求转发不行 -->
<result type="redirect">/success.jsp</result>
<result name="invalid.token">/message.jsp</result>
</action>

struts.xml

点击后退的时候,会提示

配置结果视图

遗留的问题:此种解决方式,是产生了错误之后再告知用户,你错了。

2.3、使用<s:token/>生成令牌配合tokensession拦截器

         <action name="login1" class="com.itheima.web.action.Demo2Action" method="login">
<!-- 由于默认的拦截器栈中没有tokenSession的拦截器,所以需要把默认的拦截器栈配上 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 使用struts2提供的一个tokenSession的拦截器:token -->
<interceptor-ref name="tokenSession"></interceptor-ref>
<result type="redirect">/success.jsp</result>
</action>

struts.xml

struts2 防止表单的重复提交的更多相关文章

  1. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  2. Struts2 - 表单的重复提交问题

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  3. php中如何防止表单的重复提交

    在php中如何防止表单的重复提交?其实也有几种解决方法. 下面小编就为大家介绍一下吧.需要的朋友可以过来参考下 代码: <?php /* * php中如何防止表单的重复提交 * by www.j ...

  4. php-- 避免表单的重复提交

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...

  5. Spring MVC表单防重复提交

    利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RU ...

  6. Session机制三(表单的重复提交)

    1.表单的重复提交的情况 在表单提交到一个servlet,而servlet又通过请求转发的方式响应了一个JSP页面,这个时候地址栏还保留这servlet的那个路径,在响应页面点击刷新. 在响应页面没有 ...

  7. HttpSession解决表单的重复提交

    1). 重复提交的情况: ①. 在表单提交到一个 Servlet, 而 Servlet 又通过请求转发的方式响应一个 JSP(HTML) 页面, 此时地址栏还保留着 Serlvet 的那个路径, 在响 ...

  8. 使用aop注解实现表单防重复提交功能

    原文:https://www.cnblogs.com/manliu/articles/5983888.html 1.这里采用的方法是:使用get请求进入表单页面时,后台会生成一个tokrn_flag分 ...

  9. HttpSession之表单的重复提交 & 验证码

    如果采用 HttpServletResponse.sendRedirct() 方法将客户端重定向到成功页面,将不会出现重复提交问题 1.表单的重复提交 1). 重复提交的情况: ①. 在表单提交到一个 ...

随机推荐

  1. Python时间的简单使用

    1.time.strptime(string[, format]),string -- 时间字符串.format -- 格式化字符串.返回struct_time对象.     把字符串转换为时间格式, ...

  2. Postman & API

    Postman & API https://www.getpostman.com/ https://www.getpostman.com/downloads/ Postman Canary h ...

  3. vscode運行vue和html

    html 选中html文件,右键选择view in broswer.

  4. 自定义组件Component

    定义compa组件 由4个页面构成 compa.js: compa.json: compa.wxml: compa:wxss: 1.compa.json:在json文件进行自定义组件声明 { &quo ...

  5. Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值

    oalesce 获得参数中第一个不为空的表达式. 语法:        COALESCE ( expression [ ,...n ] ) 例子:CREATE TABLE wages          ...

  6. 使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages

    Hexo 与 GitHub Pages 安装配置请参考:Hexo 与 GitHub Pages 本文源码与生成的静态文件在同一项目下,源码在 source 分支,静态文件在 master 分支 新增 ...

  7. 【python练习题】程序9

    #题目:暂停一秒输出. import time for i in range(5): print (i) time.sleep(1)

  8. 一条命令停止所有lxc容器,删除所有lxc容器

    for i in $(virsh -c lxc:/// list | grep -v 'Id' | awk '{print $2}');do virsh -c lxc:/// destroy ${i} ...

  9. json-lib和dom4j实现JSON转XML

    package com.geostar.gfstack.operationcenter.test; import net.sf.json.JSONObject; import net.sf.json. ...

  10. iptables防火墙的原理及应用

    简介 (netfilter, 位于Linux内核中的包过滤功能体系  ,称为Linux防火墙的“内核态”) iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防 ...