我有一个带有一些标准JSF页面和后台bean的JSF web应用程序。
我试图使用@WebServlet
注释的urlPatterns
参数从非根路径获取我的应用程序页面。例:
http://localhost/<appName>/<myPath>/index.xhtml
其中myPath =/web,如下面的代码所示。
这似乎不起作用。应用程序只响应向:
发出的请求http://localhost/<appName>/index.xhtml
应用程序部署在Tomcat 7.0中。以及以下JSF依赖项:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.16</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.16</version>
</dependency>
任何想法?
import javax.faces.webapp.FacesServlet;
@WebServlet(urlPatterns = "/web",
initParams = { @WebInitParam(name = "javax.faces.PROJECT_STAGE",
value = "Development") })
public class AppServlet implements Servlet {
FacesServlet servlet = new FacesServlet();
@Override
public void destroy() {
servlet.destroy();
}
@Override
public ServletConfig getServletConfig() {
return servlet.getServletConfig();
}
@Override
public String getServletInfo() {
return servlet.getServletInfo();
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
servlet.init(servletConfig);
}
@Override
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException {
servlet.service(req, resp);
}
}
/web
的URL模式只匹配http://localhost/<appName>/web
文件夹,而不是子文件夹和文件,如http://localhost/<appName>/web/index.xhtml
,如您所期望的。为此,您应该使用/web/*
的URL模式。
@WebServlet("/web/*")
与具体问题无关,这将不能与JSF一起工作,因为它自己的FacesServlet
不会以这种方式调用。也许您实际上需要servlet过滤器?而且,web init参数创建的是<servlet><init-param>
,而不是JSF通常需要的<context-param>
。如果你不知道的话。