我需要从ROOT转发所有类型的请求,即http://localhost:8080/到http://localhost:8080/myRoot
我是否需要创建一个重定向servlet?但是,我认为tomcat可以被配置成这样的行为吗?
一个简单的方法是创建一个像这样的过滤器
@WebFilter("/*")
public class RedirectFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
String query = request.getQueryString();
if (query != null) {
uri = uri + "?" + query;
}
response.setStatus(301);
response.setHeader("Location", "/myRoot" + uri);
// Can also use response.sendRedirect(), but this does 302 by default.
}
// ...
}
放到Tomcat/webapps/ROOT/WEB-INF/classes/com/example/RedirectFilter.class
如果您仍然使用Tomcat 6.0或更早的版本,那么删除@WebFilter
注释并相应地创建web.xml
。
我使用的是UrlRewriteFilter
将过滤器部署到ROOT中,并像这样修改urlrewrite.xml
:
<rule>
<from>^/$</from>
<to type="redirect">%{context-path}/myRoot</to>
</rule>
现在它工作了。