jsf上下文创建

时间:2010-08-02 11:04:39

标签: jsp jsf tomcat contextpath

我在这里面临Java Web项目的问题。我正在研究的项目是用标准的jsp和jsf页面混合制作的。 应用程序的主页面(称为main.jsp)是一个标准的jsp页面,需要访问托管bean,其中会话范围是在用于检查用户身份验证的servlet过滤器中创建的。 在我的web.xml中,我设置了face引擎必须响应.jsf和/ faces / * request

  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>extensionsFilter</filter-name>
    <url-pattern>/faces/*</url-pattern>
  </filter-mapping>

如果我用http//myserver/myapp/faces/main.jsp打开我的应用程序,一切正常。 如果我使用http://myserver/myapp/main.jsp打开我的应用程序,我将收到错误,因为尚未创建faces上下文。 无论是设置欢迎页面还是设置apache重定向,当用户只需在浏览器中键入h ** p:// myserver / myapp时,我就可以让应用程序打开正确的页面(faces上下文中的main.jsp):这是因为页面/faces/main.jsp不存在。

我想可能有2个解决方案:能够让faces上下文在/ faces / *模式之外启动,或者找到让tomcat重定向到/faces/main.jsp的方法,即使页面没有存在......但是我尝试的一切都失败了。

1 个答案:

答案 0 :(得分:1)

只需http://myserver/myapp/main.jsp打开您的申请,而是http://myserver/myapp/faces/main.jsp或(更优先)http://myserver/myapp/main.jsf

如果您最关心的是最终用户不能访问url-pattern FacesServlet以外的JSP页面(否则这个问题没有多大意义;))对于*.jsf模式,并在security-constraint模式上添加auth-constraint *.jspweb.xml。这应该注意最终用户将无法直接请求*.jsp URL。

<security-constraint>
    <display-name>Restrict direct access to JSP files</display-name>
    <web-resource-collection>
        <web-resource-name>JSP files</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint> 

当您使用/faces/*映射时,这不是直接可行的。我也会在web.xml中删除它。

此外,要覆盖正在键入http://myserver/myapp的最终用户,请在main.jsf中将welcome-file定义为web.xml,然后删除其他定义的欢迎文件。在Tomcat(以及可能还有其他servletcontainer)中,您需要创建一个具有该名称的空文件,以欺骗该文件存在于磁盘上的服务器。