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. vue 项目报错,提示:Cannot read property '$createElement' of undefined at render ...

    vue 项目报错,提示:Cannot read property '$createElement' of undefined at render ...

  2. SPSS 23下载安装和激活

    目录 1. 其他版本 2. 安装教程 3. 下载地址 1. 其他版本 参考:https://www.cnblogs.com/coco56/p/11648399.html 2. 安装教程 SPSS 23 ...

  3. SPSS25 下载安装和激活

    目录 1. 其他版本 2. 安装步骤 3. 下载地址 1. 其他版本 参考:https://www.cnblogs.com/coco56/p/11648399.html 2. 安装步骤 打开安装包 下 ...

  4. alex说:一切皆bytes

    一.ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示25 ...

  5. Python学习笔记-列表的增删改查

  6. 2017 BJ ICPC 石子合并变种 向量基本功及分类考察

    E 模拟 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) # ...

  7. DevOps书单:调研了101名专家,推荐这39本必读书籍

    任何一个领域都遵循从新人到熟手,从熟手到专家的路径.在成长过程中,DevOps人经常会陷入没人带,没人管,找不到职业方向的迷茫. DevOps是在商业演进与企业协作的进化过程中诞生的一个全新职业,被很 ...

  8. FCC 成都社区·前端周刊 第 8 期

    01. 2018 前端开发者手册 这是一份 2018 前端开发手册,内容包括三个部分:前端工程实践.前端开发学习和前端开发工具. 详情:https://frontendmasters.com/book ...

  9. 用户界面控件Telerik UI for WinForms发布R2 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  10. MySQL--limit使用注意

    limit m,n 的意义是在选择.查询得到的结果中,从第m条开始,拿连续的n条作为结果返回.根据它的原理可以知道,select ....limit m,n时要扫描得到的数据条数是m+n条.这就导致m ...