概述
Spring MVC
的一个HandlerAdapter
实现,用于支持HttpRequestHandler
实例。比如通过如下方式配置的静态资源映射使用到的静态资源处理器为ResourceHttpRequestHandler
,这就是一种具体的HttpRequestHandler
实现,被HttpRequestHandlerAdapter
支持:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
// ...
/**
* 静态资源文件映射配置
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 映射多个静态资源路径到某个URL pattern
registry.addResourceHandler("/my/**")
.addResourceLocations("classpath:/MyStatic/","file:/web_starter_repo/");
}
// ...
}
源代码
源代码版本 Spring Web MVC 5.1.5.RELEASE
package org.springframework.web.servlet.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ModelAndView;
/**
* Adapter to use the plain org.springframework.web.HttpRequestHandler
* interface with the generic org.springframework.web.servlet.DispatcherServlet.
* Supports handlers that implement the LastModified interface.
*
* This is an SPI class, not used directly by application code.
*
*/
public class HttpRequestHandlerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return (handler instanceof HttpRequestHandler);
}
@Override
@Nullable
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((HttpRequestHandler) handler).handleRequest(request, response);
// 注意这里返回 null, 告知调用者 请求已经被完全处理,后续不需要进行视图解析和渲染
return null;
}
@Override
public long getLastModified(HttpServletRequest request, Object handler) {
if (handler instanceof LastModified) {
return ((LastModified) handler).getLastModified(request);
}
return -1L;
}
}