利用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);
}
}
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);
}
}
相关文章推荐
- iOS 计算 UIWebView 的高度的问题
- 一个操作系统的实现(11)-让操作系统进入保护模式
- iOS导航栏随滑动渐隐渐现且不影响push页面导航栏的实现方式
- 如果业界中不用高级算法和数据结构,那为什么还要学?
- Compare Version Numbers
- 多旋翼控制中陀螺仪的作用
- ubuntu deepin安装node.js和npm
- 三种加密方式
- 重新排序链表
- 《Web全栈工程师的自我修养》读书笔记(转载)
- 黑马程序员:2000字带你回顾2016WWDC
- 交换数组A和数组B的元素(这两个数组大小相同)
- e+创业:炒散App搵银更快趣
- ArrayList与LinkedList源码分析
- PHP判断用户设备是否是移动设备
- Entity Framework(EF)无法对没有主键的视图映射实体
- 第十四周项目1.2—排序函数模板(选择法排序)
- 2016.6.14笔记-代码环境的搭建
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- python多线程ssh爆破