SpringMVC
- SpringMVC技术与Servlet技术功能相同,均属于web层开发技术
简介
- SpringMVC是一种基于Java实现MVC模型的轻量型Web框架
- 优点:
    - 使用简单,开发便捷(相比于Servlet)
- 灵活性强
 
简单入门
- 使用SpringMVC技术需要先导入SpringMVC依赖与Servlet依赖
    <!--SpringMVC相关--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> <version>2.5</version> </dependency>
- 
    创建SpringMVC配置类,将controller包加入容器管理的范围 
- 
    创建SpringMVC控制器类(等同于Servlet功能),在类前添加 @Controller注解使其可被Spring容器管理
- 
    创建方法,添加 @RequestMapping注解,在属性中指定其访问坐标,并添加@ResponseBody注解,意为将返回值对象转换为JSON格式并写入响应数据的响应体中。
- 编写代码使Tomcat加载SpringMVC配置
//定义一个Servlet容器初始化设置类,在里面加载Spring配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载SpringMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfig.class);
        return ctx;
    }
    //设置哪些请求归求SpringMVC配置
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //设置Spring容器
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
- 安装Tomcat的maven插件,运行即可访问
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!--端口控制-->
          <port>80</port>
          <!--项目路径控制意味着http://localhost/-->
          <path>/</path>
          <!--编码-->
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
简单入门中的注解详解
- 名称:@Controller- 类型:类注解
- 位置:SpringMVC控制器类定义上方
- 作用:设定SpringMVC的核心控制器bean
 
- 名称:@RequestMapping- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径
 
- 名称:@ResponseBody- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法响应内容为当前返回值,无需解析
 
简单入门的工作流程
- 启动服务器初始化过程
    - 服务器启动,执行ServletContainersInitCongig类,初始化web容器
- 执行createServletApplicationContext()方法,创建WebApplicationContext对象
- 加载SpringConfig
- 执行@ComponentScan对应的bean
- 加载UserController,每个RequestMapping的名称对应一个具体的方法
- 执行getServletMappings方法,定义所有的请求都通过SpringMVC
 
- 服务器启动,执行
- 单次请求过程
    - 发送请求localhost/test
- web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
- 解析请求路径/test
- 由/test匹配执行对应的方法
- 执行
- 检测到有@ResponsBody直接将方法的返回值作为响应体返回给请求方
 
Controller加载控制与业务bean加载控制
- SpringMVC只加载表现层bean
- Spring控制的bean
    - 业务bean(Service)
- 功能bean(DataSource等)
 
- 解决方案为:
    - 加载Spring控制的bean时排除掉SpringMVC控制的bean
- Spring加载的bean设定扫描范围为精准范围
 
关于加载Spring控制的bean时排除掉SpringMVC控制的bean的代码如下:
@ComponentScan(value = "org.YD",
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = Controller.class
        )
)
而精准范围则使用数组即可。
另外在配置Tomcat加载SpringMVC配置时还可以通过继承AbstractDispatcherServletInitializer类的子类AbstractAnnotationConfigDispatcherServletInitializer来进行配置,具体如下:
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
会更加方便。
PostMan简介
- PostMan是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
- 作用:常用于接口测试
- 特征:
    - 简单
- 实用
- 美观
- 大方
 
进入软件,注册后,创建工作空间,创建请求,即可。
