2013-12-13 37 views
1

我正在使用Tomcat 7来为某些JAXRS服务提供服务。 我也希望使用默认的servlet获得一些静态网页,以供同一应用程序使用。这是我如何定义的映射:带映射和欢迎文件的默认servlet

public void contextInitialized(ServletContextEvent sce) { 
sce.getServletContext().getServletRegistrations().get("default").addMapping("/backoffice/*"); 
} 

我的问题是,要访问这些静态文件的唯一方法是使用http://myserver.com/backoffice/index.html。我想访问它们只需http://myserver.com/backoffice 我没有在web.xml文件中定义任何映射,只是我的主要JAXRS应用程序。 我用欢迎文件列表这样的尝试:

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

我没有找到这个问题什么解决办法,我定义映射到默认servlet的方式是唯一一个我找到工作。

感谢您的帮助。

回答

1

我只能想到两种可能性。

  1. 定义在web.xml一个servlet映射到的HTML文件或
  2. 创建servlet,与@WebServlet注释它然后在doGet()方法调度/重定向到的HTML文件。

如果您愿意,可以动态注册servlet。

+0

非常有用,但我结束了一个稍微不同的解决方案(请参阅我的答案) –

0

我结束了什么:

在我的ServletContextListener,我说:

public void contextInitialized(ServletContextEvent sce) { 
String name = "backoffice-filter"; 
sce.getServletContext().addFilter(name, new StaticRedirectionFilter(basePath, targetPath)); 
sce.getServletContext().getFilterRegistrations().get(name).addMappingForUrlPatterns(null, false, pathDepart); 
sce.getServletContext().getServletRegistrations().get("default").addMapping("/backoffice/*"); 
} 

类StaticRedirectionFilter:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     String requestURI = request.getServletPath(); 
     if (requestURI.equals(basePath)) { 
      HttpServletResponse response = (HttpServletResponse) res; 
      response.sendRedirect(request.getContextPath() + targetPath); 
     } 
     else { 
      chain.doFilter(req, res); 
     } 

    } 

亚历克斯mentionned它,我可以做它与注释@WebFilter(“/ backoffice”)退出StaticRedirectionFilter类,但在上下文似乎使用映射更好的可重用性。

我也认为它可以在Servlet 3之前工作,即使我没有尝试它。