当我尝试在 JSP 工作中编辑配置文件时,会发生此错误。 NetBeans 中显示如下错误:
|#]
org.apache.catalina.util.Enumerator@3b90e68c|#]
StandardWrapperValve[UpdateProfileServlet]: Servlet.service() for servlet UpdateProfileServlet threw exception
java.lang.NullPointerException
at ict.db.AccountDB.updateUser(AccountDB.java:178)
at servlet.UpdateProfileServlet.doPost(UpdateProfileServlet.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1540)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:119)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:611)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:550)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:75)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:114)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:199)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:439)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:144)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:515)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.lang.Thread.run(Thread.java:750)
|#]
这里是源代码的链接,因为完整的代码很长,这里是 源代码
[用户配置文件.jsp]
<%--
Document : Profie
Created on : 2024年4月12日, 上午12:51:25
Author : User
--%>
<%@page import="java.util.ArrayList"%>
<%@ page import="javax.servlet.http.HttpSession"%>
<%@ page import="ict.Bean.AccountBean"%>
<%@page contentType="text/html" pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
//<style> ... </style>
<script>
function showContact() {
var contactInfo = document.getElementById("contact-info");
contactInfo.classList.toggle("hidden");
}
</script>
</head>
<body>
<%
AccountBean user = (AccountBean) session.getAttribute("AccountBean");
if (user == null) {
response.sendRedirect("LoginUser.jsp"); // Redirect to login if no session found
return;
}
%>
<form method="POST" action="UpdateProfileServlet">
<div class="container">
<div class="row gutters">
<div class="col-xl-3 col-lg-3 col-md-12 col-sm-12 col-12">
<div class="card h-100">
<div class="card-body">
<div class="account-settings">
<div class="user-profile">
<input type="text" name="id" value="<%= user.getId()%>" hidden>
<h5 class="user-name"><%= user.getUsername()%></h5>
<h6 class="user-email"><%=user.getEmail()%></h6>
<h6 class="user-role"><%= user.getRole()%></h6>
</div>
</div>
</div>
</div>
</div> <div class="col-xl-9 col-lg-9 col-md-12 col-sm-12 col-12">
<div class="card h-100">
<div class="card-body">
<div class="row gutters">
<div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
<h6 class="mb-2 text-primary">Personal Details</h6>
</div>
<div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
<div class="form-group">
<label for="fullName">Full Name</label>
<input type="text" class="form-control" id="fullName" name="name" placeholder="Enter full name" value="<%= user.getUsername()%>">
</div>
</div>
<div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
<div class="form-group">
<label for="eMail">Email</label>
<input type="email" class="form-control" id="eMail" name="email" value="<%= user.getEmail()%>" placeholder="Enter email">
</div>
</div>
<div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
<div class="form-group">
<label for="role">Role</label>
<input type="text" class="form-control" id="Role" value="<%=user.getRole()%>" readonly> </div>
</div>
<div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
<div class="form-group">
<label for="pw">Password</label>
<input type="password" class="form-control" id="pw" name="password" placeholder="password" maxlength="10">
</div>
</div>
<div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
<div class="text-right">
<button id="submit" class="btn btn-secondary"><a href="UserHome.jsp" style="text-decoration:none">Cancel</a></button>
<a href=\"UpdateProfile?action=getEditCustomer&id=" + c.getId() + "\">
<input type="submit" id="submit" name="submit" class="btn btn-primary"value="Update"></a>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</body>
[UpdateProfileServlet.java]
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package servlet;
import ict.Bean.AccountBean;
import ict.db.AccountDB;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author plksa
*/
@WebServlet(name = "UpdateProfileServlet", urlPatterns = {"/UpdateProfileServlet"})
public class UpdateProfileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.print(request.getAttributeNames());
String id = request.getParameter("id");
String name = request.getParameter("name");
String email = request.getParameter("email");
String password = request.getParameter("pw");
String role = request.getParameter("role");
// String day = request.getParameter("day");
// String month = request.getParameter("month");
// String year = request.getParameter("year");
// String gender = request.getParameter("gender");
// String dateOfBirth = year + "-" + month + "-" + day;
// Database connection details
//String url = "jdbc:mysql://localhost:3306/system_db";
String url = "jdbc:mysql://localhost:3306/asm_gp13_db_final";
String username = "root";
String dbPassword = "";
//AccountDB db = new AccountDB("jdbc:mysql://localhost:3306/system_db", "root", "");
AccountDB db = new AccountDB(url, username,dbPassword);
AccountBean account = new AccountBean();
account.setId(id);
account.setUsername(name);
account.setEmail(email);
account.setPassword(password);
account.setRole(role);
//boolean updateSuccess = db.updateUser(id, name, email, password, role, dateOfBirth, gender);
boolean updateSuccess = false;
try {
updateSuccess = db.updateUser(name, email, password);
} catch (SQLException ex) {
Logger.getLogger(UpdateProfileServlet.class.getName()).log(Level.SEVERE, null, ex);
}
if (updateSuccess) {
if ("user".equals(role)) {
response.sendRedirect("UserHome.jsp"); // Redirect to homepage
} else if ("courier".equals(role)) {
response.sendRedirect("CourHome.jsp"); // Redirect to homepage
} else if ("Technician(Administrator)".equals(role)) {
response.sendRedirect("TechHome.jsp"); // Redirect to homepage
}
} else {
request.setAttribute("errorMessage", "Failed to update account.");
request.getRequestDispatcher("update.jsp").forward(request, response); // Send back to the form with an error message
}
}
}
[AccountDB.java] https://pastebin.com/mjcdJVMS
我试图更新数据库中的配置文件,但我尝试了很多方法,但仍然有错误。
看起来
password
为 null,当调用 isEmpty()
方法时,它将抛出 NullPointerException。您在类 UpdateProfileServlet.doPost
之前添加一个条件 try catch block
if(password == null){
password = "";
}