3 回答

TA貢獻1735條經驗 獲得超5個贊
首先,<welcome-file>并不代表“默認主頁”的路徑。它代表包含您希望擔任了作為默認的文件時,文件夾中的物理文件的文件名的文件夾一樣/,/foo/,/foo/bar/,請求等。
因此,在JSF 2.x風格中,基本上是:
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
這樣,如果最終用戶請求/并且您有/index.xhtml,則將為您提供服務?;蛘?,如果最終用戶請求,/foo并且您有/foo/index.xhtml,則將為它提供服務,等等。如果沒有這樣的文件,則將返回404錯誤。
現在,你似乎映射了FacesServlet一個前綴<url-pattern>的/faces/*。這是JSF 1.0 / 1.1時代以來的遺留物,實際上最近不建議這樣做。也許您正在閱讀針對JSF 1.x的過時教程,或者本來是為JSF 1.x編寫的,維護不佳的教程,但隨后針對JSF 2.x進行了不當更新,而不是從頭開始重寫。
該教程似乎也沒有向您解釋一些servlet基礎知識。即,為了使XHTML頁面中的JSF組件運行并生成一些HTML輸出,FacesServlet必須在請求XHTML頁面時調用。當您像這樣請求XHTML頁面時/index.xhtml,當FacesServlet映射到時/faces/*,它將不會被調用。然后,瀏覽器將檢索原始的未解析的JSF源代碼,而不是生成的HTML輸出。您可以通過右鍵單擊Web 瀏覽器中的查看源代碼來查看它。您應該這樣請求頁面,/faces/index.xhtml以便FacesServlet可以運行并產生瀏覽器可以理解并呈現的HTML輸出。
這與歡迎文件一起使用效果不佳。這完全解釋了為什么當index.xhtml用作歡迎文件時會得到一個“干凈的白色”(空白)頁面的原因(某些劣等的Web瀏覽器,例如IE,由于包含原始XHTML源代碼的響應中缺少/錯誤的內容類型,會令人困惑地提示下載對話框)。該FacesServlet是根本就沒有被調用。只需擺脫老式的/faces/*URL模式,而改用JSF 2.x *.xhtml模式的URL模式即可。
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
通過這種方式,歡迎文件應該可以工作,您可以通過直接請求JSF的物理URL來打開JSF頁面,而不會浪費虛擬URL。在JSF 1.x中這是不可能的,因為它將使FacesServlet運行在無限循環中進行自我調用,并導致堆棧溢出。
- 3 回答
- 0 關注
- 1038 瀏覽
添加回答
舉報