Bootstrap

黑马程序员SSM-SpringMVC学习笔记(自用)

学习目标:

1.掌握基于SpringMVC获取请求参数与响应json数据操作

2.熟练应用基于REST风格的请求路径设置与参数传递

3.能够根据实际业务建立前后端开发通信协议并进行实现

4.基于SSM整合技术开发任意业务模块功能

目录

一、SpringMVC简介

1.1概述

1.2 SpringMVC入门案例

 1.2.1 注解说明:

 1.2.2 开发总结:

1.3 入门案例工作流程分析

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

1.5 PostMan

 二、请求与响应

2.1 请求映射路径

2.2 请求参数

2.2.1 普通参数

2.2.2 POJO参数

2.2.3 嵌套参数

2.2.4 数组参数

2.2.5 集合参数

2.2.6 json参数

2.3 日期类型参数传递

2.4 响应

 三、REST风格

3.1 简介

3.2 入门案例

3.3 RESTful快速开发

3.4 案例:基于RESTful页面数据交互

四、SSM整合

4.1 整合流程

         4.1.1创建工程

4.1.2 SSM整合

4.1.3 功能模块

4.1.4 接口测试

4.2 表现层数据封装

4.2.1前端接受数据格式

 4.2.2 设置统一数据返回结果类

4.2.3设置统一数据返回结果编码

4.2.4根据情况设定合理的Result

4.3 异常处理

4.3.1 简介

4.3.2 项目异常分类

4.3.3 项目异常处理方案

4.3.4 项目异常处理步骤

4.4 页面

4.4.1 列表

4.4.2 增加

4.4.3 修改

4.4.4 删除

4.4.5 总结

五、拦截器

5.1 拦截器概念

5.2 入门案例

5.3执行流程

5.4 拦截器参数

5.5 拦截器工作流程分析


一、SpringMVC简介

1.1概述

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

使用简单,开发快捷


1.2 SpringMVC入门案例

1.导入SpringMVC坐标与Servlet坐标,tomcat7插件

<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>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <port>80</port>
        <path>/</path>
      </configuration>
    </plugin>
  </plugins>
</build>

2.创建SpringMVC控制类(等同于Servlet功能)

//定义表现层控制器bean
@Controller
public class UserController {

    //设置映射路径为/save,即外部访问路径
    @RequestMapping("/save")
    //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'info':'springmvc'}";
    }
}

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

//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

4.初始化Servlet容器,加载SpringMVC环境,并设置SpirngMVC技术处理的请求5

//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

 1.2.1 注解说明:


 1.2.2 开发总结:

一次性工作: 多次工作:
1.创建工程,设置服务器,加载工程 1.定义处理请求的控制器类
2.导入坐标
3.创建web容器启动类,今安在SpringMVC配置,并设置SpringVC请求拦截路径 2.定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
4.SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

·AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类

·AbstractDispatcherServletInitializer提供三个接口方法供用户实现

        1.createServletApplicationContext(),创建Servlet容器时,加载SpringMVC对应的bean并放入 WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围。

protected WebApplicationContext createServletApplicationContext() {    
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();        
        ctx.register(SpringMvcConfig.class);
        return ctx;
}

        2.getServletMappings(),设定SpringMVC对应的请求映射路径,设置为/表示拦截所用请求,任意请求都将转入到SpringMVC进行处理。

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

        3.createRootApplicationContext(),如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,方式同createServletApplicationContext()。

protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

1.3 入门案例工作流程分析


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

//一下两种方式取其一
//@ComponentScan({"com.itheima.service","com.itheima.dao"})
@ComponentScan(value = "com.itheima",
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = Controller.class
        )
)
public class SpringConfig {
}
//第三种办法
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

简化开发

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


 二、请求与响应

2.1 请求映射路径

2.2 请求参数

2.2.1 普通参数

Get请求传参

 

Post请求传参

 Post请求中文乱码处理

为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

 @Override
    protected Filter[] getServletFilters() {
        //配字符编码过滤器
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }

2.2.2 POJO参数

2.2.3 嵌套参数

 

2.2.4 数组参数

2.2.5 集合参数

2.2.6 json参数

1. 导入坐标

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.0</version>
</dependency>

2. 设置发送json数据(请求body中添加json数

;