現象:Eclipse 啟動 Tomcat 後,訪問特定項目 JSP 頁面無響應,控制台輸出大量重複堆棧信息,涉及 `JspServletWrapper`、`ApplicationDispatcher` 等類,典型的無限遞歸調用。
堆棧特徵分析
關鍵調用鏈:
at org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
at org.apache.jsp.islogin_jsp._jspService(islogin_jsp.java:66)
... 反覆循環 ...
這表明 `index.jsp` 和 `islogin.jsp` 互相 `` 或 `` 對方,形成死循環。
排查步驟
- 檢查項目部署:確認項目是否正確發布到 Tomcat `webapps`,嘗試 Clean -> Rebuild。
- 聚焦 `index.jsp`:打開該文件,搜尋 `` 或 ``。
- 檢查 `islogin.jsp`:同理搜尋是否包含指向 `index.jsp` 的跳轉/包含標簽。
- 邏輯修正:打破循環引用。常見修正:在 `islogin.jsp` 中用 `` 替代 forward,或增加條件判斷避免重複跳轉。
最佳實踐建議
- 避免在 JSP 中嵌入複雜業務邏輯,轉移到 Servlet/Controller。
- 使用 JSTL `` 控制流程,而非多層 forward/include。
- 開發階段啟用 Tomcat 開發模式(`development=true`),便於定位行號。