struts Token解决重复提交介绍

 0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm  

 Token解决重复提交

1.消息文件
消息文件用于存放本地化消息文本。
消息文件只是一个文本文件,它包含的是”关键字/值”对。
在struts-config.xml通过<message-resources>元素定义消息文本:
<message-resources parameter="com.hello.ApplicationResources" />
<message-resources>标签的主要属性是 parameter 属性,它给出了应用程序的消息文件相对于web应用程序的/web-inf/classes/目录的位置,因此前面的声明中,消息文件的位置/web-inf/classes/com/hello/Application.properties.
  在该声明中,.properties扩展名是隐含的。
以下是Helloapp案例中资源文件:
  ApplicationResources.properties中的内容:
hello.no.userName.error=<font color="red">Please enter a userName to say hello to!</font>
hello.dont.talk.to.monster=<font color="red">We don't want to say hello to monster!</font>

2.ActionFormBean(2)—表单验证

当用户提交了 HTML 表单后,Struts框架将自动把表单数据组装到ActionForm Bean中。如果Struts-config.xml中的<action>的validate属性值设为true(默认值为true),接下来Struts框架会自动调用ActionForm Bean的validate()方法进行表单验证。
Public ActionErrors validate(ActionMapping mapping,
                                                  HttpServletRequest request)
如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,表单验证通过。
如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到刚才的Struts-config.xml中的<action>的input中,视图组件通过<html:errors/>标签把request范围内的 ActionErrors 对象中包含的错误消息显示出来,提示用户修改错误。


3.ActionFormBean(2)—表单验证


(1)ActionErrors:类似 HashMap,用于保存错误信息,这些信息按照关键字(key)进行索引。错误消息不是一个字符串,而是一个ActionMessage实例。
ActionErrors通过add()方法添加ActionMessage
ActionMessage的构造器:public ActionMessage(String key),这里边的key必须是保存在消息资源文件中的错误消息的一个关键字

(2)如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,表单验证通过。
如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到的Struts-config.xml中的<action>的input属性定义的web中,视图组件通过<html:errors/>标签把request范围内的 ActionErrors 对象中包含的错误消息显示出来,提示用户修改错误。

(3)<html:errors>标签:
可以将这个标签放入任何包含表单的JSP中,紧跟口令字段
<html:errors>标签在 request 和 session范围内寻找 ActionMessages(或其子类ActionErrors),在从 ActionMessages 集合对象中读取 ActionMessage 对象,把 ActionMessage 对象包含的消息文本显示到网页上。
ActionErrors,ActionMessage,属性文件,错误关键字以及错误标签之间的关系:

4.复杂验证
Struts 框架的数据验证可以分为两种
表单验证
业务逻辑验证
业务逻辑验证通过Action的子类完成,在很多情况下,需要模型组件的介入,才能完成业务逻辑验证:根据逻辑验证的不同情况给客户返回不同的视图组件
boolean isMonster = new HandleUser().helloUser(user);
if(isMonster){
    ActionMessages errors = new ActionMessages();
    errors.add("monster", new ActionMessage("hello.dont.talk.to.monster"));
    this.saveErrors(request, errors);
    return mapping.getInputForward();
}else{
    request.setAttribute("userName",userName);
    return mapping.findForward("hello");
}

关于 ActionMessages 和 ActionErrors:
ActionMessages 是 ActionErrors 的父类
除 FormBean 的 validate() 的返回值用 ActionErrors 外,其它地方均使用ActionMessages.
saveErrors()方法:
              protected void saveErrors (HttpServletRequest?request, 
                                                    ActionMessages?errors)
在Action基类中定义,负责把ActionMessages对象保存在request范围内


5.HTML 标签

在HTML标签库中的定制标签本质上与平常的HTML<form>标签及其相关的输入标签是一对一的关系。这一标签库的目的是把视图组件联系到控制器组件上。
当struts被请求一个页面的时候,它首先将页面的struts标签都替换为必要的文本数据
如果页面中包含一个表单,那么struts将进行表单数据处理。如验证失败并且返回原表单界面,则该视图组件在显示错误信息的同时,提交前的表单也会被自动的显示出来

6.常用HTML标签概要

标签    用途/注解
html    产生一个<html>标签。也包括来自于用户会话中的 language 属性
form    定义一个表单。Action 和 focus 属性是最有用的属性
checkbox    产生一个检查框字段
file    产生一个文件选择输入字段
hidden    产生一个隐藏字段
option    产生一个选择项
options    产生一个选择项列表
password    产生一个口令输入字段
radio    产生一个单选输入字段
select    产生一个选择元素
text    产生一个文本输入字段
textarea    产生一个 html 文本区域元素
image    产生一个图像输入字段
button    产生一个按钮输入字段
cancel    产生一个取消按钮
submit    产生一个提交按钮
reset    产生一个重新设定按钮
errors    显示错误消息
img    产生一个 html img 标签

7.Token解决重复提交

在某些情况下,如果用户对同一个 HTML 表单多次提交,Web应用必须能够判断用户的重复提交行为,以做出相应的处理
可以利用同步令牌(Token)机制解决web应用中重复提交的问题。

8.Token解决重复提交

Action类中的相关方法:
protected boolean isTokenValid(HttpServletRequest request)
判断存储在当前用户会话中的令牌值和请求参数中的令牌值是否匹配,匹配返回 true。
protected void resetToken(HttpServletRequest request)
从当前 session 范围内删除令牌属性
protected void saveToken(HttpServletRequest request)
创建一个新的令牌,并把它保存在当前 session 范围内。
具体的 Token 处理逻辑由 org.apache.struts.util.TokenProcessor 类完成,根据用户会话 id 和当前系统时间生成一个唯一的令牌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值