2013-12-13 67 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之前工作,即使我沒有嘗試它。