我已經檢查四周,找不到的FacesServlet是如何解決的URL在web應用文件結構的實際文件的解釋。在servlet的上下文中,我的理解是,URL只是您希望客戶使用的虛構名稱。然後,在web.xml中,將特定的servlet映射到URL模式,但servlet的真實名稱/位置對外部世界是隱藏的......這是針對servlet的。FacesServlet如何知道基於URL呈現哪個facelet?
專門爲JSF 2,我們處理FacesServlet的,這使我對我的第一個問題:是FacesServlet是唯一的servlet我需要提供我的應用程序映射細節(我唯一需要的小服務程序,期限) ?似乎答案是「是的」,但如果出現情況不是這樣的情況,請舉個例子。
通過閱讀關於SO的其他問題,我明白並非所有請求都需要通過FacesServlet,所以基本上請求分爲A)請求靜態內容,不應由FacesServlet處理,B)請求用於需要由FacesServlet處理的動態內容。 那麼,如何獲得靜態內容?只需要一個傳入的請求,其中的URL與FacesServlet的URL模式不匹配,但與應用程序文件結構中的真實文件位置匹配?
最後,我的主要問題:,當請求中,對於FacesServlet的URL模式相匹配,如何FacesServlet的知道哪些瀏覽文件(.xhtml)來呈現?在使用JSF 2時是否有一個約定,我需要按照它使其工作?如果不是,那我就不明白了,因爲就像我在上面提到的「通用」servlet中所提到的那樣,URL可以包含一個與真實文件名無關的名稱,只要它映射到web.xml文件中正確的servlet。我覺得我在這裏錯過了一些顯而易見的(重要的)東西。我能想到的唯一的事情就是URL應該與真實的文件位置相匹配,或者存在另一個映射表或者將URL與視圖文件相關聯的東西。
順便說一句,我看着this question,這是關係但沒有任何答案。
謝謝!
感謝您的規格鏈接。所以,如果我的理解正確,那麼在JSF中存在一個隱含的約定,即URL的viewId部分必須與資源的「真實」相對路徑相匹配,否則什麼都不會發現。這是正確的嗎?這是有道理的,因爲否則我不知道FacesServlet會知道返回哪個facelet。 – neizan 2013-04-07 18:45:24
是的,這是正確的。當然,您可以自定義該慣例,甚至可以從完全不同的源代碼載入視圖定義(JSF的內部工作原理可以自定義),但通常只需使用該約定。 – meriton 2013-04-07 19:19:41
太好了。謝謝您的幫助! – neizan 2013-04-08 05:23:34