02_springmvc处理器映射器和适配器(补充)

阳光穿透心脏的1/2处 2024-04-18 22:07 116阅读 0赞

一.非注解的处理器映射器

HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中给前端控制器返回。

非注解映射器1:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

20190912150931105.png

使用此映射器时:配置handler时,将handler的name属性作为url

非注解映射器2:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

20190912151104988.png

使用此映射器时,可以在handler中加入id属性作为prop中value,可以配置多个hander。

二 非注解的处理器适配器

非注解处理器适配器1:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

要求编写的Handler实现 Controller接口。

20190912152810643.png

非注解处理器适配器2:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

20190912152916440.png

要求编写的Handler实现 HttpRequestHandler接口。

三.注解的处理器映射器和适配器

映射器:在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。

在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

适配器:在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。

在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

注解的处理器映射器:

20190912153846456.png

注解的处理器适配器:

20190912153919957.png

  1. 注解的handler配置

使用组件扫描器省去在spring容器配置每个controller类的繁琐。使用<context:component-scan自动扫描标记@controller的控制器类,不需要在springmvc.xml中配置handler,只需要在handle家注解@Controller

20190912154125632.png

springmvc使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用替代注解处理器和适配器的配置。

2019091215460017.png

handler:

  1. package com.springmvc.controller;
  2. import com.springmvc.po.Items;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.HttpRequestHandler;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. /**
  14. * Description:注解开发handler
  15. * User: jiatp
  16. * Date:2019/9/7 0007 上午 7:42
  17. */
  18. @Controller
  19. public class ItemsController3 {
  20. //商品信息查询
  21. @RequestMapping("/queryItemsByAnnotation.action")
  22. public ModelAndView queryItems() throws Exception{
  23. //调用service查找数据库,查询商品列表,这里使用静态模拟
  24. List<Items> itemsList = new ArrayList<Items>();
  25. //向list中填充静态数据
  26. Items items_1 = new Items();
  27. items_1.setName("联想笔记本");
  28. items_1.setPrice(6000f);
  29. items_1.setDetail("联想笔记本电脑!");
  30. Items items_2 = new Items();
  31. items_2.setName("苹果手机");
  32. items_2.setPrice(5000f);
  33. items_2.setDetail("苹果手机!");
  34. itemsList.add(items_1);
  35. itemsList.add(items_2);
  36. //返回ModelAndView
  37. ModelAndView modelAndView = new ModelAndView();
  38. modelAndView.addObject("itemsList",itemsList);//相当于request.setAtttributes
  39. modelAndView.setViewName("items/itemsList");//指定返回的视图
  40. return modelAndView;
  41. }
  42. //商品其它操作
  43. }

springmvc处理流程源码分析

  1. 用户发送请求到DispatherServlet前端控制器。
  2. DispatherServlet调用HandlerMapping(处理器映射器)根据url查找Handler。
  3. DispatherServlet调用HandlerAdapter(处理器适配器)对HandlerMapping找到Handler进行包装、执行。HandlerAdapter执行Handler完成后,返回了一个ModleAndView(springmvc封装对象) DispatherServlet 找一个合适的适配器: 适配器执行Hanlder。
  4. DispatherServlet拿着ModelAndView调用ViewResolver(视图解析器)进行视图解析,解析完成后返回一个View(很多不同视图类型的View)。
  5. DispatcherServlet进行视图渲染,将Model中数据放到request域,在页面展示。

#

发表评论

表情:
评论列表 (有 0 条评论,116人围观)

还没有评论,来说两句吧...

相关阅读