一.知识点回顾

防止表单重复提交核心思想:

客户端和服务器端和写一个token,比较两个token的值相同,则非重复提交;不同,则是重复提交.

1.getSession三种方式比较:

request.getSession()

request.getSession(true);//无论如何都要得到新的Session

request.getSession(false);//只能得到旧有的Session

2.>>struts2框架提供了token拦截器,主要用于防止表单重复提交

>>默认栈中无token拦截器,所以在<action>标签中要显示引用token拦截器

3.开发步骤:

1)在jsp页面中使用<s:token/>,自动产生hidden框,同时在服务端的session中放置一份id值

2)在<action>中,显示引用token拦截器

3)token的实现源码org.apache.struts2.interceptor.TokenInterceptor

二.需求

针对上一篇文章中实现的验证,实现防止表单重复提交,一旦出现重复提交,应当给予提示.

1.填写所必需的内容

2.提交成功后

3.刷新提交后的页面,提示页面已经重复提交

三.实现

1.实现代码

validator.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>validator</title>
</head>
<body>
<s:form action="ValidatorAction" type="POST">
<s:token/>
<s:textfield label="用户名" name="username" />
<s:password label="密码" name="password" showPassword="true"/>
<s:textfield label="薪水" name="salary" />
<s:textfield label="生日" name="birthday"/>
<s:submit name="submit"/>
</s:form>
</body>
</html>

validator_struts.xml

<?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>
<package name="validator" extends="struts-default">
<action name="ValidatorAction" class="validator.ValidatorAction" method="execute">
<result name="success" type="dispatcher">
/WEB-INF/validator_success.jsp
</result>
<result name="input" type="dispatcher">
/validator.jsp
</result>
<result name="invalid.token" type="dispatcher">
/error.jsp
</result>

<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</action>
</package>
</struts>

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<font size="36" color="red">
表单重复提交了
</font>
</body>
</html>

2.代码分析

validator.jsp中添加token标签,将token分别写入客户端和服务器端.

validator_struts.xml,配置出错页面,以及引用默认拦截器和token拦截器.

error.jsp,提示重复提交了.

 3.本文源码

防止表单重复提交

四.OGNL语言

1.简介:

OGNL是Object-Graph Navigation Language的缩写(对象图导航语言),它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

2.作用: 

1)访问OGNL上下文(OGNL context)和ActionContext; 
2)操作集合对象。

3.理解OGNL

1)OGNL通常与Struts2的标签一起使用,不能独立使用.

2) Action一旦产生,值栈就产生了,位于request域中

  Action一旦销毁,值栈就销毁了.

3)值栈分数两部分:

 List区域:

  >>Action实例本身

  >>Action中所有的属性,例如:username/password ..

Map区域:

  >>在Action中,能够取得的一切Map对象,都放置在Map区域.

如下图所示:

java struts2入门学习--防止表单重复提交.OGNL语言学习的更多相关文章

  1. java后端使用token处理表单重复提交

    保证接口幂等性,表单重复提交 前台解决方案:提交后按钮禁用.置灰.页面出现遮罩后台解决方案:   使用token,每个token只能使用一次1.在调用接口之前生成对应的Token,存放至redis 2 ...

  2. Struts2第十三篇【防止表单重复提交】

    回顾防止表单重复提交 当我们学习Session的时候已经通过Session来编写了一个防止表单重复提交的小程序了,我们来回顾一下我们当时是怎么做的: 在Servlet上生成独一无二的token,保存在 ...

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

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

  4. 防止Web表单重复提交的方法总结

    在Web开发中,对于处理表单重复提交是经常要面对的事情.那么,存在哪些场景会导致表单重复提交呢?表单重复提交会带来什么问题?有哪些方法可以避免表单重复提交? 表单重复提交的场景 1.场景一:服务端未能 ...

  5. [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)

    课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...

  7. [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  9. java web 学习十三(使用session防止表单重复提交)

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

随机推荐

  1. C# 网络编程之webBrowser获取网页url和下载网页中图片

    该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试瞎子啊网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url. ...

  2. 【RPC】跨语言-RPC框架

    跨语言-RPC框架 跨语言 rpc_百度搜索 (5 条消息)谁能用通俗的语言解释一下什么是 RPC 框架? - 知乎 跨语言RPC框架Hessian.Thrift.Protocol Buffer之间的 ...

  3. 【Java】Springboot-Quartz-分布式任务调度

    Springboot-Quartz-分布式任务调度 springboot 调度 自定义并发_百度搜索 spring-boot @Async 的使用.自定义Executor的配置方法 - CSDN博客 ...

  4. Medline Plus

    提问地址: http://apps2.nlm.nih.gov/medlineplus/contact/index.cfm?lang=en&from=http://www.nlm.nih.gov ...

  5. 阿里云centos安装ftp与svn过程

    1.下载xshell或者secureCRT 2.登录centos或者服务器 3.安装vsftpd [root@xxx]# yum install vsftpd //安装vsftpd [root@xxx ...

  6. Office办公 如何给WPS 的文字添加黑框

    双击文本框,弹出的设置对象格式中选择线条颜色和样式即可   要做成虚线框也是可以的   弄完之后字体也可以改大一点   还有一种需要时文本不在黑框的中间位置,比如顶部的某个位置,可以设置文字锁定点是顶 ...

  7. Navicat标识为灰

    Navicat Premium作为一种通用数据管理工具,非常受迎接.最近,又遇到一个小问题.即为了实现自增,需要设置主键标识,而在Navicat中发现其为灰色,不可用. 原因:Navicat不允许设置 ...

  8. Centos7中ELK集群安装流程

    Centos7中ELK集群安装流程   说明:三个版本必须相同,这里安装5.1版. 一.安装Elasticsearch5.1   hostnamectl set-hostname elk vim /e ...

  9. Python3中使用Mysql的用法。

    一.Python2中一般使用MySqldb来调用Mysql,但是在Python3中不支持该包,使用pymysql来代替了,用法一模一样. 二.安装: pip install pymysql 三.例子: ...

  10. Android StageFrightMediaScanner源码解析

    1. 简单介绍 Android中在StageFrightMediaScanner实现对多媒体文件的处理. 此外在StageFrightMediaScanner定义了支持的多媒体文件类型. 文件位置 f ...