BUG:Servlet.service()引發異常

事件時間: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>

最後,可以實現前臺頁面正常跳轉。

藉此文告誡廣大碼友,代碼書寫要心細,出錯千萬莫焦急,一步一步排錯誤, 定能早日達心意。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章