我有一個條目servlet(稱爲DispatcherServlet),它根據配置參數將所有傳入的GET和POST請求重定向到/ *到其他servlet。爲了將請求分發給其他servlet,我使用它們的名稱而不是路徑,因爲我的DispatcherServlet在聽取/ *時會以無限循環結束。Servlet:在使用註釋而不是web.xml時,通過名稱向servlet轉發請求?
「舊」的方式是給的servlet在web.xml描述了一個名字:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
</servlet>
之後,一個人能夠使用RequestDispatcher
時它的名字,以解決該servlet,例如,。我的DispatcherServlet中的代碼如下所示:
RequestDispatcher dispatcher = getServletContext()。getNamedDispatcher(「MyServlet」); dispatcher.forward(request,response);
這個效果很好。但是,我想用「新」的Servlet 3個標註不web.xml中,所以我這樣做:
@WebServlet(name="MyServlet")
public class MyServlet extends HttpServlet {
...
但現在,我的DispatcherServlet內getServletContext().getNamedDispatcher("MyServlet")
返回空,而不是爲MyServlet
適當的調度雖然我希望@WebServlet(name="MyServlet")
行爲同樣喜歡<servlet-name>MyServlet</servlet-name>
我已經在Tomcat 7測試這個 這是因爲MyServlet沒有被時間尚未加載DispatcherServlet的時候被調用,因此MyServlet的名字不知道?如果是這樣,@WebServlet(name="...")
註釋是什麼意思;)
請不要回答像「爲什麼你不使用過濾器?」等等。這更多關於註釋和web.xml的背景。
在此先感謝!
(PS請更改標題,如果你找到更合適的一個。))