前言:SpringMVC申请解决流程,外围组件,次要注解等常识是面试中常常被问到的问题,简略看了下之前看的视频的笔记,并联合本人的了解写下了这篇博客,心愿能加深本人的印象以及帮忙的诸位小伙伴儿们爛爛

如果有什么须要改良的中央还请大佬斧正

文章目录

SpringMVC的申请解决流程

SpringMVC通过前端控制器(DispatcherServlet)拦挡并解决用户申请

1.前端发送申请被前端控制器DispatcherServlet拦挡2.前端控制器调用处理器映射器HandlerMapping对申请的URL进行解析,解析之后返回调用给前端控制器3.前端控制器调用处理器适配器解决调用链4.处理器适配器HandlerAdapter基于反射通过适配器设计模式实现处理器(控制器Handler)的调用解决用户申请5.处理器适配器HandlerAdapter将控制器返回的视图和数据信息封装成ModelAndView响应给前端控制器6.前端控制器调DispatcherServlet调用视图解析器ViewResolver对ModelAndView进行解析,将解析后果(视图资源和数据)响应给前端控制器7.前端控制器调用视图view组件将数据进行渲染,将渲染后果(动态视图)响应给前端控制器8.前端控制器响应用户申请

SpringMVC的外围组件

  • DispatcherServlet 前端控制器、总控制器

    • 作用:接管申请,调用其余组件解决用户的申请,协同各组件工作、响应申请
  • HandlerMapping 处理器映射器

    • 作用:负责依据用户申请的URL找到对应的处理器Handler,在SpringMVC中会有很多申请,每个申请都须要一个Handler解决,具体接管到一个申请之后应用哪个Handler进行解决须要处理器映射器来匹配
    • 可配置 SpringMVC提供多个处理器映射的实现,能够依据须要进行配置
  • HandlerAdapter 处理器适配器

    • 作用:依照处理器映射器解析的用户申请的调用链,通过适配器模式实现Handler的调用
  • Handler 处理器/控制器

    • 由工程师依据业务的需要进行开发
    • 作用:解决申请
  • ModelAndView 视图模型

    • 作用:用于封装处理器返回的数据以及相应的视图
    • ModelAndView = Model + View
  • ViewResolver 视图解析器

    • 作用:对ModelAndView进行解析
    • 可配置 SpringMVC提供多个视图解析器的实现,能够依据须要进行配置
  • View 视图

    • 作用:实现数据渲染

处理器映射器

不同的处理器映射器对URL解决的形式也不雷同,应用对应的处理器映射器之后咱们的前端申请规定也须要产生相应的变动

SpringMVC提供的处理器映射器:

  • BeanNameUrlHandlerMapping 依据控制器的ID拜访控制器
  • SimpleUrlHandlerMapping 依据控制器配置的URL拜访(默认)

配置处理器映射器:

  • 在SpringMVC的配置文件中通过bean标签申明处理器映射器
  • 配置BeanNameUrlHandlerMapping

       <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
  • 配置SimpleUrlHandlerMapping

      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    <property name="mappings">        <props>            <prop key="/aaa">bookController</prop>            <prop key="/bbb">studentController</prop>        </props>    </property></bean>

    视图解析器

Spring提供了多个视图解析器:

  • UrlBasedViewResolver
  • InternalResourceViewResolver
  • UrlBasedViewResolver 须要依赖jstl

    • 增加JSTL的依赖

        <dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
    • 配置视图解析器

      <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean>
  • InternalResourceViewResolver

       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <property name="prefix" value="/"/>    <property name="suffix" value=".jsp"/></bean>

    SpringMVC的注解

@RequestMapping:用于解决申请 url 映射的注解,可用于类或办法上。用于类上,则示意类中的所有响应申请的办法都是以该地址作为父门路,用在办法上示意父类门路前面的内容。

@Controller@RequestMapping("book")public class  BookController  {     /*接管申请行数据*/    @RequestMapping("/add") // 申请门路:/boot/add    public String addBook(String name, String author, double price,HttpServletRequest request){         System.out.println("---book add");        request.setAttribute("key1","value1");        request.setAttribute("book",new Book(1,"Java","老张",2.22));        return "tips";    }    @RequestMapping("/add2")  //申请门路:/boot/add2    public ModelAndView addBook2(String name, String author, double price){         ModelAndView modelAndView = new ModelAndView("/tips.jsp");        modelAndView.addObject("key2","value2");        modelAndView.addObject("book",new Book(1,"C++","老张",2.22));        return modelAndView;    }}

@RequestBody:注解实现接管http申请的json数据, 次要用来接管前端传递给后端的json字符串中的数据的(申请体中的数据) ,如果参数时放在申请体中,application/json传入后盾的话,那么后盾要用@RequestBody能力接管到, 行将json转换为java对象

@ResponseBody: @ResponseBody是作用在办法上的 ,@ResponseBody注解的作用是将controller的办法返回的对象通过适当的转换器转换为指定的格局之后,写入到response对象的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}")public String deleteById(@PathVariable("id") String id){     System.out.println("通过id删除用户,id为:" +id);// 拜访的时候只须要拜访/user/所要删除的id即可,如.../user/1。    return "success";}