Struts2--二次提交

Posted 王思聪6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2--二次提交相关的知识,希望对你有一定的参考价值。

  在Struts2中,使用token的方式来防止二次提交。并且在默认的拦截器栈中提供了两个默认拦截器Token Interceptor和Token Session Interceptor。必须要在form中添加token标签,如果没有的话,则会被认为是invalid token。

Token Interceptor

  这个拦截器在发现一个重复提交的无效的token的时候,会返回一个invalid.token,会在action的配置文件中匹配。

技术分享
<%@ page language="java" 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>
<title>表单界面</title>
</head>
<body>
    <s:actionerror/>
    <s:form action="regist" method="post">
        <s:token/>
        <s:textfield name="name" label="名字" value="张三"/>
        <s:textfield name="age" label="年龄" value="10"/>
        <s:submit value="注册"/>
    </s:form>
</body>
</html>
技术分享
技术分享
package com.fuwh.model;

import com.opensymphony.xwork2.ActionSupport;

public class Regist extends ActionSupport{
    
    private static final long serialVersionUID = 1L;
    
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("添加学生:姓名:"+name+" 年龄:"+age);
        Thread.sleep(5000);
        return SUCCESS;
    }
    

}
技术分享
技术分享
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
    <constant name="struts.devMode" value="true" />
    
    <!-- 配置action -->
    <package name="regist" extends="struts-default">
        <action name="regist" class="com.fuwh.model.Regist">
            <interceptor-ref name="token"/>
            <interceptor-ref name="defaultStack"/>
            <result name="success">success.jsp</result>
            <result name="invalid.token">index.jsp</result>
        </action>
    </package>

</struts>
技术分享

Token Session Interceptor

  这个拦截器会无视掉第一次提交的直至完成的所有二次提交,也不会返回什么invalid token

技术分享
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
    <constant name="struts.devMode" value="true" />
    
    <!-- 配置action -->
    <package name="regist" extends="struts-default">
        <action name="regist" class="com.fuwh.model.Regist">
            <interceptor-ref name="tokenSession"/>
            <interceptor-ref name="defaultStack"/>
            <result name="success">success.jsp</result>
            <result name="invalid.token">index.jsp</result>
        </action>
    </package>

</struts>
技术分享

 

以上是关于Struts2--二次提交的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Form标签表单回显与提交

Struts2 表单提交与execute()方法的结合使用

struts2如何验证文本框大于0但不等于0

使用选项卡第二次返回片段显示空白片段

struts2+Oracle实现管理员查看用户提交的意见功能