1、jsp页面  输入框,提交按钮

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<s:form action="User_login" namespace="/login">
<!---token标签--->
<s:token></s:token>
<!-- <!---用于显示action的错误,因为设置的是拦截到后再次返回此页,所以设置了这个标签-->
<!-- <s:actionerror/> --> <s:textfield name="username" label="用户名"></s:textfield>
<s:submit label="提交"></s:submit>
</s:form>
</body>
</html>

2、struts.xml

动作类成功执行后通过转发的方式跳转到success.jsp页面。

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="default" namespace="" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
</package> <package name="users" extends="default" namespace="/login">
<action name="User_login" class="cn.gs.ly.UserAction" method="login"> <!--使用默认拦截器-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!--使用token拦截器-->
<!-- <interceptor-ref name="token"></interceptor-ref> -->
<!--使用tokenSession拦截器-->
<interceptor-ref name="tokenSession"></interceptor-ref>
<!--拦截到后的输出界面-->
<result name="invalid.token">/message.jsp</result> <result name="success">/User_login_success.jsp</result>
<result name="failure">/index.jsp</result>
</action>
</package> </struts>

3、UserAction类

每次用户提交表单后,输出表单提交的提示。

 package cn.gs.ly;

 import com.opensymphony.xwork2.ActionSupport;

 public class UserAction extends ActionSupport {
private String username;
private String token; public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
} public String login(){
System.out.println(username+"表单已提交");
return SUCCESS;
} }

登陆成功跳  success.jsp

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h2>登陆成功,这是登陆成功页面</h2>
</body>
</html>

重复提交跳  message.jsp

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h3>请勿重复提交</h3>
<!---用于显示action的错误,因为设置的是拦截到后再次返回此页,所以设置了这个标签-->
<s:actionerror/>
</body>
</html>

登陆失败跳  error.jsp

 <%@ page language="java" import="java.util.*" isErrorPage="true"%>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>page</title>
</head>
<body>
<center>
<h1>出错了!</h1>
<hr>
异常信息:<s:property value="exception"/><br>
<a href="<%=path%>/index.jsp">返回首页</a>
</center>
</body>
</html>

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

  1. struts2之防止表单重复提交

    struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  2. struts2的防止表单重复提交

    防止表单重复提交其实就是struts2的一个拦截器的使用: struts.xml配置文件: <?xml version="1.0" encoding="UTF-8& ...

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

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

  4. PHP简单利用token防止表单重复提交

    <?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...

  5. PHP生成token防止表单重复提交

    .提交按钮置disabled 当用户提交后,立即把按钮置为不可用状态.这种用js来实现. 提交前代码如下: $()  {  $exec="insert into student (user_ ...

  6. PHP简单利用token防止表单重复提交(转)

    <?php/* * PHP简单利用token防止表单重复提交 */function set_token() { $_SESSION['token'] = md5(microtime(true)) ...

  7. php通过token验证表单重复提交

    PHP防止重复提交表单 2016-11-08 轻松学PHP 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后 ...

  8. AOP+Token防止表单重复提交

    表单重复提交: 由于用户误操作,多次点击表单提交按钮 由于网速等原因造成页面卡顿,用户重复刷新提交页面 避免表单重复提交的方式: 1.页面上的按钮做防重复点击操作 2.在数据库中可以做唯一约束 3.利 ...

  9. PHP使用token防止表单重复提交的方法

    本文实例讲述了PHP使用token防止表单重复提交的方法.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

随机推荐

  1. 解决Chrome浏览器无法自动播放音频视频的问题,Uncaught (in promise) DOMException

    转载自:http://www.nooong.com/docs/chrome_video_autoplay.htm 在最新版的Chrome浏览器(以及所有以Chromium为内核的浏览器)中,已不再允许 ...

  2. window下lamp环境搭建

    软件: apache_2.2.25.msi php-5.4.30-Win32-VC9-x86.zip mysql-5.6.11-win32.msi下载地址:http://download.csdn.n ...

  3. 07java进阶——集合框架(set)

    1.list接口中常用的特有方法 package cn.jxufe.java.chapter7; import java.util.ArrayList; import java.util.List; ...

  4. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)

    Problem Statement You are given two integer sequences, each of length N: a1,…,aN and b1,…,bN. There ...

  5. CCPC-Wannafly Winter Camp Day1 (Div2) 吃豆豆 (DP)

    题目描述 wlswls在玩一个游戏. wlswls有一个nn行mm列的棋盘,对于第ii行第jj列的格子,每过T[i][j]T[i][j]秒会在上面出现一个糖果,第一次糖果出现在第T[i][j]T[i] ...

  6. MUI使用h5+进行召唤各大APP应用市场调用启动的包名和方式

    转载自:https://blog.csdn.net/u012442504/article/details/87367153 // 扩展API加载完毕后调用onPlusReady回调函数 documen ...

  7. 通过virsh console进入虚拟机

    1.virsh启动一个虚拟机.执行脚本test_qga.sh 2.virsh vncdisplay <vm_ID> 3.vnc登录到vm里面,执行#systemctl start seri ...

  8. RabbitMQ发送消息成功,但是接受不到消息

    commom模块为mq配置模块 分了多模块后消息队列无法自动创建,发现原因竟然是SpringBoot没有扫描到common模块内的配置类. 我们在XxxApplication启动类上添加@Compon ...

  9. Behavior行为

    创建公用的js 模块 封装起来 let behavior = Behavior({//定义属性 properties: { type: String, img: String, content: St ...

  10. python数组中在某一元素前插入数据

    # 已知有一个已经排好序的数组.要求是,有一个新数据项,要求按原来的规律将它插入数组中. a=[1,2,3,4,5,6,7,8,9]num=int(input("input num:&quo ...