2016-01-22 65 views
4

我目前正在做一個關於java eclipse IDE的項目。我有一個servlet,下面顯示了密碼更改的功能。正如您所看到的,我已經根據用戶輸入將它編程爲返回的各種錯誤,例如, 「密碼不匹配」。但是,這總是打印在屏幕的頂部。有什麼辦法可以將這些錯誤輸出爲實際格式錯誤?可能是以一個彈出框的形式,或者至少將它放置在適當的位置?如何以良好的格式打印/顯示錯誤?

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class NewPassword extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

       response.setContentType("text/html;charset=UTF-8"); 
       PrintWriter out = response.getWriter(); 

       String oldpassword = request.getParameter("oldpassword"); 
       String newpassword = request.getParameter("newpassword"); 
       String confirmpassword = request.getParameter("confirmpassword"); 

       int newpass = newpassword.length(); 

       HttpSession session = request.getSession(false); 
       String employeeid = ""; 

       if(session != null) { 
        employeeid = (String)session.getAttribute("employeeid"); 
       } 

       boolean st = false; 
       try { 
        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 
        PreparedStatement ps = con.prepareStatement("SELECT pwd FROM payroll_system.employee_login WHERE employeeID = ?"); 
        ps.setString(1, employeeid); 
        ResultSet rs = ps.executeQuery(); 
        st = rs.next(); 
        String currentpassword = rs.getString("pwd"); 
        if(st) { 

         if((currentpassword.equals(oldpassword)) && newpassword.equals(confirmpassword) && newpass >= 8) { 
          PreparedStatement pd = con.prepareStatement("UPDATE payroll_system.employee_login SET pwd = ? where employeeID = ?"); 
          pd.setString(1, newpassword); 
          pd.setString(2, employeeid); 
          int updated = pd.executeUpdate(); 
          if(updated > 0){ 
           out.println("Password Successfully Updated"); 
           RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
           rd.include(request, response); 
          } 
         } 

         else if(oldpassword.equals("") || newpassword.equals("") || confirmpassword.equals("")) { 
          out.println("Fields cannot be left blank."); 
          RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
          rd.include(request, response); 
         } 
         else if(!currentpassword.equals(oldpassword) && !newpassword.equals(confirmpassword)) { 
          out.println("Old password is incorrect and passwords do not match, please try again."); 
          RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
          rd.include(request, response); 
         } 
         else if(!currentpassword.equals(oldpassword)) { 
          out.println("Old password entered incorrectly, please try again."); 
          RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
          rd.include(request, response); 
         } 
         else if(!newpassword.equals(confirmpassword)) { 
          out.println("Passwords do not match, please try again."); 
          RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
          rd.include(request, response); 
         } 
         else if(newpass < 8) { 
          out.println("New Password must be atleast 8 characters in length."); 
          RequestDispatcher rd = request.getRequestDispatcher("changePassAdmin.html"); 
          rd.include(request, response); 
         } 



        } 
       }catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
       out.close(); 
     } 
    } 
+1

這是一個web應用程序? – Stultuske

+0

@Stultuske嗨!是的,它是一個Web應用程序。 – javaprogrammer

+0

您是否將密碼存儲爲明文? – Tobb

回答

1

您可以使用AJAX和JS應對error.Use AJAX與服務器通信,當出現錯誤,使用js函數來顯示dialog.This只是一個solution.You可以試試這個。

+0

有沒有辦法在java中做到這一點?如果可能,我甚至可以使用out.println(html代碼)。我可以在java servlet中做html。 – javaprogrammer

+0

@javaprogrammer誰必須看到錯誤?用戶權利?用戶在哪裏使用webapp?在客戶端...所以...你可以發送一個請求到java來獲取錯誤文本,但你必須通過JavaScript或jQuery在客戶端(視圖)端顯示它。 –

+0

@javaprogrammer你不應該在java中做html代碼。改爲使用jsp或jsf。 – Stultuske

1

您可以使用spring-form標籤進行bean驗證。

例如,在JSP中你可能會顯示錯誤的具體領域:

<form:form method="post" action="/change-password" modelAttribute="passwordChangeForm"> 
     <form:label path="password">New password</form:label> 
     <form:input path="password"/> 
     <form:errors path="password"/> 
</form:form> 
0

您可以使用日誌框架一樣log4j的。例如,在Log4j中,有記錄器,appenders和佈局。藉助佈局,您可以設計自己的錯誤消息的格式。

A short introduction to Log4j