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. HTML第一课(前期知识准备)

    在正式的学习之前,我们先了解一些前端方面的常识. 一.前端是做什么? 如果有认真看过我写的预备程序员不得不知道的事儿这篇文章的同学应该清楚,前端的工作在整个项目开发中处于代码编写阶段,主要是用来做界面 ...

  2. JavaScript的循环结构和经典题目

    一.JS中的循环结构 循环结构的执行步骤1.声明循环变量:2.判断循环条件;3.执行循环体操作:4.更新循环变量:5.然后循环执行2-4,直到条件不成立,跳出循环. while循环()中的表达式,运算 ...

  3. LoadPicture函数用法示例

    VB语言中LoadPicture函数用法示例: 本例使用 LoadPicture 函数将图片加载到窗体的 PictureBox 控件并从控件上清除掉该图片. 要试用此例,将 PictureBox 控件 ...

  4. vim 修改复制过来的代码缩进

    命令模式下 :1,9<  //1至9行回退一个tab :1,9> //1至9行缩进一个tab 让不可打印字符心事出来::set list

  5. test dword ptr [eax],eax ; probe page.局部数组变量定义所分配的最大空间为1M

    问题的出现 使用VS2017编写程序时,程序编译可以通过,但运行时就会弹出错误 经过查证发现: 这跟局部数组变量定义所分配的最大空间设置大小有关. 局部变量的申请空间是存放于栈中,windows里默认 ...

  6. RestTemplate 超级严重BUG之 restTemplate.getForEntity对于下载文件的地址请求 header不起作用

    错误下载:RestTemplate restTemplate=new RestTemplate();HttpHeaders httpHeaders=new HttpHeaders();httpHead ...

  7. gradle配置国内阿里云镜像

    对单个项目生效,在项目中的build.gradle修改内容 buildscript { repositories { maven { url 'http://maven.aliyun.com/nexu ...

  8. APIO2019 题解

    APIO2019 题解 T1 奇怪装置 题目传送门 https://loj.ac/problem/3144 题解 很容易发现,这个东西一定会形成一个环.我们只需要求出环的长度就解决了一切问题. 设环的 ...

  9. 小程序内置组件swiper,circular(衔接)使用小技巧

    swiper,关于滑块的一些效果无缝,断点,视差等等...我想这里就不用做太多的赘述,这里给大家分享一下实战项目中使用circular(衔接)的一点小特性.小技巧,当然你也可以理解为遇到了一个小坑,因 ...

  10. spring security基本知识(二) 自定义认证

    配置自定义的用户存储 我们在 SecurityConfig 的配置类中 重写了 configure(AuthenticationManagerBuilder auth) 方法,我们可以通过 Authe ...