SpringMVC组件解析
SpringMVC的执行流程:
浏览器发起一个请求,由我们的前端控制器DispatcherServlet接收,这里的前端控制器其实就是调度的作用并没有自己去处理,是交给了一堆的组件。
然后当我们的前端控制器去请求资源的时候,会去找HanderMapping这个组件,这个组件成为处理器映射器,负责将你的请求将你解析,知道最终找谁。它返回的是一串资源的地址,而不是一个资源的地址,因为你在访问servlet的资源的时候有可能通过了一串filter才到达的servlet所以是一串资源的地址,返回的是HandlerExecutionChain,这个链对象内部封装着你要执行资源的顺序。
返回回去是要去执行的,但是前端控制器自己不执行,它会去找到HandlerAdaptor去请求Handler,它会帮你执行那些需要被调度的资源,然后请求你的资源找到Handler处理器,这里的处理器可以理解为我们自己写的controller,最后响应的其实是个ModelAndView。然后最终返回给前端控制器。
然后前端控制器拿到我们的ModelAndView,再去找视图解析器ViewResolver,它负责在ModelAndView中给你解析出来,返回View对象。这里的view对象有很多中,比如jsp。然后对视图就行解析渲染最终返回给客户端。
SpringMVC注解解析
@RequestMapping注解作用到类上相当于一级目录,作用到方法上相当于二级目录。
localhost:8080/user
localhost:8080/user/quick
@Controller
@RequestMapping(value = "/user",method = RequestMethod.GET,params = {"username"})
public class UserController {
@RequestMapping(value="/quick")
public String save(){
System.out.println("Controller save running......");
return "/success.jsp";
}
}
method指定请求的方法,RequestMethod是个枚举直接点出来就行了,params是个参数带上它之后,URl必须带上参数。
http://localhost:8080/test/user/quick?username=xxx
下面组件扫描是扫描这个包下的所有包括Controller的直接
<!-- 配置组件扫描-->
<context:component-scan base-package="com.itheima" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
就是配置视图解析器的前缀和后缀
就是这里的/jsp/是前缀,.jsp是后缀配置了上面的东西后就不用写这两个东西了,直接写success。