簡體   English   中英

使用servlet登錄和注冊無效

[英]Login and registration using servlet doesn't work

因此,我嘗試制作一個登錄servlet和一個注冊servlet。 但是我似乎無法使其正常工作。

我試圖建立一個網上商店,您必須先登錄才能開始購物。 我是Web應用程序開發的新手,所以請多多包涵。

這是我的代碼:

登錄:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { String username = request.getParameter("userName"); String password = request.getParameter("password"); if(!username.equals("") && !password.equals("")) { for(Customer c : Data.getCustomers()) { if(c.getUserName().equals(username) && c.getPasword().equals(password)) { response.sendRedirect("Catalogue.html"); } else { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Invalid username or password</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Ooops, something went wrong</h1>"); out.println("<h2><b>Wrong username or password.</b></h2>"); out.println("<h2>Please </h2>"); out.println("<form>" + "<input type=\\"button\\" value=\\"Try again\\"" + "onClick=\\"history.go(-1);" + "return true; \\"></form>\\""); out.println("</body>"); out.println("</html>"); } } } } } 

注冊:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); String contextPath = request.getContextPath(); try (PrintWriter out = response.getWriter()) { String firstname = request.getParameter("firstName"); String lastname = request.getParameter("lastName"); String username = request.getParameter("userName"); String password = request.getParameter("password"); String email = request.getParameter("email"); Customer c = new Customer(firstname, lastname, username, password, email); if (request.getParameter("register") != null) { equals("") || username.equals("") || password.equals("") || email.equals("")) { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Missing info</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Ooops, something went wrong</h1>"); out.println("<h2><b>Please fill out all the fields to register.</b></h2>"); out.println("<form>" + "<input type=\\"button\\" value=\\"Try again\\"" + "onClick=\\"history.go(-1);return true; \\"></form>"); out.println("</body>"); out.println("</html>"); } else { for (Customer customer : Data.getCustomers()) { if (!username.equals(customer.getUserName()) && !password.equals(customer.getPasword())) { Data.addNewCustomer(firstname, lastname, username, password, email); response.sendRedirect("Catalogue.html"); } else { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Invalid username</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Ooops, try again!</h1>"); out.println("<h2><b>Username already in use</b></h2>"); out.println("<h2>Please choose another one and</h2>"); out.println("<form>" + "<input type=\\"button\\" value=\\"Try again\\"" + "onClick=\\"history.go(-1);" + "return true; \\"></form>"); out.println("</body>"); out.println("</html>"); } } } } } } 

HTML登錄:

 <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <center><h1>Login</h1></center> <form action="LoginServlet" method="post"> <center><dl> <dt><b>Please fill in your username and password to login: </b></dt> <dd>Username: <input type="text" name="userName"></dd> <dd>Password: <input type="password" name="password"></dd> </dl></center> <center> <input type="submit" name="Login" value="Login"> <input type="submit" name="cancel" value="Cancel"> <br><br><br><br><br><br> <b>If you don't have an account, please </b> <a href='Registration.html'>register</a><b>.</b> <br><br><br><img src="online-shop.jpg"> </form> </center> </body> </html> 

HTML注冊:

 <html> <head> <title>Register</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <center><h1>Register</h1></center> <form method="post" action="RegistrationServlet"> <center><dl> <dt><b>Please fill in the information below to register: </b></dt> <dd>Firstname: <input type="text" name="firstName"></dd> <dd>Lastname: <input type="text" name="lastName"></dd> <dd>Username: <input type="text" name="userName"></dd> <dd>Password: <input type="password" name="password"></dd> <dd>E-mail: <input type="text" name="email"></dd> </dl></center> <center> <input type="submit" name="register" value="Submit" > <input type="submit" name="register" value="Cancel" > <br><br><br><img src="online-shop.jpg"> </form> </center> </body> </html> 

您可以輸入一些日志以檢查至少

  1. 您的servlet完全被觸發了,
  2. 他們正在接收什么請求參數值,以及
  3. 與那些參數進行比較的數據。

但是,我想您會發現,當Data.getCustomers()返回零個客戶時,您的每個servlet都脫離了processRequest()方法的底部,而沒有發送重定向或在響應的輸出流中打印任何內容。 (除非任何表單字段留空,否則注冊Servlet將發送其錯誤響應)。

而且,我想您會發現,當您擁有客戶時,您的servlet會以有趣的方式失敗。 他們都掃描提供的客戶, 並對每個客戶執行操作。 您真正想要的是不同的:查找與給定用戶名匹配的現有客戶(不考慮密碼); 然后根據整體查找是否成功采取措施(包括檢查密碼)。 也許與其檢索和遍歷所有客戶, Data.getCustomerByUsername(String)添加方法Data.getCustomerByUsername(String)會更方便。 如果您不能這樣做,則可以向您的Servlet類添加類似的方法。

once try like this

out.println("<form><a href=\"catalogue.html\">link</a></form></body></html>");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM