您的位置:首页 > 其它

利用session解决重复提交的问题

2016-06-15 13:33 337 查看
RegisterServletUI.java

public class RegisterServletUI extends HttpServlet {
//
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// 产生一个唯一的值
String token = "";

try {
token = UUID.randomUUID().toString();

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bs = md.digest(token.getBytes());
// 采用数据指纹进一步加密,拿到的数据称为数据指纹:原理 三字节变四字节 00000000 - 00111111 0~63
BASE64Encoder base = new BASE64Encoder();
token = base.encode(bs);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// 将指令存储到session
request.getSession().setAttribute("stoken", token);

String error = (String) request.getAttribute("error");
if (error != null) {
out.write(error);
}

// 创建页面
out.write("<form action='" + request.getContextPath()
+ "/servlet/RegisterServlet' method = 'post'><br>");
out.write("姓名:<input type = 'hidden' name='ftoken' value='" + token
+ "'><br>");
out.write("姓名:<input type = 'text' name='username'><br>");
out.write("<input type='submit' value='注册' ><br>");
out.write("</form>");
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}


RegisterServlet.java
public class RegisterServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

String name = request.getParameter("username");
String ftoken = request.getParameter("ftoken");

if("".equals(name)){
request.setAttribute("error", "用户名必须填写");
request.getRequestDispatcher("RegisterServletUI").forward(request, response);

}else{
String stoken = (String) request.getSession().getAttribute("stoken");
if(ftoken.equals(stoken)){
out.write("用户已经存在数据库中");
request.getSession().removeAttribute("stoken");
}else{
out.write("请不要重复提交");
response.setHeader("Refresh", "2;ur="+request.getContextPath()+"/servlet/RegisterServletUI");
}
}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: