2015-09-15 25 views
2

我有一個最初是JSF應用程序但已被遷移到純HTML/JavaScript的Web應用程序。我們現在正在完全消除JSF。從web.xml中刪除FacesServlet後,帶.jsf擴展名的URL仍然會重定向到.xhtml

我們有物理文件main.xhtml,它是由「main.jsf」請求的,其中FacesServlet是在web.xml中用url-mapping * .jsf聲明的。

我們已將內容移至main.html,並在main.xhtml中放置元標記REFRESH以重定向至main.html。

現在的問題是,即使我從web.xml中刪除FacesServlet,它仍然將main.jsf的請求重定向到main.xhtml。如果我將文件main.xhtml重命名爲main.jsf,那麼請求main.jsf會給出404,並且服務器日誌說它找不到文件「main.jsp」。

現在的問題是:即使在web.xml中沒有FacesServlet時,如果它將* .jsf重定向到* .jsp或* .xhtml,那麼對此重定向負責?

我正在使用GlassFish 3.1.2.2。

回答

2

當一個Servlet容器3.0+使用JSF 2.0+,而且也沒有明確的FacesServlet登記的webapp自己web.xml,那麼FacesServlet將web應用程序的啓動過程中自動將URL模式/faces/**.faces*.jsf註冊。

也是其javadoc見:如果沒有明確web.xmlweb-fragment.xml和一個或多個以下條件映射

這個servlet必須自動映射是true

  • 一個faces-config.xml文件在WEB-INF

  • 中發現的faces-config.xml文件在META-INF目錄中的應用程序的類路徑中罐子的發現。

  • .faces-config.xml結尾的文件名在META-INF目錄中的應用程序的類路徑罐子被發現。

  • javax.faces.CONFIG_FILES上下文參數在web.xmlweb-fragment.xml中聲明。

  • 傳遞給ServletContainerInitializer實現的onStartup()方法的Set類不是空的。

如果運行時確定servlet必須被自動映射,它必須被映射到以下<url-pattern>條目。

  • /faces
  • *.jsf
  • *.faces

JSF 2.3將添加*.xhtml URL模式所設置的(這是在鑽嘴魚科2.2.11反向移植)。

如果你想停止這種行爲,並不能消除觸發器(例如仍具有faces-config.xml),那麼你最好的選擇是在Web應用程序自身的web.xml*.xhtml明確註冊FacesServlet。這將覆蓋默認的自動註冊的URL模式。

+0

感謝您的澄清。標記爲已接受。 – thomjah

相關問題