Spring-HttpRequestHandler
基于4.1.7.RELEASE
HttpRequestHandler用于处理Http requests,其类似于一个简单的Servlet,只有一个handlerRequest方法,其处理逻辑随子类的实现不同而不同。
其实现类有
DefaultServletHttpRequestHandler
public class DefaultServletHttpRequestHandler implements HttpRequestHandler, ServletContextAware
由于其实现了ServletContextAware,所以会被Spring的容器通知它所使用ServletContext,具体通知的时机是在设置完bean的属性之后init回调之前,
它的调用次序是在ApplicationContextAware之后的。次序如下图
而在本类中,setServletContext的主要作用是,如果当前的defaultServletName没有设置,则根据ServletContext中的DispatcherName来决定当前的defaultServletName。而这个defaultServletName是做什么用的呢?看下面这段注释
/** * Set the name of the default Servlet to be forwarded to for static resource requests. */ public void setDefaultServletName(String defaultServletName) { this.defaultServletName = defaultServletName; }
设置静态资源转发的默认Servlet的name。
@Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = this.servletContext.getNamedDispatcher(this.defaultServletName); rd.forward(request, response); }
将请求转发到默认的dispatcher中去,该dispatcher可能为多种形式的Servlet,在tomcat上则是默认为名字“default”的Servlet。