带映射和欢迎文件的默认servlet

时间:2013-12-13 09:40:03

标签: java tomcat servlets jax-rs

我正在使用Tomcat 7来提供一些JAXRS服务。 我还希望使用默认的servlet为同一个应用程序提供一些静态Web页面。这是我定义映射的方式:

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的方式是我发现的唯一工作方式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我只能想到两种可能性。

  1. 将web.xml中的servlet映射定义为html文件或
  2. 创建一个servlet,用@WebServlet注释它,然后在doGet()方法中调度/重定向到html文件。
  3. 如果您愿意,可以动态注册servlet。

答案 1 :(得分: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);
        }

    }

正如Alex提到的那样,我可以使用注释@WebFilter(“/ backoffice”)使用StaticRedirectionFilter类来完成它,但是在上下文中使用映射似乎更适合于可重用性。

我也认为它在Servlet 3之前有效,即使我没有尝试过。