【SpringMVC】02:快速配置

69 阅读2分钟

01:导坐标

SpringMVC、Servlet

provided:该包只在编译和测试的时候用,运行的时候无需直接使用tomcat中的,可避免冲突。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>

纯注解开发

02:创建Controller

用来处理请求,等同于Servlet的功能。

@Controller【类注解】

@RequestMapping("/test")【方法注解】:设置访问路径

@ResponseBody:把返回值作为响应内容(ResponseBody)反馈给发送方(浏览器)

注解改成@RestController,注解就不用每个方法加@ResponseBody注解了

//com.android.controller.UserController

@RestController
public class UserController {
    @RequestMapping("/test")
    //@ResponseBody
    public String test() {
        System.out.println("user test");
        return "{'module':'springmvc'}";
    }
}

03:(一次性工作)SpringMVC 配置类

因为说到底,SpringMVC还是Spring技术,所以需要加载对应的bean

//com.android.config.SpringMvcConfig

@Configuration
@ComponentScan("com.controller")
public class SpringMvcConfig {
}

04:(一次性工作)初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

当启动tomcat时,SpringMVC的配置得确保能加载成功。

所以,这里定义一个Servlet容器启动配置类,用来加载Spring配置

ServletContainersInitConfig.java,名字无所谓,关键是得继承extends AbstractDispatcherServletInitializer,并重写里面的方法。

  1. create_Servlet_ApplicationContext:加载springMVC容器配置:
    • AnnotationConfig_WebApplicationContext ctx;
    • ctx.register(SpringMvcConfig.class);
  2. getServletMappings:设置哪些请求归springMVC处理
  3. create_Root_ApplicationContext:加载spring容器配置
//com.android.config.ServletContainersInitConfig

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

流程分析

服务器启动:

  1. 执行ServletContainersInitConfig类,初始化Web容器;
  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象
  3. 加载SpringMvcConfig
  4. 执行@ComsponentScan加载对应的bean(UserController)
  5. 加载UserController,其中每个@RequestMapping的路径对应一个具体的方法
  6. 执行getServletMappings,让所有请求都通过SpringMVC

单次请求:

  1. 发送localhost/save
  2. (Web容器发现所有请求都通过SpringMVC)将请求交给SpringMVC处理
  3. 解析请求路径/save
  4. /save 匹配到 save()
  5. 执行save()
  6. (检测到@ResponseBody)直接将save()方法返回值作为响应体返回给请求方