2016-01-22 30 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