【问题标题】:Update password from database using JavaServlet使用 Java Servlet 从数据库更新密码
【发布时间】:2017-12-10 11:30:11
【问题描述】:

你好,我在大学里做一个项目,我遇到了一个错误。 我正在开发一个 mypage 功能,您可以在登录时更新旧密码。问题是 ChangepasswordServlet 没有做它应该做的事情。

这里可以看到我的servlet,问题可能出在IF语句的某个地方。 (经理=实体经理)

@WebServlet(name = "ChangePasswordServlet", urlPatterns = {"/ChangePassword"})
public class ChangePasswordServlet extends HttpServlet {

@EJB
UserManagerLocal manager;

private void changePassword(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String loggedInUsersUsername = request.getRemoteUser();

    /* PrintWriter writer = response.getWriter(); */


    User userFromTheDB = manager.getUser(loggedInUsersUsername);
    String oldPasswordFromDB = userFromTheDB.getPassword();
    String oldPasswordFromForm = (String) request.getAttribute("theOldPW");
 ;
    String newPasswordFromForm = (String) request.getAttribute("theNewPW");
    String newPasswordToCheckFromForm = (String) request.getAttribute("theNewPWCheck");


    try {
        if (oldPasswordFromDB.toLowerCase().equals(oldPasswordFromForm.toLowerCase()) && newPasswordFromForm.toLowerCase().equals(newPasswordToCheckFromForm.toLowerCase())) {

            userFromTheDB.setPassword(newPasswordFromForm);
            manager.updateUser(userFromTheDB);
            response.sendRedirect("/Slit/MyPage/PasswordSucsess.jsp");

        } else {
            response.sendRedirect("Slit/Error/error.jsp");
        }
    }
    catch (NullPointerException en) {
        PrintWriter print = response.getWriter();
        print.println("nullpointeryes");
        print.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    changePassword(request, response);
}

    @Override
    protected void doPost (HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        changePassword(request, response);
    }  

所以

这是我的 JSP 表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<head>
<title>Her kan du endre ditt nåværende passord</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" 
href="/Slit/Templates/CSS/MainPageTemplate.css">
</head>
<body>
<title>Slit</title>
<div>
<div class="form">
    <form method="post" action="/Slit/ChangePassword">
        <input type="Password" name="theOldPW" placeholder="Gammelt 
Password"/>

        <input type="Password" name ="theNewPW" placeholder="Nytt 
Password"/>

        <input type="Password" name ="theNewPWCheck" placeholder=" Nytt 
Password på nytt"/>

    <input type="submit" name="ByttePassord" value="Trykk her for å bytte 
passord!"/>
    </form>
</div>
</div>
</body> 
</html>

</head>
<body>

</body>

所以在我用旧密码和新密码填写表格后,我得到了空指针。 如果我现在运行代码,我会收到“nullpointeryes”错误。 编辑: 这是填写表格后的控制台错误:

12:39:37,194 INFO  [stdout] (default task-12) Hibernate: select 
user0_.username as username2_3_0_, user0_.fName as fName3_3_0_, user0_.lName 
as lName4_3_0_, user0_.password as password5_3_0_, user0_.DTYPE as 
DTYPE1_3_0_ from User user0_ where user0_.username=?

感谢您的任何回答

【问题讨论】:

  • 包含nullpointeryescatch 块在这里真的没有帮助你。抛出的异常将包含有关NullPointerException 发生在哪一行的信息,但您对此异常不做任何事情。至少,使用en.printStackTrace(); 写出堆栈跟踪。这将告诉您发生异常的代码行,然后由您确定哪些变量是null

标签: java database jsp servlets nullpointerexception


【解决方案1】:

几个小时后,我发现我使用 get.attribute 而不是参数:/

String newPasswordFromForm = (String) request.getParameter("theNewPW");
String newPasswordToCheckFromForm = (String) 
request.Paramter("theNewPWCheck");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2019-10-24
    • 2020-10-14
    相关资源
    最近更新 更多