Advertisement
Lauda

JSP + JSON registration

Jul 1st, 2014
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.93 KB | None | 0 0
  1. // SERVLET
  2. package servlets;
  3.  
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.util.Date;
  7.  
  8. import javax.servlet.RequestDispatcher;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpSession;
  14.  
  15. import model.User;
  16. import model.UserRole;
  17.  
  18. import org.json.JSONException;
  19. import org.json.JSONObject;
  20.  
  21. import DB.WebShop;
  22.  
  23. import com.fasterxml.jackson.databind.JsonNode;
  24. import com.fasterxml.jackson.databind.ObjectMapper;
  25.  
  26. public class RegisterServlet extends HttpServlet {
  27.  
  28.     /**
  29.      *
  30.      */
  31.     private static final long serialVersionUID = -1451723899712538224L;
  32.    
  33.     public RegisterServlet()
  34.     {
  35.         super();
  36.     }
  37.  
  38.     @Override
  39.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  40.         System.out.println("doso na REGSERVLET - GET");
  41.         HttpSession session = request.getSession();
  42.         User user = (User) session.getAttribute("user");
  43.        
  44.         response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
  45.        
  46.         String refURL = (String) request.getHeader("Referer");
  47.         session.setAttribute("refURL", refURL);
  48.        
  49.         System.out.println(new Date() + ": GET '/RegisterServlet' SessionID: "+ session.getId());
  50.        
  51.         if (user == null)
  52.         {
  53.             RequestDispatcher disp = request.getRequestDispatcher("pages/register.jsp");
  54.             disp.forward(request, response);
  55.         }
  56.         else if (refURL != null && !refURL.isEmpty())
  57.         {
  58.             response.sendRedirect(refURL);
  59.         }
  60.         else
  61.         {
  62.             response.sendRedirect(request.getContextPath());
  63.         }
  64.     }
  65.  
  66.     @Override
  67.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  68.         System.out.println("doso na REGSERVLET - POST");
  69.        
  70.          response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
  71.          getServletContext().removeAttribute("data");
  72.          WebShop ws = (WebShop)this.getServletContext().getAttribute("webShop");
  73.          
  74.          
  75.          String jsonData = request.getParameter("reg");
  76.             System.out.println("jsonData: " + jsonData);
  77.        
  78.             ObjectMapper mapper = new ObjectMapper();
  79.            
  80.             JsonNode rootNode = mapper.readTree(jsonData);
  81.            
  82.             JsonNode actionNode = rootNode.path("action");
  83.             JSONObject obj = new JSONObject();
  84.             String message = "";
  85.             Boolean err = false;
  86.            
  87.             System.out.println(actionNode.toString());
  88.             if (actionNode.toString().replace("\"", "").equals("new"))
  89.             {
  90.                 JsonNode dataNode = rootNode.path("data");
  91.                 User u = mapper.readValue(dataNode.toString(), User.class);
  92.                 u.setRole(UserRole.USER.getValue()); // We assume that reg'd user is a normal user..it can be later be promoted by an admin to a mod/admin.
  93.                
  94.                 if (u.getUsername().isEmpty() || u.getEmail().isEmpty() || u.getLastName().isEmpty() || u.getName().isEmpty() || u.getPassword().isEmpty() || u.getPhone().isEmpty())
  95.                 {
  96.                     System.out.println("ALL NULL");
  97.                     err = true;
  98.                     try {
  99.                         genErr(response, request, obj, err, "All fields are required. Please try again.");
  100.                     } catch (JSONException e) {
  101.                         // TODO Auto-generated catch block
  102.                         e.printStackTrace();
  103.                     }
  104.                     return;
  105.                 }
  106.                 if (ws.getUsers().containsKey(u.getUsername()))
  107.                 {
  108.                     err = true;
  109.                     try {
  110.                         genErr(response, request, obj, err, "Account with that username is already registered.<br />Please try again.");
  111.                     } catch (JSONException e) {
  112.                         // TODO Auto-generated catch block
  113.                         e.printStackTrace();
  114.                     }
  115.                     return;
  116.                 }
  117.                
  118.                 if (!err)
  119.                 {
  120.                     ws.addUser(u);
  121.                     ws.saveData();
  122.                    
  123.                     System.out.println("user: " + u.toString());
  124.                     System.out.println("All users: " + ws.getUsers().toString());
  125.                 }
  126.  
  127.             }
  128.             else if (actionNode.toString().replace("\"", "").equals("edit"))
  129.             {
  130.                 // TODO: fixme
  131.                 // For editing user
  132.             }
  133.             else if (actionNode.toString().replace("\"", "").equals("delete"))
  134.             {
  135.                 // TODO: fixme
  136.                 // Deleting a user
  137.             }
  138.            
  139.             if (!err)
  140.             {
  141.                 try {
  142.                     genErr(response, request, obj, err, "User successfully registered.<br />You will be redirected to the main page in 5 seconds.");
  143.                 } catch (JSONException e) {
  144.                     // TODO Auto-generated catch block
  145.                     e.printStackTrace();
  146.                 }
  147.             }
  148.     }
  149.  
  150.     private void genErr(HttpServletResponse response, HttpServletRequest request, JSONObject obj, Boolean b, String m) throws JSONException, IOException
  151.     {
  152.         response.setContentType("application/json");
  153.         obj.put("error", new Boolean(b));
  154.         if (!b)
  155.             obj.put("url", request.getContextPath());
  156.         obj.put("message", m);
  157.         PrintWriter pw = response.getWriter();
  158.         pw.print(obj);
  159.     }
  160. }
  161.  
  162. // PAGE
  163. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  164. <%@page pageEncoding="UTF-8" %>
  165. <jsp:include page="header.jsp"/>
  166. <div class="content">
  167.   <div class="container">
  168.     <div class="row">
  169. <script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
  170. <script type="text/javascript">
  171. $(document).ready(function() {
  172.     $("#register-form").validate({
  173.    
  174.         // RuleZ:
  175.         rules: {
  176.             username: {
  177.                 required: true,
  178.                 minlength: 3
  179.             },
  180.             password: {
  181.                 required: true,
  182.                 minlength: 6
  183.             },
  184.             confirm_password: {
  185.                 required: true,
  186.                 minlength: 6,
  187.                 equalTo: "#password"
  188.             },
  189.             name: "required",
  190.             lastName: "required",
  191.             email: {
  192.                 required: true,
  193.                 email: true
  194.             },
  195.             phone: {
  196.                 required: true,
  197.                 number: true
  198.             },
  199.             cbTos: "required"
  200.         },
  201.        
  202.         // Validation msg:
  203.         messages: {
  204.             firstname: "Please enter your first name",
  205.             lastname: "Please enter your last name",
  206.             password: {
  207.                 required: "Please provide a password",
  208.                 minlength: "Your password must be at least 6 characters long"
  209.             },
  210.             confirm_password: {
  211.                 required: "Please provide a password",
  212.                 minlength: "Your password must be at least 6 characters long",
  213.                 equalTo: "Please enter the same password as above"
  214.             },
  215.             email: "Please enter a valid email address",
  216.             phone: "Please enter a valid phone number",
  217.             cbTos: "Please accept our Terms and Conditions"
  218.         },
  219.        
  220.         // Using submitHandler to preform ajax calls only when form is validated!
  221.         submitHandler: function(form) {
  222.             var objectArray = $("#register-form :input").serializeArray(); // Make an array of input vals
  223.             var data, objectData = {};
  224.             action = 'new', name = null;
  225.            
  226.             for (var i in objectArray)
  227.             {
  228.                 name = objectArray[i].value;
  229.                 objectData[objectArray[i].name] = objectArray[i].value;
  230.             };
  231.  
  232.             // Delete stuff that's not needed for processing
  233.             delete objectData.confirm_password;
  234.             delete objectData.cbTos;
  235.  
  236.             data = { 'action' : action, 'data' : objectData };
  237.             data =  JSON.stringify(data);
  238.             data = "reg=" + data;
  239.                          
  240.             $.ajax({
  241.                 type: "POST",
  242.                 url: "<%=request.getContextPath()%>/RegisterServlet",
  243.                 data: data,
  244.                 dataType: "json"
  245.               }).
  246.                 success(function(res){
  247.                     if(res.url != null)
  248.                     {
  249.                         $("#msgBox").modal('show');  
  250.                         $("#msg").html(res.message);
  251.                         setTimeout(function() {
  252.                               window.location.href = res.url;
  253.                             }, 5000); // is k, 5sec
  254.                     }
  255.                    
  256.                     if (res.error) {
  257.                         $("#err").html(res.message);
  258.                         if ($("#err").is(":hidden"))
  259.                             $("#err").toggle();
  260.                        
  261.                     }
  262.  
  263.                 }).
  264.                 error(function(res) {
  265.                     if (res.error)
  266.                         {
  267.                             $("#err").text(res.message);
  268.                             $("#err").toggle();
  269.                         }
  270.                 });
  271.             return false;
  272.         }
  273.     });
  274.  
  275.     // Let's propose a username for our user when onFocus() event happens...
  276.     $("#username").focus(function()
  277.     {
  278.         var firstname = $("#name").val().toLowerCase();
  279.         var lastname = $("#lastName").val().toLowerCase();
  280.        
  281.         if (firstname && lastname && !this.value)
  282.         {
  283.             this.value = firstname + "." + lastname;
  284.         }
  285.     });
  286.    
  287.     $('#register-form input').bind('oninput', function(){
  288.  
  289.         if ($('#register-form').valid())
  290.             $('#reg_btn1').fadeIn();
  291.  
  292.     });
  293. });
  294.   </script>
  295. <!-- Register form -->
  296.                 <div class="col-md-6">
  297.                   <div class="formy well">
  298.                      <h4 class="title">Register a new account</h4>
  299.                                   <div class="form">
  300.                                     <div id="err" class="alert alert-danger" hidden="true"></div>
  301.                                    
  302.                                     <form id="register-form" method="post" class="form-horizontal">                                                                    
  303.                                            
  304.                                            <div class="form-group">
  305.                                             <label class="control-label col-md-3" for="name">Name</label>
  306.                                             <div class="col-md-6">
  307.                                               <input type="text" class="form-control" id="name" name="name" />
  308.                                             </div>
  309.                                           </div>
  310.                                          
  311.                                           <div class="form-group">
  312.                                             <label class="control-label col-md-3" for="lastname">Last name</label>
  313.                                             <div class="col-md-6">
  314.                                               <input type="text" class="form-control" id="lastName" name="lastName" />
  315.                                             </div>
  316.                                           </div>
  317.    
  318.                                              <div class="form-group">
  319.                                             <label class="control-label col-md-3" for="username2">Username</label>
  320.                                             <div class="col-md-6">
  321.                                               <input type="text" class="form-control" id="username" name="username" />
  322.                                             </div>
  323.                                           </div>
  324.                                           <!-- Password -->
  325.                                           <div class="form-group">
  326.                                             <label class="control-label col-md-3" for="password2">Password</label>
  327.                                             <div class="controls col-md-6">
  328.                                               <input type="password" class="form-control" id="password" name="password" />
  329.                                             </div>
  330.                                           </div>
  331.                                          
  332.                                             <div class="form-group">
  333.                                             <label class="control-label col-md-3" for="password2">Confirm Password</label>
  334.                                             <div class="controls col-md-6">
  335.                                               <input type="password" class="form-control" id="confirm_password" name="confirm_password" />
  336.                                             </div>
  337.                                           </div>
  338.                                                                        
  339.                                           <div class="form-group">
  340.                                             <label class="control-label col-md-3" for="phone">Phone</label>
  341.                                             <div class="col-md-6">
  342.                                               <input type="text" class="form-control" id="phone" name="phone" />
  343.                                             </div>
  344.                                           </div>
  345.                                          
  346.                                           <div class="form-group">
  347.                                             <label class="control-label col-md-3" for="username2">E-mail</label>
  348.                                             <div class="col-md-6">
  349.                                               <input type="text" class="form-control" id="email" name="email" />
  350.                                             </div>
  351.                                           </div>
  352.  
  353.                                           <div class="form-group">
  354.                                           <div class="col-md-9 col-md-offset-3">
  355.                                              <div class="checkbox inline">
  356.                                                 <label>
  357.                                                    <input type="checkbox" id="cbTos" name="cbTos" value="agree"> Agree with our Terms and Conditions
  358.                                                 </label>
  359.                                              </div>
  360.                                             </div>
  361.                                           </div>
  362.  
  363.                                           <!-- Buttons -->
  364.                                           <div class="form-group">
  365.                                              <!-- Buttons -->
  366.                                              <div class="col-md-6 col-md-offset-3">
  367.                                                 <button type="submit" id="reg_btn1" class="btn btn-default">Register</button>
  368.                                                 <button type="reset" class="btn btn-default">Reset</button>
  369.                                              </div>
  370.                                           </div>
  371.                                       </form>
  372.                                       <hr />
  373.                                       <h5>Hint</h5>
  374.                                            Register so you can fully explore our website.
  375.                                     </div>
  376.                                   </div>
  377.  
  378.                 </div>
  379.        </div>
  380.   </div>
  381. </div>
  382. <div id="msgBox" class="modal fade">
  383. <div class="modal-dialog">
  384.         <div class="modal-content">
  385.   <div class="modal-header">
  386.     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  387.     <h4>Message:</h4>
  388.   </div>
  389.   <div class="modal-body">
  390.  
  391.     <div id="msg" class="form"></div>
  392.  
  393.   </div>
  394.   <div class="modal-footer">
  395.     <p id="cntRedirect"><a href="<%=request.getContextPath()%>/Index">Home</a></p>
  396.     Note: Page will redirect automatically in 5 seconds.
  397.   </div>
  398.   </div>
  399.   </div>
  400. </div>
  401.  
  402. <jsp:include page="footer.jsp"/>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement