我讀過幾個文檔,但我不明白:我知道我做錯了什麼,但我不明白是什麼。我有一個完全動態生成的網站:幾乎沒有任何靜態內容。Java JSP/Servlet:控制器servlet拋出着名的堆棧溢出
因此,試圖瞭解JSP/Servlet的,我寫我自己的「前端控制器」攔截每一個查詢,它看起來像這樣:
<servlet-mapping>
<servlet-name>defaultservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
基本上我想要的任何用戶的要求,如:
- example.org
- example.org/bar
- example.org/foo.html
都會經過我寫的默認servlet。
然後servlet檢查URI,找到哪個.JSP請求必須出動,然後呢,已經正確設置所有屬性後,一:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(req, resp);
當我使用一個url模式(在web.xml)喜歡,比如*.html
,一切工作正常。但是,當我將其更改爲/*
(以真正攔截所有內容)時,我輸入了一個無限循環,並以一個... StackOverflow :)
當請求調度時,URI是「.../WEB-INF/jsp/index.jsp「本身由web.xml匹配filter/*我設置了嗎?
EDIT顯然,沒有,因爲這是一個精確映射到的index.jsp,因此它繞過了web.xml URL模式。所以我仍然沒有得到如何進入無盡的循環。
我應該怎麼做,如果我想攔截所有使用/ *網址模式,但能夠派遣/轉發/?
我不是在詢問關於規格/ Javadocs的信息:我對整體情況非常困惑,我需要一些解釋,以瞭解可能發生的事情。
我不應該截取所有的東西嗎?
如果我可以截取所有東西,我應該知道關於轉發/分派的內容?
相關:http://stackoverflow.com/questions/1069442/requestdispatcher-forward-loop – leonbloy 2010-06-01 02:58:59
@leonbloy:哦黨謝謝...我明白了。從BalusC的'答案顯然它是不是一個好主意,使用「/ *」的servlet映射:( – NoozNooz42 2010-06-01 04:58:46
請轉儲完整的堆棧跟蹤/類代碼 – techzen 2010-06-01 05:19:06