簡體   English   中英

從 web.xml 中刪除 FacesServlet 后,帶有 .jsf 擴展名的 URL 仍重定向到 .xhtml

[英]URLs with .jsf extension still redirect to .xhtml after FacesServlet removal from web.xml

我有一個 Web 應用程序,它最初是一個 JSF 應用程序,但已遷移到純 HTML/JavaScript。 我們現在正在完全消除 JSF。

我們有物理文件 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。

當在 Servlet 3.0+ 容器上使用 JSF 2.0+ 並且在 webapp 自己的web.xml沒有顯式FacesServlet注冊時, FacesServlet將在 webapp 啟動期間自動在 URL 模式/faces/**.faces*.jsf .

另請參閱其javadoc

如果沒有明確映射到這個servlet必須自動映射web.xmlweb-fragment.xml和的一個或多個以下條件是true

  • WEB-INF找到了faces-config.xml文件

  • faces-config.xml文件位於應用程序類路徑中 jar 的META-INF目錄中。

  • .faces-config.xml結尾的文件名位於應用程序類路徑中 jar 的META-INF目錄中。

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

  • 傳遞給ServletContainerInitializer實現的onStartup()方法的Set of classes 不為空。

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

  • /faces
  • *.jsf
  • *.faces

JSF 2.3 會將*.xhtml URL 模式添加到集合中(在 Mojarra 2.2.11 中向后移植)。

如果你想停止這種行為,並且你不能消除觸發器(例如仍然有一個faces-config.xml ),那么你最好的選擇是在 webapp 自己的web.xml *.xhtml上顯式注冊FacesServlet 這將覆蓋默認的自動注冊 URL 模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM