WEB-INF目录下的JSF文件,我该如何访问它们?

Tim*_*Tim 11 java model-view-controller web-inf jsf-2

我想将我的JSF 2.0 xhtml文件放在WEB-INF\jsf下.我如何访问它们呢?我知道WEB-INF内部的任何内容都没有暴露在外面,所以我需要一个控制器来将我重定向到相应的JSP,对吧?(这也是模型2模式iirc).

我可以使用web.xml/faces-config.xml中的参数来实现这一点吗?我认为FacesServlet是我的webapp的控制器所以它应该用于此目的?

另一个理解模型2模式的问题.是否每个操作都必须首先进入servlet,然后处理下一个可能的步骤?因此,<a href="anotherPage.html" />在这种模式中禁止使用简单,因为它不会进入控制servlet?

Bal*_*usC 19

我想将我的JSF 2.0 xhtml文件放在WEB-INF\jsf下.我如何访问它们呢?

你不能.文件/WEB-INF夹中的文件无法直接访问.

有两种方法可以解决JSF源文件可公开访问的问题.

  1. 在地图FacesServlet*.xhtml,而不是*.jsf.

  2. 或者,限制直接访问*.xhtml通过一个<security-constraint>web.xml.

    <security-constraint>
        <display-name>Restrict direct access to XHTML files</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML files</web-resource-name>
            <url-pattern>*.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint />
    </security-constraint> 
    
    Run Code Online (Sandbox Code Playgroud)

也可以看看:


另一个理解模型2模式的问题.是否每个操作都必须首先进入servlet,然后处理下一个可能的步骤?

FacesServlet已经做到这一点.这是控制器.使用JSF,您最终会得到一个简单的javabean作为模型,JSP/Facelets文件作为视图.在FacesServlet作为控制器已经采取了请求参数的采集,验证,转换,模型更新和导航的所有肮脏的工作,从你的手中.

也可以看看:


因此,<a href="anotherPage.html" />在这种模式中禁止使用简单,因为它不会进入控制servlet?

不,这很好.控制器将在需要时启动.如果资源不需要控制器(即静态资源),那么您也不需要让它通过某个控制器.


将来,请在单独的Stack Overflow问题中提出多个问题.