评论

收藏

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

开发技术 开发技术 发布于:2021-10-23 19:50 | 阅读数:515 | 评论:0

使用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>
关注下面的标签,发现更多相似文章