一.知识点回顾

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

客户端和服务器端和写一个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. javascript对象constructor属性

    概述 返回一个指向创建了该对象原型的函数引用.需要注意的是,该属性的值是那个函数本身,而不是一个包含函数名称的字符串.对于原始值(如1,true 或 "test"),该属性为只读. ...

  2. 手把手实现腾讯qq拖拽删去效果(二)

    这节,就一个任务如何把上节自定义的翻页动画控件整进下拉列表中去. 由于是自定义的下拉列表控件,我们需要自定义能够上啦下滑的listview,这势必会造成这个问题,上拉刷新要响应相应touch事件,拖拽 ...

  3. Java复习1-基本数据类型

    数据类型 整形 type 存储 取值范围 int 4字节 -2 147 483 648 ~ 2 147 483 647 (超过20亿) short 2字节 -32 768 ~ 32 7677 long ...

  4. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  5. (转) Unity3D 使用Texturepacker打包工具制作NGUI(Atlas)图集

    转自:http://www.unitymanual.com/thread-37485-1-1.html 由于NGUI AtlasMaker对打包的优化不好,容易打出很大的图集,很多部分都是浪费的,所有 ...

  6. iOS应用程序状态图

    理解应用的状态对于我们开发iOS大有裨益. 当前应用所处什么状态,什么促使它在各个状态间进行过渡,你的代码又是如何 唤醒这些过渡,等等等等. 先请看下图: 1. 当应用出于非运行状态时,它处于图中的& ...

  7. Android开发点滴 - 实现层级式导航(API 16+)

    在Jelly Bean(API 16)以前,为了实现顶部的导航菜单,程序员们不得不手工写代码, 神马在OnCreate啊,神马onOptionsItemSelected啊,但是,现在一切都是浮云了. ...

  8. common.js 2017

    String.IsNullOrEmpty = function (v) { return !(typeof (v) === "string" && v.length ...

  9. input[type="checkbox"]与label对齐

    项目中遇到文字与 checkbook 无法水平对齐, 源码如下: <div align='center'> <input type="checkbox" id=& ...

  10. 关于操作系统:eos、deepin

    朋友星神推荐了这两个操作系统:eos.deepin,大致看了一下介绍,貌似看起来很棒,界面清新,而且开源,支持的应用也不少,后续我准备尝试一下.此处Mark一下: 官网分别为: https://ele ...