我在这里遇到Java网络项目的问题。我正在处理的项目是将标准的jsp与jsf页面混合而成的。应用程序的主页,称为main.jsp,是一个标准的jsp页面,需要访问具有在servlet过滤器中创建的会话范围的托管bean,该servlet过滤器用于检查用户的身份验证。在我的web.xml中,我设置了face引擎必须响应.jsf和/ faces / *请求
<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上下文。当用户在浏览器中简单地输入h ** p:// myserver / myapp时,既不设置欢迎页面也不设置apache重定向,我能够让应用程序打开正确的页面(faces上下文内的main.jsp):这是因为/faces/main.jsp页面实际上不存在。
http//myserver/myapp/faces/main.jsp
http://myserver/myapp/main.jsp
我猜可能有两种解决方案:即使在/ faces / *模式之外也可以让faces上下文开始,或者找到一种方法来让tomcat重定向到/faces/main.jsp,即使该页面不存在。 。但是我尝试的一切都失败了。
只是 不要 通过http://myserver/myapp/main.jsp打开应用程序,而是通过http://myserver/myapp/faces/main.jsp或(更推荐使用)http:// myserver / myapp / main打开。 jsf。
如果你的整个关注的是,最终用户不应该能够访问JSP页面外url- pattern的的FacesServlet(否则这个问题就没有多大意义;)),然后去的*.jsf模式,并添加security- constraint一个空auth- constraint的*.jsp模式到web.xml。这应注意,最终用户将无法*.jsp直接请求URL。
url- pattern
FacesServlet
*.jsf
security- constraint
auth- constraint
*.jsp
web.xml
<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。
/faces/*
此外,覆盖最终用户谁是打字的http:// MYSERVER / MyApp的,那么就定义main.jsf为welcome- file中web.xml和摆脱对方definied欢迎文件。但是,在Tomcat(可能还有其他servlet容器)中,您将需要创建一个具有正确名称的空文件,以欺骗该文件在磁盘上的服务器。
main.jsf
welcome- file