我在这里面临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的方法,即使页面没有存在......但是我尝试的一切都失败了。
答案 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
*.jsp
个web.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)中,您需要创建一个具有该名称的空文件,以欺骗该文件存在于磁盘上的服务器。