Spring MVC 基于注解配置

Spring MVC是基于Java的框架,用于构建Web应用程序。它使用Model-View-Controller(MVC)模式来分离应用程序的不同关注点,使其更易于维护和扩展。在Spring MVC中,使用注解可以简化配置和开发过程。

Spring MVC实现原理

核心组件

1,DispatcherServlet:中央控制器,负责调度其他组件的执行,可以降低不同组件之间的耦合性,是整个Spring MVC的核心模块。

2,Handler: 它是接收请求并处理请求的组件,然后将处理结果返回给客户端。在SpringMVC中,处理器是通过HandlerMapping来映射的,它根据请求的URL和其他条件来确定使用哪个处理器来处理请求。处理器可以是一个Controller类的方法,也可以是一个实现了Handler接口的类。

3,HandlerMapping: 用于将HTTP请求映射到相应的控制器处理程序(Handler)的组件。它提供了将请求路由到正确处理程序的功能,以便处理请求并生成相应的响应。HandlerMapping组件通过分析HTTP请求的信息(例如URL和HTTP方法),将请求映射到相应的控制器方法。通常情况下,Spring MVC会根据URL映射(例如@RequestMapping注解)将请求路由到正确的控制器方法。

4,HandlerIntercepto r:Spring MVC中的一个拦截器接口,类似于Servlet规范中的Filter。它可以用于对请求进行拦截,并可以在请求被处理之前、之后或完全不处理请求。

5,HandlerExecutionChain:Spring MVC中表示处理链。它是一种机制,用于将一组HandlerInterceptor按照特定顺序包裹到特定的Handler上,形成一个个处理链。

6,HandlerAdapter:Spring MVC中的一个重要组件,它用于根据请求的类型和条件,将请求适配到相应的Handler进行处理。在Spring MVC中,请求的处理可以是多种多样的,例如可以是普通的Servlet、JSP、FreeMarker等页面,也可以是特定的控制器类或者方法。因此,在DispatcherServlet接收到请求后,需要将请求适配到相应的Handler进行处理。HandlerAdapter的作用就是完成这个适配工作。它根据请求的类型和条件,选择相应的Handler进行处理。例如,如果请求是GET类型的,那么它可能会根据URL映射,适配到相应的控制器类或者方法上;如果请求是POST类型的,那么它可能会根据表单数据和模型数据,适配到相应的控制器类或者方法上。具体的适配过程是通过实现HandlerAdapter接口的实例来完成的。在Spring MVC中,有几种默认的HandlerAdapter实现,例如SimpleFormControllerHandlerAdapter、AnnotationMethodHandlerAdapter等。它们分别根据不同的请求类型和条件,适配到相应的控制器类或者方法上

7,ModelAndView:Spring MVC中的核心组件之一,它用于设置响应的视图以及传递模型数据。

ModelAndView对象有两个主要作用:

  1. 设置转向地址:通过ModelAndView对象,我们可以设置要转向的视图页面,例如ModelAndView view = new ModelAndView("viewName");,其中"viewName"是视图页面的名称。
  2. 传递控制方法处理结果数据到结果页面:ModelAndView对象可以添加模型数据,这些数据可以在视图页面中使用。例如,我们可以使用addObject方法将数据添加到ModelAndView对象中,例如modelAndView.addObject("key", "value");,这样在视图页面中就可以通过${key}来获取value。

8,viewResolver:视图解析器,DispatcherServlet通过它把逻辑视图解析为物理视图,最终把渲染的 结果响应给客户端(在前后端分离项目中,后端主要是返回数据,视图很少返回了~~)

spring mvc 执行流程

IDEA完成Spring MVC配置

1,使用maven骨架新建一个web module

2,为该工程导入相关坐标

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.0.12</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>6.0.12</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.0.12</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>6.0.12</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/jakarta.platform/jakarta.jakartaee-web-api -->
    <dependency>
      <groupId>jakarta.platform</groupId>
      <artifactId>jakarta.jakartaee-web-api</artifactId>
      <version>9.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!--  为了测试容器初始化,加不加都可-->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-catalina</artifactId>
      <version>10.1.13</version>
    </dependency>
  </dependencies>

3,建立规范的包结构

4,将上面提到的组件配置到WebConfig类里面,此处只向容器中增加2个处理请求和请求映射的组件

5,写一个StartUpConfig类初始化各类容器和请求映射(这里能够初始化容器其实就是spring家族提供的一个接口,每当web容器启动会执行里面的onStartUp方法,然后就可以借此代替web.xml)

6,编写一个controller 测试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值