请求未被路由到JSF Servlet

时间:2013-01-12 10:54:02

标签: jsf servlets jsf-2 url-pattern

我有一个JSF webapp,它表现出以下行为:
http://localhost/myapp/返回index.xhtml的原始内容 http://localhost/myapp/web/返回空白页面 http://localhost/myapp/web/index.xhtml会返回错误/index.xhtml Not Found in ExternalContext as a Resource

webapp的目录结构如下所示:

enter image description here

web.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
      <display-name>myapp</display-name>
       <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
      </context-param>
       <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/web/*</url-pattern>
      </servlet-mapping>

      <session-config>
        <session-timeout>30</session-timeout>
      </session-config>

    <!--   <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
      </welcome-file-list>
     -->  
    </web-app>

我在方法javax.faces.webapp.FacesServlet.service

的第一行有一个断点
public void service(ServletRequest req,
                    ServletResponse resp)
    throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) resp;

    requestStart(request.getRequestURI()); // V3 Probe hook

此断点永远不会被击中。是否有人能够阐明这里可能出现的问题或者我可以开始调查的一些指示。

1 个答案:

答案 0 :(得分:2)

JSF将在查找资源之前从请求URL中删除自己的URL模式。您需要根据错误消息将/index.xhtml文件准确放在JSF期望的位置:/index.xhtml。所以,在/web文件夹之外。请注意,您可以继续在请求网址中使用/web

另一种方法是在FacesServlet上映射*.xhtml。这样您就不必担心虚拟URL。

另见: