利用同步令牌(Token)机制可以解决Web应用中重复提交的问题,Struts通过org.apache.struts.action.Action类中提供的一系列和Token相关的方法给出一个参考实现:
1.protected boolean isTokenValid(javax.servlet.http.HttpServletRequset requset)
判断存储在当前用户会话中的令牌值和请求参数中的令牌值是否匹配。如果匹配,就返回true,否则返回false.只要符合以下情况之一,就会返回false:
2.protected void resetToken(javax.servlet.http.HttpServletRequest request)
从当前session范围内删除令牌属性。
3.protected void saveToken(javax.servlet.http.HttpServletRequest request)
创建一个新的令牌,并把它保存在当前session范围内,如果HttpSession对象不存在就首先创建一个HttpSession对象。
同时标签的实现类org.apache.struts.taglib.html.FormTag的renderToken()方法判断在session范围内是否存在Token,如果存在,就在表单中生成一个包含Token信息的隐藏字段,也就是说我们直接使用Struts的表单标签就行,不用手动的添加判断获取 session中的Token。
下面就一个小例子来详细的讲叙Struts中如何利用Token解决重复提交:
< xml version="1.0" encoding="UTF-8" >
Struts-Token
index.jsp
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/struts-config.xml
2
action
*.do