SpringMVC _ 起步


DAY4 -- SpringMVC

其他springMvc笔记

SpringMVC _ 起步(http://mxzfun.xyz/index.php/archives/553/
springMvc _ 请求与响应(http://mxzfun.xyz/index.php/archives/557
SpringMVC _ REST风格(http://mxzfun.xyz/index.php/archives/558
SpringMVC _ SSM整合、拦截器(http://mxzfun.xyz/index.php/archives/562/

零、学习目标

  • 掌握基于springMVC获取请求参数与响应json数据操作
  • 熟练应用基于REST风格的请求路径设置与参数传递
  • 能够根据实际业务建立前后端开发通信协议并进行实现。
  • 基于SSM整合技术开发任意业务模块功能

一、SpringMVC简介

1.1 SpringMVC概述

  • SpringMVC是一种基于Java实现MVC模型的轻量级web框架

1.1.1 优点

  • 使用简单,开发便捷(相比于servlet)灵活性强。

1.1.2 小结

  1. SpringMVc是一种表现层框架技术。
  2. SpringMVC用于进行表现层功能开发。

1.2 SpringMVC入门案例

  • 虽然但是,我这访问/save是404.....

1.2.1 导坐标(SpringMVC坐标与servlet坐标)

<!--  导坐标(SpringMVC坐标与servlet坐标)-->
  <dependencies>
    <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>
      <scope>provided</scope>
    </dependency>

  </dependencies>

1.2.2 创建SpringMVC控制器类(等同于Servlet功能)

//定义controller
//使用@Controller定义Bean
@Controller
public class UserController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前操作的返回值类型
    @ResponseBody
    public  String save(){
        System.out.println("user save....");
        return "{'module':'springmvc'}";
    }

}

1.2.3 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

//创建springmvc的配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.li.controller")
public class SpringMvcConfig {
}

1.2.4 初始化Servlet容器,加载SpringMVC环境,并设置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;
    }
}

1.2.5 知识点

1.2.6 入门案例总结

  • 一次性工作

    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作

    • 定义处理请求的控制器类
    • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据。

1.2.7 注意事项

  • SpringMVC是基于Spring的,在pom.xml只导入了spring-webmvc jar包的原因是它会自动依赖 spring相关坐标。
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类。
  • AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
  • createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应 的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用 范围为ServletContext范围,即整个web容器范围。
  • getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些 请求 createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC 对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
  • createServletApplicationContext用来加载SpringMVC环境 。
  • createRootApplicationContext用来加载Spring环境。

1.3 入门案例工作流程分析

1.3.1 启动服务器初始化过程

  • 服务器启动,执行ServletContainersInitconfig类,初始化web容器。
  • 执行createServletApplicationContext方法,创建了webApplicationContext对象。
  • 加载SpringMvcConfig。
  • 执行@ComponentScan加载对应的bean。
  • 加载UserController,每个@RequestMapping的名称对应一个具体的方法
  • 执行getservletMappings方法,定义所有的请求都通过springMVC。

1.3.2 单次请求过程

  • 发送请求localhost/save
  • web容器发现所有请求都经过SpringMVC,将请求交给springMVC处理。
  • 解析请求路径/save
  • 由/save匹配执行对应的方法save()
  • 执行save()
  • 检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

1.4 Controller加载控制与业务bean加载控制

1.4.1 思考

  • 因为功能不同,如何避免Spring错误的加载到SpringMVC的bean?

    • 加载Spring控制的bean的时候排除掉SpringMVC控制的bean。

1.4.2 知识点 —— @ComponentScan

1.4.3 实例

方式一:修改Spring配置类,设定扫描范围为精准范围

@Configuration
@ComponentScan({"com.li.service","com.li.dao"})
public class SpringConfig {
}

方式二:修改Spring配置类,设定扫描范围为com.li,排除掉controller包中的bean

@Configuration
@ComponentScan(value="com.li",
        excludeFilters=@ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = Controller.class
        )
)
public class SpringConfig {
}

1.4.4 简化开发

  • 有了Spring的配置类,要想在tomcat服务器启动将其加载,我们需要修改 ServletContainersInitConfig。
  • (就是这个超长的,要继承AbstractDispatcherServletInitializer的)
//就是这个超长的,要继承AbstractDispatcherServletInitializer的
public class ServletContainersInitConfig extends
        AbstractDispatcherServletInitializer {
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new
                AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new
                AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}
  • 因此,Spring还提供了一种更简单的配置方式,可以不用再去创建 AnnotationConfigWebApplicationContext对象,不用手动register对应的配置类。
public class ServletContainersInitConfig extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

1.5 PostMan

  • Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
  • 作用:常用于进行接口测试。

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - SpringMVC _ 起步


三二一的一的二