[关闭]
@1234567890 2017-05-22T13:24:20.000000Z 字数 2245 阅读 1257

Spring理解

spring


  1. package com.lg.mvc;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6. public class HomeAction implements Controller{
  7. @Override
  8. public ModelAndView handleRequest(HttpServletRequest request,
  9. HttpServletResponse response) throws Exception {
  10. return new ModelAndView("hello");
  11. }
  12. }
  13. <bean name="/index" class="com.lg.mvc.HomeAction"></bean>

HandlerMapping和HandlerAdapter

对于解析一个请求(http://localhost:8080/index),要分两步走。第一步首先要找到是哪个对象,即handler,本工程的handler则是HomeAction对象。第二步要找到访问的函数,即HomeAction的handleRequest方法。所以就出现了两个源码接口 HandlerMapping和HandlerAdapter,前者负责第一步,后者负责第二步。
46448511_3.png-179.4kB

先简单的说下这个工程的流程,访问http://localhost:8080/index首先由DispatcherServlet进行转发,通过BeanNameUrlHandlerMapping(含有 /index->HomeAction的配置),找到了HomeAction,然后再拿HomeAction和每个adapter进行适配,由于HomeAction实现了Controller接口,所以最终会有SimpleControllerHandlerAdapter来完成对HomeAction的handleRequest方法的调度。然后就顺利的执行了我们想要的方法

没有配置HandlerMapping,所以它会去加载默认的DispatcherServlet.properties,它所在位置就是和DispatcherServlet同一目录下面的

  1. org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
  2. org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
  3. org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
  4. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
  5. org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注