提交表单时出现java.lang.NullPointerException及HTTP 500错误求助
解决新增供应商时的java.lang.NullPointerException问题
从你的错误日志和代码来看,这个空指针异常的原因非常明确:你在SupplierController中声明的SupplierDAO实例dao从未被初始化,当doPost方法执行到dao.add(supplier)(第91行)时,dao还是null状态,调用它的方法自然会抛出NullPointerException。
问题根源
看你的SupplierController代码,你只做了变量声明:
private SupplierDAO dao;
但在构造函数或者任何初始化逻辑里,都没有创建SupplierDAO的实例,所以这个变量始终是null。
修复方案
最简单的修复方式是在SupplierController的构造函数中初始化dao:
public SupplierController() { super(); dao = new SupplierDAO(); // 新增这一行,实例化SupplierDAO对象 }
或者你也可以直接在变量声明时完成初始化:
private SupplierDAO dao = new SupplierDAO();
额外的小问题提醒
在你的doPost方法里,还有一个参数赋值错误:
supplier.setSupplier_address(request.getParameter("supplier_description"));
这里你把供应商地址(supplier_address)错误地赋值成了描述字段的参数,应该修正为:
supplier.setSupplier_address(request.getParameter("supplier_address"));
附你提供的错误日志
Jun 01, 2018 5:05:39 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [SupplierController] in context with path [/jsp-projek] threw exception java.lang.NullPointerException at eManage.controller.SupplierController.doPost(SupplierController.java:91) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
附你提供的相关代码
public class SupplierController extends HttpServlet { private static final long serialVersionUID = 1L; private static String ADD = "/supplier_add.jsp"; private static String VIEW = "/supplier_view.jsp"; private static String EDIT = "/supplier_edit.jsp"; private static String LIST = "/supplier.jsp"; String forward=""; private SupplierDAO dao; /** * @see HttpServlet#HttpServlet() */ public SupplierController() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if (action.equalsIgnoreCase("SupplierList")){ forward = LIST; try { request.setAttribute("suppliers", dao.getAllSupplier()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (action.equalsIgnoreCase("SupplierView")){ forward = VIEW; int supplierid = Integer.parseInt(request.getParameter("supplierid")); SupplierBean supplier = dao.getSupplierById(supplierid); request.setAttribute("supplier", supplier); } else if (action.equalsIgnoreCase("SupplierDelete")){ int supplierid = Integer.parseInt(request.getParameter("supplierid")); dao.delete(supplierid); request.setAttribute("suppliers", dao.getAllSupplier()); } else if (action.equalsIgnoreCase("SupplierEdit")){ forward = EDIT; int supplierid = Integer.parseInt(request.getParameter("supplierid")); SupplierBean supplier = dao.getSupplierById(supplierid); request.setAttribute("supplier", supplier); } else { forward = ADD; } RequestDispatcher view = request.getRequestDispatcher(forward); view.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub SupplierBean supplier = new SupplierBean(); supplier.setSupplier_name(request.getParameter("supplier_name")); supplier.setSupplier_address(request.getParameter("supplier_description")); supplier.setSupplier_contact_num(request.getParameter("supplier_contact_num")); supplier.setSupplier_description(request.getParameter("supplier_description")); String supplierid = request.getParameter("supplier_id"); if(supplierid == null || supplierid.isEmpty()) { try { dao.add(supplier); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ supplier.setSupplier_id(Integer.parseInt(supplierid)); try { dao.edit(supplier); } } } }
内容的提问来源于stack exchange,提问作者shafiq ruslan
相关产品推荐
相关产品推荐

