request.getServletPath() 从 Spring MVC 返回 null

Dre*_*mer 2 spring jsp spring-mvc

我做了一个过滤器来HttpServletRequest从所有请求中捕获sevlet 路径

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest)req;
    HttpServletResponse response = (HttpServletResponse)res;

    // debug to see the output
    String path = request.getServletPath();

    filterChain.doFilter(request, response);
}
Run Code Online (Sandbox Code Playgroud)

jsp 中有一个 URL 没有映射到它的控制器或视图

<div>
    <spring:url value="/app" var="app_url" htmlEscape="true"/>
    <a href="${app_url}"><spring:message code="label_3rd_app" /></a>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,当在过滤器上调试时单击 url 时,我看到request.getServletPath()来自两个请求的值:

/null
/null/app
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么request.getServletPath()从不返回/app

Jon*_*rte 5

你变得空了,因为

request.getServletPath();
Run Code Online (Sandbox Code Playgroud)

用于 Servlet,而您是在过滤器中进行的。要将其放入过滤器,您必须像这样手动构建它:

HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
Run Code Online (Sandbox Code Playgroud)

更多信息为什么:

如何在没有上下文路径的情况下获取请求 URI?