一.知识点回顾

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

客户端和服务器端和写一个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. 【Java】Java-UTC-时间戳处理

    Java-UTC-时间戳处理 java utc 时间戳_百度搜索 JAVA获取时间戳,哪个更快 - 潇湘客 - ITeye博客 Java获取UTC时间的方法详解_java_脚本之家 Java UTC时 ...

  2. Spring(二十二):Spring 事务

    事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性. 事务就是一系列的动作,它们被当做一个单独的工作单元.这些动作要么全部完成,要么全部不起作用. 事务的是四个关键 ...

  3. 下周二推出“音视频技术WebRTC初探”公开课,欢迎捧场!

     下周二推出"音视频技术WebRTC初探"公开课,欢迎捧场! 公开课课程链接:http://edu.csdn.net/huiyiCourse/detail/90 课程的解说资料 ...

  4. Docker登录失败

      % docker login Username: xxxx Password: Email: xxxxxxx@yahoo.co.jp FATA[0033] Error response from ...

  5. Chrome中的哪些端口是限制使用的?

      The following is a list of all of the restricted ports on Chrome: 1, // tcpmux 7, // echo 9, // di ...

  6. [Git] Undo my last commit and split it into two separate ones

    When you accidentally committed some changes to your branch you have various possibilities to “undo” ...

  7. OpenGL ES 3.0之Fragment buffer objects(FBO)详解(一)

    片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式. Buffers(缓冲) OpenGL ES支持三种缓冲: OpenGL ES •• Color buffer颜色缓冲 •• Depth bu ...

  8. springboot结合jwt实现基于restful接口的身份认证

    基于restful接口的身份认证,可以采用jwt的方式实现,想了解jwt,可以查询相关资料,这里不做介绍~ 下面直接看如何实现 1.首先添加jwt的jar包,pom.xml中添加依赖包: <de ...

  9. ngx_lua实现页面跳转

    好久不用ngx_lua了,忽然被问到如何实现页面跳转,半天没反应过来,查了半天资料搞出来的,在这里做一个备份. 需求说明:***.taobao.com 跳转到 www.taobao.com/?url= ...

  10. POJ 1548 Robots(最小路径覆盖)

    POJ 1548 Robots 题目链接 题意:乍一看还以为是小白上那题dp,事实上不是,就是求一共几个机器人能够覆盖全部路径 思路:最小路径覆盖问题.一个点假设在还有一个点右下方,就建边.然后跑最小 ...