[英]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.xml
或web-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.xml
或web-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.