现在的位置: 首页 > 综合 > 正文

struts2防页面刷新重复提交

2013年10月05日 ⁄ 综合 ⁄ 共 2468字 ⁄ 字号 评论关闭
文章目录

  

struts2防页面刷新重复提交

做web开发时.经常会出现系统缓慢导致用户多次重复提交.或被恶意重复提交.有很多解决办法:比如:点了提交按扭后就让按扭 disable=flase或其他相关处理.但struts2中处理起来更方便.

主要是需要做以下几个步骤:

1、jsp中增加 <s: token />;

2、struts2配置文件中.action中增加几行代码:

<interceptor-ref name=”defaultStack” />
<interceptor-ref name=”token” />
<result name=”invalid.token” type=”redirect“>/token.jsp</result>
     //如果是重复提交则跳转至token.jsp页面

另外注意点的是:在提交成功后的<result name=”success” type=”redirect”>…</result> 也设置type=redirect

在页面加载时,<s: token />产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如:

<input type=”hidden” name=”struts.token.name” value=”struts.token”/>
<input type=”hidden” name=”struts.token” value=”BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR”/>

清 单6 <s:token />的HTML输出同时,将GUID放到会话(session)中;在执行 action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向 actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。

具体实现

首先看一下Action的代码:

package tutorial;

import com.opensymphony.xwork2.ActionSupport;

public class CoolTagAction extends ActionSupport

{    
private static final long serialVersionUID = 6820659617470261780L;

private String message;

   public String getMessage()

{
return message;
}

   public void setMessage(String message)

{
this.message = message;
}

@Override
   public String execute()

{
System.out.println(“Executing action, your message is “ + message);
return SUCCESS;
}
   
}

清 单7 src/tutorial/CoolTagAction.java以上代码一目了然,再看看JSP的写法:

JSP也很简单,就是加入<s:token />标志。

%@ page language=”java” contentType=”text/html; charset=utf-8″ pageEncoding=”utf-8″ %>
<%@ taglib prefix=s
uri
=/struts-tags
%><!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>Struts 2 Cool Tags - <s:token/ ></title>
<s:head />
</head>
<body>    
<h2>struts2防重复提交<s:token/></h2>
<s:actionerror />
<s:form action=”Token” >
<s:textfield name=”message” label=”Message” />
<s:token />
<s:submit />
</s:form>
</body>
</html>清单8 WebContent/token.jsp接下来是Actoin配置的XML片段:

<?xml version=”1.0″ encoding=”UTF-8″?> <!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”><struts>
<package name=”Struts2_COOL_TAGS_DEMO” extends=”struts-default”>
<action name=”Token” class=”tutorial.CoolTagAction”>
<interceptor-ref name=”defaultStack” />
<interceptor-ref name=”token” />
<result name=”invalid.token”>/token.jsp</result>                        
<result>/token.jsp</result>
</action>
<action name=”*”>
<result>/{1}.jsp</result>
</action>
</package>
</struts>
清单9 src/struts.xml以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果, 因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果

抱歉!评论已关闭.