簡體   English   中英

帶有映射和歡迎文件的默認servlet

[英]Default servlet with mapping and welcome file

我正在使用Tomcat 7來提供一些JAXRS服務。 我還希望使用默認的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. 在web.xml中定義到html文件的servlet映射,或者
  2. 創建一個Servlet,使用@WebServlet對其進行注釋,然后在doGet()方法中將其分派/重定向到html文件。

如果願意,可以動態注冊servlet。

我的結尾是:

在我的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所提到的,我可以在StaticRedirectionFilter類的基礎上添加@WebFilter(“ / backoffice”)注釋,但是在上下文中使用映射似乎對重用性更好。

我也認為它可以在Servlet 3之前運行,即使我沒有嘗試過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM