实现原理图:
HttpSession案例,简单的购物车,登陆注册功能(绝对的不用框架,包括jsp)
工具MD5Utile
代码:
public class MD5Util {
//拿message的指纹
public static String encoding(String message){
try{
MessageDigest md = MessageDigest.getInstance("md5");
byte b[] = md.digest(message.getBytes());//指纹
//把b转换成名为:Base64编码(把3个字节转换为4个字节,不足的前面补0)
BASE64Encoder base64 = new BASE64Encoder();
return base64.encode(b);
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
Regist Code:
public class RegistServletUI extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//产生一个令牌
String s = ""+System.currentTimeMillis()+new Random().nextLong();
s = MD5Util.encoding(s);
HttpSession session = request.getSession();
session.setAttribute("token", s);
out.write("<form id='f1' action='"+request.getContextPath()+"/servlet/ServletDemo1' method='post'>");
out.write("姓名:<input type='text' name='name'/><br/>");
out.write("<input type='hidden' name='token' value='"+s+"'/><br/>");
out.write("<input type='button' value='注册' onClick='toSubmit(this)'/>");
out.write("</form>");
out.write("<script type='text/javascript'>");
out.write("function toSubmit(btnObj){btnObj.disabled='disabled';document.getElementById('f1').submit();}");
out.write("</script>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Demo code:
public class ServletDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String iToken = request.getParameter("token");
String sToken = (String)session .getAttribute("token");
if(!iToken.equals(sToken)){
out.write("请不要重复提交");
return;
}
String name = request.getParameter("name");
try {
Thread.sleep(2000);//模拟延时
} catch (InterruptedException e) {
e.printStackTrace();
}
session.removeAttribute("token");
System.out.println(name);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}