事件時間:2020.04.14
事件描述:JavaWeb項目中,前臺首頁跳轉出錯。
事件原代碼:
package com.lbookshop.servlet.home;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lbookshop.entity.LBOOKSHOP_CATEGORY;
import com.lbookshop.entity.LBOOKSHOP_USER;
import com.lbookshop.service.LBOOKSHOP_CATEGORYDao;
import com.lbookshop.service.LBOOKSHOP_USERDao;
/**
* Servlet implementation class SelectProductList
*/
@WebServlet("/selectproductlist")
public class SelectProductList extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ArrayList<LBOOKSHOP_CATEGORY> flist = LBOOKSHOP_CATEGORYDao.selectCat("father");
request.setAttribute("flist", flist);
ArrayList<LBOOKSHOP_CATEGORY> clist = LBOOKSHOP_CATEGORYDao.selectCat("child");
request.setAttribute("clist", clist);
String fid = request.getParameter("fid");
String cid = request.getParameter("cid");
int id = 0;
if (fid != null) {
id = Integer.parseInt(fid);
}
if (cid != null) {
id = Integer.parseInt(cid);
}
request.setAttribute("title", LBOOKSHOP_CATEGORYDao.selectByID(id).getCATE_NAME());
request.getRequestDispatcher("productlist.jsp").forward(request, response);
}
}
事件錯誤具體描述:
在路徑爲[/項目名]的上下文中,servlet[com.XXXX.servlet.home.SelectProductList]的Servlet.service()引發異常
java.lang.NullPointerException
at com.XXXX.servlet.home.SelectProductList.doGet(SelectProductList.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:830)
事件錯因及解決辦法:
request.setAttribute("title",LBOOKSHOP_CATEGORYDao.selectByID(id).getCATE_NAME());
/*Console中顯示此行有錯誤,但我仔細檢查,發現並無錯誤,於是開始逐行分析代碼*/
String fid = request.getParameter("fid");
String cid = request.getParameter("cid");
//在此處加入彈出界面,查看fid,cid
System.out.println(fid);
System.out.println(cid);
int id = 0;
if (fid != null) {
id = Integer.parseInt(fid);
}
if (cid != null) {
id = Integer.parseInt(cid);
}
//在此處加入彈出界面,查看id
System.out.println(id);
request.setAttribute("title", LBOOKSHOP_CATEGORYDao.selectByID(id).getCATE_NAME());
發現輸出爲null,null,0.然後得知fid,cid出錯,於是排查發現fid處原爲id,於是把id改爲fid。
//原來的代碼
<li><a href="selectproductlist?id=${f.CATE_ID}">${f.CATE_NAME}</a>
//更改後的代碼
<li><a href="selectproductlist?fid=${f.CATE_ID}">${f.CATE_NAME}</a>
最後,可以實現前臺頁面正常跳轉。
藉此文告誡廣大碼友,代碼書寫要心細,出錯千萬莫焦急,一步一步排錯誤, 定能早日達心意。