本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.概述

  1)表单的重复提交

    - 若刷新表单页面, 再提交表单不算重复提交

      - 在不刷新表单页面的前提下:

      - 多次点击提交按钮

      - 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".

       - 在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)“

重复提交的缺点:

    - 加重了服务器的负担

    - 加重了服务器的负担

2.Strut2 解决表单的重复提交的方式:

  1)在s:form 中添加 s:token 子标签

      > 生成一个隐藏域

      > 在session 添加一个属性值

      >  隐藏域的值和session 的属性值是一致的

  2)使用Token 或者 TokenSession 拦截器

      > 这两个拦截器均不在默认的拦截器栈中,所以手工配置

      > 若使用Token 拦截器,则需要配置一个Token.valid 的result

      > 若使用TokenSession 拦截器,则不需要配置任何其他的result

  3)Token  vs TokenSession

       > 都是解决表单重复提交的问题

       > 使用Token 拦截器转到 token.valid 这个 result

       > 使用tokenSession 拦截器,则还会响应那个目标页面,但,不会执行目标action 的方法。就像什么都没发生过一样。

  4)可以使用s:actionerror 标签来显示重复提交表单的错误消息,该错误消息可以在国际化资源文件中被覆盖。该消息可以在 struts-messages.properties 文件中找到

      struts.message.invalid.token  = 自定义提示内容

token.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <s:form action="testToken" >
<s:token></s:token>
<s:textfield name="userName" label="UserName"></s:textfield> <s:submit></s:submit>
</s:form> </body>
</html>

struts.xml

<?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>
<package name="default" namespace="/" extends="struts-default"> <action name="testToken" class="com.jason.upload.app.TokenAction">
<!-- <interceptor-ref name="tokenSession"></interceptor-ref> --> <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref>
<result>/success.jsp</result> <result name="invalid.token">/token-error.jsp</result>
</action>
</package>
</struts>

TokenAction.java

 package com.jason.upload.app;

 import com.opensymphony.xwork2.ActionSupport;

 public class TokenAction extends ActionSupport {

     /**
* @Fields:serialVersionUID
*/
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 { Thread.sleep(2000);
System.out.println(userName);
return SUCCESS;
} }

[原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交的更多相关文章

  1. struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)

    课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...

  2. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

  3. Java中避免表单重复提交

    表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...

  4. Struts2中防止表单重复提交,global-results定义全局结果处理

    1.在表单中加入<s:token/>标签 2.在动作类中加入token的拦截器 <!--如果单单写 name="token" 会丧失 defaultStack 拦 ...

  5. java web解决表单重复提交问题

    我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题.今天就来给总结如何解决表单提交问题,欢迎大家交流指正. 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提 ...

  6. java web解决表单重复提交

    首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么情况下会出现表单重复提交?3.什么情况需要避免表单重复提交? 什么叫表单提交问题,说白了,就是同一份信息,重 ...

  7. 【Struts2】防止表单重复提交

    一.概述 二.Struts2中解决方案 三.实现步骤 一.概述 regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) ...

  8. [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. java struts2入门学习--防止表单重复提交.OGNL语言学习

    一.知识点回顾 防止表单重复提交核心思想: 客户端和服务器端和写一个token,比较两个token的值相同,则非重复提交;不同,则是重复提交. 1.getSession三种方式比较: request. ...

随机推荐

  1. fortran中如何提供计算程序运行时间?

    如下: Real time_begin , time_end1 , time_end2 Integer i , j call CPU_TIME(time_begin) write(*,*) time_ ...

  2. qTip2 精致的jQuery提示信息插件

    qTip2 精致的jQuery提示信息插件    出处:http://www.cnblogs.com/lwme/archive/2012/02/16/qtip2-jquery-plugin.html ...

  3. [daily][CentOS][yum] 删除包的同时一同清理掉安装时一起装进来的依赖包

    说起来有点绕口,这个需求是这样的. 就是我yum装A包的时候,同时安装了A的依赖包a1,a2,a3. 当我们使用yum remove A卸载A包的是,a1,a2,a3包并不会一同被卸载掉.如果他们没有 ...

  4. 导出证书Cer文件为Pem格式的步骤

    (1)先导出Push Services的证书,比如我们命名为“magic_cert.p12”,注意导出时会让你输入密码. (2)再导出Push Services证书的密钥(Private Key),比 ...

  5. ArcGIS Engine开发之旅05---空间数据库

    原文:ArcGIS Engine开发之旅05---空间数据库 1  Geodatabase概念 Geodatabase是ArcInfo8引入的一种全新的面向对象的空间数据模型,是建立在DBMS之上的统 ...

  6. (转帖) java内存分配分析/栈内存、堆内存

    http://blog.csdn.net/qh_java/article/details/9084091

  7. Fiddler-005-获取 Cookie 信息

    随着网络安全(例如:登录安全等)要求的不断提升,越来越多的登录应用在登录时添加了验证码登录,而验证码生成算法也在不断的进化,因而对含登录态的自动化测试脚本运行造成了一定程度的困扰,目前解决此种问题的方 ...

  8. JavaScript实现dropdownlist选定值后将选定值的key与value填入两个textbox中

    <script language="javascript" type="text/javascript"> var txtText0 = " ...

  9. FPGA最小系统分析与电路设计

    <FPGA最小系统分析与电路设计> 部分节选自<FPGA应用开发入门与典型.pdf > FPGA最小系统包括:FPGA芯片.下载电路.外部时钟.复位电路和电源. 如果使用NIO ...

  10. https://www.zhihu.com/question/52020960#answer-47024535

    https://www.zhihu.com/question/52020960#answer-47024535