前言:SpringMVC请求处理流程、核心组件、主要注解等知识面试常问。简单看了之前看视频的笔记,根据自己的理解写了这篇博客,希望能加深印象,对各位小伙伴有所帮助。有什么需要改进的请老板写文章目录。SpringMVC的请求处理流程。SpringMVC通过前端控制器(DispatcherServlet)拦截并处理用户请求1.前端发送的请求被前端控制器DispatcherServlet拦截2.前端控制器调用处理器映射器HandlerMapping解析URL3.前端控制器调用处理器适配器处理调用链4.处理器适配器HandlerAdapter通过处理器(控制器Handler)完成调用基于反射的适配器设计模式来处理用户请求5.处理器适配器HandlerAdapter封装控制器返回的视图和数据信息形成一个ModelAndView响应给前端控制器6.前端控制器调用DispatcherServlet调用视图解析器ViewResolver来分析ModelAndView,并将分析结果(视图资源和数据)响应给前端控制器7.前端控制器调用视图组件处理数据Rendering,将渲染结果(静态视图)响应给前端控制器8、前端控制器响应用户的请求。SpringMVC的核心组件,DispatcherServlet。工作、响应请求HandlerMapping处理器映射器函数:负责根据用户请求的URL找到对应的处理器Handler。SpringMVC中会有很多请求,每个请求都需要一个Handler来处理。收到请求后使用哪个Handler处理,需要处理器映射器来匹配。SpringMVC可以配置为提供多个处理器映射实现。HandlerAdapter可以根据需要进行配置。processoradapter的作用:根据processormapper解析出来的用户请求的调用链,通过adapter方式完成Handler调用Handler处理器/控制器是工程师根据业务需要开发的功能:处理requestModelAndView视图模型函数:用于封装处理器返回的数据和对应的视图ModelAndView=Model+ViewViewResolver视图解析器作用:解析ModelAndViewSpringMVC可配置提供多种视图解析器实现,可根据需要配置视图视图作用:完成数据渲染处理器映射器不同的处理器映射器对URL的处理方式也不同。在使用了对应的processormapper之后,我们的前端请求规则也需要做相应的改变。SpringMVC提供的处理器映射器:BeanNameUrlHandlerMapping根据控制器的ID访问控制器SimpleUrlHandlerMapping根据控制器配置的URL访问(默认)配置处理器映射器:通过SpringMVC配置文件中的bean标签声明处理器映射器配置BeanNameUrlHandlerMapping配置SimpleUrlHandlerMappingbookControllerstudentController视图解析器Spring提供了多种视图解析器:UrlBasedViewResolverInternalResourceViewResolverUrlBasedViewResolver需要依赖jstl添加JSTL依赖javax.servletjstl1.2配置视图解析器InternalResourceViewResolverSpringMVC的注解@RequestMapping:用于处理请求url映射的注解,可以用在类上或者类的方法上,然后意思是类中所有响应请求的方法都使用这个地址作为父路径,用在方法上代表父类路径后面的内容。@Controller@RequestMapping("book")publicclassBookController{/*接收请求行数据*/@RequestMapping("/add")//请求路径:/boot/addpublicStringaddBook(Stringname,Stringauthor,doubleprice,HttpServletRequest请求){System.out.println("---bookadd");request.setAttribute("key1","value1");request.setAttribute("book",newBook(1,"Java","老张",2.22));返回“提示”;}@RequestMapping("/add2")//请求路径:/boot/add2publicModelAndViewaddBook2(Stringname,Stringauthor,doubleprice){ModelAndViewmodelAndView=newModelAndView("/tips.jsp");modelAndView.addObject("key2","value2");modelAndView.addObject("book",newBook(1,"C++","老张",2.22));返回模型和视图;}}@RequestBody:注解实现接收http请求的json数据,主要用于接收前端传给后端的json字符串中的数据(requestbody中的数据),如果参数放在requestbody中,传application/json给后台,那么后台需要使用@RequestBody来接收,即将json转为java对象@ResponseBody:@ResponseBody是用在方法方面的,@ResponseBody注解的作用是将controller方法返回的对象通过合适的转换器转换成指定的格式,然后写入响应对象的body区,通常用于返回JSON数据或XML数据,即注解实现将conreoller方法返回的对象转成json对象响应给客户端。@Resource和@Autowired:自动组装,@Resource和@Autowired都是用来做bean注入的。@Autowired是Spring的一个注解,可以标记在属性、方法和构造函数上,完成自动装配。默认是根据类型,spring自动注入匹配的属性值,@Resource不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持注入这个注解,并且@Resource默认是名称查找。@PathVariable用于将请求URL中的模板变量映射到函数处理方法的参数中,即将uri模板中的变量作为参数@RequestMapping("/user/{id}")publicStringdeleteById(@PathVariable("id")Stringid){System.out.println("通过id删除用户,id为:"+id);//访问时只需要访问/user/id即可删除,如作为.../用户/1。返回“成功”;}