JAVA防止重复提交Web表单的方法
本文实例讲述了JAVA防止重复提交Web表单的方法。分享给大家供大家参考,具体如下:
packagecn.com.form;
importjava.io.IOException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.Random;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importsun.misc.BASE64Encoder;
//产生表单
publicclassFormServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//产生随机数
TokenProcessortp=TokenProcessor.getInstance();
Stringtoken=tp.generateToken();
request.getSession().setAttribute("token",token);
request.getRequestDispatcher("/form.jsp").forward(request,response);
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
classTokenProcessor//令牌
{
/*
*1.把构造函数私有
*2.自己创建一个
*3.对外暴露一个方法,允许获取上面创建的对象
**/
privatestaticfinalTokenProcessorinstance=newTokenProcessor();
privateTokenProcessor(){}
publicstaticTokenProcessorgetInstance()
{
returninstance;
}
publicStringgenerateToken()
{
Stringtoken=System.currentTimeMillis()+newRandom().nextInt()+"";
try{
MessageDigestmd=MessageDigest.getInstance("md5");
byte[]md5=md.digest(token.getBytes());
//base64编码
BASE64Encoderencoder=newBASE64Encoder();
returnencoder.encode(md5);
}catch(NoSuchAlgorithmExceptione){
//TODOAuto-generatedcatchblock
thrownewRuntimeException(e);
}
}
}
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>MyJSP'form.jsp'startingpage</title>
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="Thisismypage">
<!--
<linkrel="stylesheet"type="text/css"href="styles.css">
-->
</head>
<body>
<formaction="/Session/DoForm"method="post">
<inputtype="hidden"name="token"value="${token}">
用户名:<inputtype="text"name="userName">
<inputtype="submit"value="提交">
</form>
</body>
</html>
packagecn.com.form;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassDoForm
*处理表单提交的请求
*
*/
publicclassDoFormextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
/*StringuserName=request.getParameter("userName");
try{
Thread.sleep(1000*3);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("向数据库提交注册用户...");
*/
booleanb=isTokenValid(request);
if(!b)
{
System.out.println("请不要重复提交!");
return;
}
request.getSession().removeAttribute("token");
System.out.println("向数据库中注册用户==");
}
privatebooleanisTokenValid(HttpServletRequestrequest){
Stringclient_token=request.getParameter("token");
if(client_token==null)
{
returnfalse;
}
Stringserver_token=(String)request.getSession().getAttribute("token");
if(server_token==null)
{
returnfalse;
}
if(!client_token.equals(server_token))
{
returnfalse;
}
returntrue;
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
希望本文所述对大家Javaweb程序设计有所帮助。
热门推荐
10 五一公司放假祝福语简短
11 追星女孩的祝福语简短
12 给长辈端午祝福语 简短
13 生日祝福语有诗意简短
14 团圆日祝福语简短
15 中秋商务祝福语简短最新
16 温暖文艺简短祝福语短句
17 男孩上学祝福语简短的
18 入住酒店文案祝福语简短