亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過JSF項目中的<welcome-file>設置默認主頁

通過JSF項目中的<welcome-file>設置默認主頁

慕哥9229398 2019-10-22 21:09:07
當我從Eclipse使用Tomcat 8.0啟動Java EE項目時,無法設置在瀏覽器中加載的默認頁面。我正在嘗試學習JSF,因此我遵循了本教程一切正常,但是當我右鍵單擊login.xhtml或welcome.xhtml文件并選擇“運行方式/在服務器上運行” 時,我只能看到創建的頁面。到目前為止,當我啟動整個項目時,我創建的所有其他Web應用程序都加載了默認頁面。默認行為是加載index.html頁面(如果有的話,也可以加載index.jsp)。因此,我在項目的文件夾中添加index.html和index.xhtml頁面WEB-INF,希望它們中至少顯示一個。但是,什么也沒有發生。瀏覽器始終僅在localhost:8080/JSFFaceletsTutorial/URL 上顯示頁面,但是頁面是白色的,甚至沒有錯誤消息。我認為在解決此問題的過程中一直遇到錯誤404,但是,我不再能夠重現此錯誤,并且我不記得是什么原因引起的。我發現可以更改默認的起始頁面但是,它對我也不起作用。無論是否編輯web.xml文件,都得到相同的結果。更令人困惑的是,當我嘗試更改Web瀏覽器時:“ Window / Web Browser / ...”在外部Web瀏覽器中的行為與在內部Eclipse Web瀏覽器中的行為有所不同。內部頁面始終是空白頁面-但是外部網絡瀏覽器曾經設法顯示該index.html頁面-但是它是一些過時的版本。盡管我絕對確定要編輯,保存更改,重新啟動服務器……但仍然可以看到頁面的過時版本。即使在這種情況下,它仍然會忽略web.xml文件中所做的更改。但是當我現在嘗試時,它再次在所有瀏覽器中顯示空白頁面。除了編輯web.xml文件外,我不知道所做的任何更改。我的猜測是問題出在我尚未完全掌握的JSF技術中。這是因為當我選擇使用右鍵單擊“運行方式/在服務器上運行” 來運行login.xhtml和welcome.xhtml頁面時,這些頁面的URL上localhost:8080:帶有path /JSFFaceletsTutorial/faces/login.xhtml和/JSFFaceletsTutorial/faces/welcome.xhtml。這很奇怪,因為我的項目中沒有任何目錄“ faces”。輸入以下所有可能的排列:<welcome-file-list>    <welcome-file>faces/index.html</welcome-file>    <welcome-file>faces/index.xhtm</welcome-file></welcome-file-list>在web.xml沒有幫助。當我在此處輸入完整地址時也無濟于事。這是我進入控制臺的警告(我跳過了INFO日志條目):“ 2014年12月19日上午9:39:55 org.apache.tomcat.util.digester.SetPropertiesRule開始警告:[SetPropertiesRule] {Server / Service / Engine / Host / Context}將屬性'source'設置為'org.eclipse。 jst.jee.server:JSFFaceletsTutorial'找不到匹配的屬性... ...警告:JSF1074:名為'loginBean'的托管bean已被注冊。用com.tutorial.LoginBean替換現有的托管bean類類型com.tutorial.LoginBean。 2014年12月19日上午9:39:57 org.apache.coyote.AbstractProtocol開始”我不確定這是否有幫助。我現在沒主意了。
查看完整描述

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運行在無限循環中進行自我調用,并導致堆棧溢出。


查看完整回答
反對 回復 2019-10-22
  • 3 回答
  • 0 關注
  • 1038 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號