我已经检查四周,找不到的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