JSP刷新页面表单重复提交问题解决办法分享

时间:2021-05-26

使用sessionID和时间戳作为标识,关键代码如下:

复制代码 代码如下:
public class SswpdjAction extends BaseAction{

   public String execute(){
     /**业务代码**/
     ................
     //设置标识
     this.setSessionToken();
     //转到添加页面
     return "toAdd";
   }
  
   public String reSave(){
     if(this.token != null && this.token.equals(this.getSessionToken())){
       /**设置新标识**/
       this.setSessionToken();
      
       /**业务代码**/
       ..............
       return "toAdd";
     }else{
       printWriter out = null;
       try{
         httpServletResponse.setContentType("text/html;charset=UTF-8");
         out = httpServletResponse.getWriter();
         out.println("<script>alert('刷新提交表单!');</script>");
         out.flush();
        
}catch(IOException e){
e.printStackTrace();
}finally{
if(out != null){
out.close();
}
}
     }
return null;
  }
}

public class BaseAction extends ActionSupport{

/**jsp页面标识**/
protected String token;

public String getToken(){
return token;
}

public void setToken(String token){
this.token = token;
}

public String getSessionToken(){
if(null != httpSession.getAttribute("Token")){
return httpSession.getAttribute("Token");
}else{
return null;
}
}

/**标识生成**/
public void setSessionToken(){
String flag = useMd5(httpSession.getId() + System.currentTimeMillis());
httpSession.setAttribute("Token", flag);
httpServletRequest.setAttribute("SessionToken", flag);
}

/**MD5加密**/
private String useMd5(String str){
byte[] bs = str.getBytes();
String result = null;
try{
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(bs);
result = md5.digest().toString();
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}finally{

}
return result;
}
}

JSP页面设置标识隐藏域:

复制代码 代码如下:
<form>
  <input type="hidden" name="token" value="${SessionToken}" />
</form>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章