package bce.server.servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import bce.server.entities.PersistentUser; import bce.server.servicers.RegisterPageServicer; import bce.server.util.SpringUtil; /** * 用于处理BCE注册页面请求的控制器 * * @author robins * */ @WebServlet(displayName = "注册页面控制器", description = "用于处理BCE注册页面请求的控制器", name = "RegisterServlet", urlPatterns = { "/RegisterServlet.sl" }) public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected final static String PROCESS_FORM = "0"; protected final static String PROCESS_USERNAME = "1"; protected final static String PROCESS_EMAIL = "2"; private RegisterPageServicer servicer; /** * @see javax.servlet.GenericServlet#init() */ @Override public void init() throws ServletException { super.init(); servicer = (RegisterPageServicer) SpringUtil.getBean("registerPageServicer"); } /** * @see HttpServlet#HttpServlet() */ public RegisterServlet() { super(); } /** * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Encapsulated request processing layer of doPost method. * * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException * @throws IOException */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String flag = request.getParameter("flag"); if (flag != null && flag.trim().equals(RegisterServlet.PROCESS_USERNAME)) { processUserName(request, response); return; } else if (flag != null && flag.trim().equals(RegisterServlet.PROCESS_EMAIL)) { processEmail(request, response); return; } else if (flag != null && flag.trim().equals(RegisterServlet.PROCESS_FORM)) { PersistentUser user = processForm(request, response); // return null means vc errors in the form, hence send it back for correction if (user == null) { request.setAttribute("errorInfo", "vc_error"); RequestDispatcher dispatcher = request.getRequestDispatcher("bce_user_register.jsp"); dispatcher.forward(request, response); return; // return not null means the form has been submitted successfully, hence forward to next step } else { request.getSession().setAttribute(PersistentUser.ATTRIBUTE_KEY, user); request.getSession().setAttribute("flag", "0"); response.sendRedirect("MainPageServlet.sl"); return; } } } /** * Process the uniqueness of the user email in database asynchronously. * * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException * @throws IOException */ protected void processEmail(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String email = request.getParameter("email").trim(); System.out.println(email); response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); if (this.servicer.asyncValidateEmail(email)) { out.println("{\"result\":\"success\"}"); } else { out.println("{\"result\":\"fail\"}"); } out.flush(); } /** * Process the user name existence validation asynchronously. * * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException * @throws IOException */ protected void processUserName(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName").trim(); System.out.println(userName); response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); if (this.servicer.asyncValidateUserName(userName)) { out.println("{\"result\":\"success\"}"); } else { out.println("{\"result\":\"fail\"}"); } out.flush(); } /** * Process the data sent from the whole front page form. * * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException * @throws IOException */ protected PersistentUser processForm(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** check validate code */ String codeInRequest = request.getParameter("cd"); String codeInSession = (String) request.getSession().getAttribute("vcode"); if (!this.servicer.checkValidateCode(codeInRequest, codeInSession)) { System.out.println("验证失败!"); return null; } /** if validate code is right, save new member info */ Map<String, String> memberInfoMap = new HashMap<String, String>(); memberInfoMap.put("userName", request.getParameter("un")); memberInfoMap.put("password", request.getParameter("p1")); memberInfoMap.put("email", request.getParameter("em")); PersistentUser user = this.servicer.save(memberInfoMap); return user; } }