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

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

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

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

微博:伊直都在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

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="s" uri="/struts-tags" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11
12     <s:form action="testToken" >
13         <s:token></s:token>
14         <s:textfield name="userName" label="UserName"></s:textfield>
15
16         <s:submit></s:submit>
17     </s:form>
18
19
20 </body>
21 </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

 1 package com.jason.upload.app;
 2
 3 import com.opensymphony.xwork2.ActionSupport;
 4
 5 public class TokenAction extends ActionSupport {
 6
 7     /**
 8      * @Fields:serialVersionUID
 9      */
10     private static final long serialVersionUID = 1L;
11
12     private String userName;
13
14     public String getUserName() {
15         return userName;
16     }
17
18     public void setUserName(String userName) {
19         this.userName = userName;
20     }
21
22     @Override
23     public String execute() throws Exception {
24
25         Thread.sleep(2000);
26         System.out.println(userName);
27         return SUCCESS;
28     }
29
30 }
时间: 2024-10-07 05:31:40

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

Struts2中防止表单重复提交

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

Struts2系列:(13)防表单重复提交(token + 拦截器)

1.原理 服务器端和客户端通过token(令牌)来进行验证: (1)Browser向Tomcat服务器请求填写表单 (2)Tomcat服务器将带有token的表单返回给Browser (3)浏览器端在提交时,将form和token一起发送到服务器 (4)Tomcat服务器对Browser进行验证 2.基本步骤 基本步骤如下: 第一步:写好Action,在struts.xml为接受该表单提交请求的action配置token拦截器[服务器] <action name="student_*&qu

Struts2中解决表单重复提交

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

Struts2(八)之UI标签和防止表单重复提交

一.UI标签 1.1.struts2中UI标签的优势 自动的数据回显和错误提示功能 自带的简单样式和排版 1.2.UI案例 结果: 1.3.UI标签的主题 1.3.1.struts2中默认的主题 默认主题的名称是XHTML,都是在struts的默认属性文件中定义着:default.properties 默认模板存放位置: 1.3.2.更改默认主题 1.更改表单某个元素的默认主题:使用的是表单元素的theme属性. 2.更改表单所有主题:使用的是form标签的theme属性. 3.更改全站所有表单

Java中避免表单重复提交

表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服务器缓慢或网络延迟的原因,重复点击提交按钮. 已经提交成功,刷新成功页面(forward)(请求转发). 已经提交成功,通过回退,再次点击提交按钮 注意:回退后,刷新表单页面,重新再提交,这时,不是重复提交,而是发送新的请求,在Firefox下,重复提交到同一个地址的操作无效. 案例: 1 @WebServl

7、struts2 案例( 模型驱动、 防止表单重复提交--拦截器 、数据回显 、值栈 、 OGNL表达式综合运用)

struts2 案例 技术点: 模型驱动 防止表单重复提交–拦截器 数据回显 值栈 OGNL表达式 通配符.路径匹配原则.常量 数据处理的集中方式 请求数据自动封装以及类型转换 1.导包 c3p0-0.9.1.2.jar commons-dbutils-1.6.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.j

【Struts2】防止表单重复提交

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

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

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

学习笔记(五)Session 的创建和销毁 生命周期 表单重复提交及实现验证码

1. Session 的创建和销毁 page 指定的 session 属性: 1). 默认情况下, 第一次访问一个 WEB 应用的一个 JSP 页面时, 该页面都必须有一个和这个请求相关联的 Session 对象. 因为 page 指定的 session 属性默认为 true 2). 若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关联所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session