spring mvc如何绕过DispatcherServlet获取*.html文件?

Bob*_*obo 13 web.xml servlets spring-mvc

web.xml片段

<!-- Handles all requests into the application -->
<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/app-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不想让Dispatcher Servlet处理*.html请求.我如何做到这一点?谢谢.

Lar*_*ari 24

在Spring MVC 3.x中,有一个默认的servlet处理程序处理这个问题.

只需将其添加到Spring XML配置:

<mvc:default-servlet-handler/>
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 5

将其映射到更具体的位置url-pattern.

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

创建一个Filter映射到的/*.

<filter-mapping>
    <filter-name>Your Dispatcher Filter</filter-name>
    <url-pattern>/*</url-pattern>
<filter-mapping>
Run Code Online (Sandbox Code Playgroud)

doFilter()方法中有以下哪种方法.

String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.endsWith(".html")) {
    chain.doFilter(request, response); // Just let it go (assuming that files are in real not placed in a /spring folder!)
} else {
    request.getRequestDispatcher("/spring" + uri).forward(request, response); // Pass to Spring dispatcher servlet.
}
Run Code Online (Sandbox Code Playgroud)