防止表单重复提交练习:

做struts练习之前,首先有一些准备工作要做,那就是建立一个web工程,另外就是导入jar包和配置web.xml

我一般都是将以下jar包一次性导入(,可能一个知识点的练习不需要那么多)

以上jar下载

web.xml中需要添加过滤器:

配置如下内容:

完成以上配置之后,在src下建立struts.xml(当然暂时可以不用)!

下面就可以进行你要做的工作了!

下面的例子是我的防止表单重复提交的练习:

1、发送请求的页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><base href="<%=basePath%>"><title>请求界面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><s:form action="token" namespace="/" methos="post" theme="simple"><!-- 通过s:token生成隐藏域(令牌号) --><s:token /><input type="submit" value="提交" /></s:form></body>
</html>

2、提交成功页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h2>表单提交成功</h2>
</body>
</html>

3、重复提交,提示错误页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><base href="<%=basePath%>"><title>My JSP 'token_error.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h2>表单已提交,请不要重复提交!</h2><!-- 表单重复提交有一个默认的错误信息 --><!-- 打印出该默认信息 --><s:actionerror />
</body>
</html>

4、Action代码:

package cn.itcast.action;import com.opensymphony.xwork2.ActionSupport;public class TokenAction extends ActionSupport{@Overridepublic String execute() throws Exception {System.out.println("用户注册...");return SUCCESS;}
}

5、struts配置信息:

<?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 -->
<struts><!-- 常量配置 -->   <!-- 配置web应用的默认编码集 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 设置value为true时,当struts文件改变后,系统会自动重新加载该文件 --><constant name="struts.configuration.xml.reload" value="true"></constant><!-- 应用struts2的开发模式,value为true时,可以打印更详细的错误信息 --><constant name="struts.devMode" value="true"></constant><!-- 指定struts所需要的国际化资源文件 --><constant name="struts.custom.i18n.resources" value="tokenerror"></constant><!-- 包的配置 --><!-- 包名为default,继承struts-default --><!-- struts2框架使用包来管理Action和拦截器。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。使用package可以将逻辑相关的一组Action、Result、Interceptor等组件分为一组,package有点像对象,可以继承其他的package,也可以被其他package继承,甚至可以定义抽象的package--><package name="default" extends="struts-default"><!-- 添加action:表单重复提交 --><action name="token" class="cn.itcast.action.TokenAction"><!-- 配置结果页面,省略了name="success" --><result>/index.jsp</result><result name="invalid.token">/token_error.jsp</result><!-- 重定义拦截器 --><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="token"></interceptor-ref></action></package>
</struts>

6、web.xml配置信息:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><!-- 设置过滤器 --><filter><!-- 过滤器的名称 --><filter-name>struts</filter-name><!-- 过滤器的实现类,负责具体的过滤事务 --><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- 设置过滤器的映射 --><filter-mapping><!-- 过滤器的名称 --><filter-name>struts</filter-name><!-- 过滤器负责过滤的URL --><url-pattern>/*</url-pattern></filter-mapping><!-- 设置该web站点欢迎文件列表 --><welcome-file-list><!-- 指定欢迎文件名称 --><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

7、tokenerror.properties文件:

单击Add,将错误信息以中文形式提示客户!

打包下载,希望对您有用!

struts练习-表单提交相关推荐

  1. jsp调用struts,jsp调用action,action获取表单提交的参数

    自定义action类.LgqAction: @Component @Scope(value="prototype") public class LgqAction {        ...

  2. [JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 本篇文章开始讲 ...

  3. Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

    在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEc ...

  4. java后台用 requset对象 存储值 前台获取不到_springmvc form表单提交后台对象获取不到值(解决)...

    使用springmvc进行表单提交时,在controller action层实体对象获取不到值. 在struts中使用user.username方式传递参数,在spring中不需要对象点直接使用对象属 ...

  5. 详细叙述ajax的详情,ajax的配置详情、ajax的调用解释、ajax的中文乱码和ajax的表单提交(内有实例)...

    本篇文章主要的讲述了关于ajax的使用总结说明,还有ajax的配置.调用.中文乱码.表单提交等等详细解释,现在我们一起来看这篇文章吧 ·jquery的使用 0.必须优先引入jquery.js 否则无法 ...

  6. ajax使用总结-ajax的配置-ajax的调用-ajax的中文乱码-ajax的表单提交

    ·jquery的使用    0.必须优先引入jquery.js 否则无法调用jquery框架    1.js区分大小写,起名字的时候要注意    2.jquery根据div的id属性获取页面text的 ...

  7. html 提交form表单提交数据格式,form表单提交数据

    form表单提交的几种方法 HTML表单提交的几种方式方式一:通过submit按钮提交方式二:通过一般按钮button提交1/3javascript">functionsubmit1( ...

  8. jQuery最简单的表单提交方式

    第一步:绑定事件 常用的与ajax相关的事件参考如下: 1.$(selector).click(function) 2.$(selector).change(function) 3.$(selecto ...

  9. 表单提交、页面注册案例

    表单属性设置 <form>标签 表示表单标签,定义整体的表单区域 action属性 设置表单数据提交地址 method属性 设置表单提交的方式,一般有"GET"方式和& ...

最新文章

  1. Ansible03-管理变量、加密、事实
  2. 可汉学院python_可汗学院离线版本
  3. 【window】git安装教程
  4. 《渗透测试实战第三版(红队版)》翻译完成
  5. phpcms的一些问题 乱码,安装
  6. Redis学习总结(7)——怎么保持缓存与数据库一致性?
  7. centos7切换root为mysql,CentOS 7中使用rpm方式安装MySQL 5.7后无法使用root登录解决
  8. Flutter入门(3)—打包项目[Android]
  9. u8 附件上传后存放路径_用友U8生产不良退料案例教程
  10. Linux-虚拟机使用:真机与虚拟机ping通
  11. WIFI智能插座Homekit
  12. maxima学习笔记(一)
  13. 阿里、华为和微软等多家国内外厂商组团搞OpenJDK,Oracle为啥不参加?
  14. 关于查看nginx的访问量的部分总结
  15. 2017年sfdc工作总结_Duplicate, Matching Rule
  16. shell学习笔记:变量篇
  17. 软件测试之语音识别(ASR)测试
  18. windows11-USB禁用
  19. EndNote仅修改一处引文格式为作者(年代)即Author(Date)的方法
  20. Android 复杂的手势处理利用GestureOverView

热门文章

  1. Java核心(三)并发中的线程同步与锁
  2. bzoj1833: [ZJOI2010]count 数字计数 codevs1359 数字计数
  3. java中执行js代码
  4. AC日记——双栈排序 洛谷 P1155
  5. 1165: 零起点学算法72——首字母变大写
  6. Ext的viewport在所有浏览器下出现界面内容消失的问题
  7. CSS3无前缀脚本prefixfree.js及Animatable介绍
  8. 当你工作压力很大的时候
  9. 什么是时间管理,一个大四学生的简单理解
  10. 来自艾斯维尔的计算机科学系的期刊排行,研究生必备!