zoukankan      html  css  js  c++  java
  • [原创]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 }

      

  • 相关阅读:
    记录Integer比较问题
    代码中获取git输出
    python open mode
    elasticsearch Unrecognized VM option 'UseParNewGC'
    应用商店显示无法加载页面 请稍后重试
    deep learning with python前五章笔记
    QWeb2: Template 'systray_odoo_referral.gift_icon' not found
    wifi scapy
    struct.pack, struct.unpack详解
    python f-string
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5928388.html
Copyright © 2011-2022 走看看