[英]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的映射的方法是我發現的唯一工作方法。
感謝幫助。
我只能想到兩種可能性。
如果願意,可以動態注冊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.