1. 概述

1.1 概念

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

  • 优点

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

项目请求响应架构演进:

  1. 软件三层
  2. 软件三层 + Web层中的MVC(JSP)
  3. 异步调用 + 软件三层 + Web层中的MVC(HTML) + Json
  4. 前后端分离
  5. 前端组件化,后台微服务化

1.2 快速入门

1.2.1 步骤

  1. 导入依赖
  2. 配置
  3. 少量编码测试

1.2.2 代码实现

1. 创建web工程(Maven结构)
2. 设置tomcat服务器,加载web工程(tomcat插件)
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
3. 导入坐标(SpringMVC+Servlet
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- 导入spring-webmvc坐标自动依赖导入spring相关坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
4. 定义处理请求的功能类(UserController
//定义表现层控制器bean
@Controller
public class UserController {
//设置映射路径为/save,即外部访问路径
@RequestMapping("/save")
//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public String save(){ // 处理器 handler,一个控制器中可以包含N个处理器
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}

注意事项:

对于SpringMVC而言,Controller方法返回值默认表示要跳转的页面,没有对应的页面就会报错。

如果不想跳转页面而是响应数据,那么就需要在方法上使用@ResponseBody注解。

5. 编写SpringMVC配置类,加载处理请求的Bean。
//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("com.cy.controller") // 只扫描web层组件所在的包
public class SpringMvcConfig {
}
6. 加载SpringMVC配置,并设置SpringMVC请求拦截的路径
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
protected WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//加载指定配置类
ctx.register(SpringMvcConfig.class);
return ctx;
} //设置由springmvc控制器处理的请求映射路径,SpringMVC处理拦截哪些请求
protected String[] getServletMappings() {
return new String[]{"/"};
} //加载spring配置类,创建Spring容器对象
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}

1.3 启动服务器初始化过程

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器
  2. 执行createServletApplicationContext方法,创建了WebApplicationContextSpringMVC)容器对象那个
  3. 加载SpringMVC的配置类SpringMvcConfig
  4. 执行组件扫描@ComponentScan加载对应的bean
  5. 加载UserController,每个@RequestMapping的名称对应一个具体的方法
  6. 执行getServletMappings方法,定义所有的请求都通过SpringMVC

1.4 单次请求过程

  1. 发送请求localhost/save
  2. web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
  3. 解析请求路径/save
  4. 得知:/save匹配执行对应的方法为UserController.save()
  5. 执行save()
  6. 检测到有@ResponseBody直接将save()方法的返回值直接写入响应体

1.5 组件扫描

SpringMVC容器加载Bean到自己容器中的方式与Spring一致。

  • SpringMVCSpring中的Bean有什么区别?
  • SpringMVC应该扫描哪些包?

1.5.1 分析:

  • SpringMVCbean(表现层bean)
  • Spring中的bean(非表现层的Bean)
    1. 业务beanService
    2. 功能beanDataSource等)
    3. ….
  • SpringMVC加载扫描哪些Bean存放路径:
    1. SpringMVC加载的bean对应的包均在com.cy.web包内
  • Spring如何实现只扫描自己的bean
    1. 方式一:Spring加载的bean设定扫描范围为com.cy,排除掉controller包内的bean
    2. 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    3. 方式三:不区分SpringSpringMVC的环境,加载到同一个环境中

1.5.2 方式一代码实现

通过@ComponentScan注解的excludeFilters属性,配出所有标记有@Controller注解的所有方法。

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

    1. excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
    2. includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)

1.5.3 方式二代码实现

通过字符串数组的形式,精确指定每个包;

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

1.6 创建SpringMvc容器对象的方式

1.6.1 格式1:

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

1.6.2 简化格式

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class} // 直接返回对应的配置类的Class对象数组
};
protected String[] getServletMappings() {
return new String[]{"/"}; // // 直接返回要处理的请求url匹配方式
}
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class}; // 直接返回对应的配置类的Class对象数组
}
}

2. 请求

2.1 发送get/post请求

2.1.1 GET请求传递普通参数
  • 普通参数:url地址传参;
  • Handler形参变量名和URL中参数名相同,SpringMVC就会自动帮我们封装赋值
//普通参数:请求参数与形参名称对应即可完成参数传递
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param'}";
}
  • 问题:参数如果是中文,接收到的参数出现了中文乱码。
  • 原因:tomcat 8.5版本之后GET请求就不再出现中文乱码问题,但是我们使用的是tomcat7插件,所以会出现GET请求中文乱码问题。
  • 解决:在pom.xml添加tomcat7插件处配置UTF-8字符集,解决GET请求中文乱码问题。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port><!--tomcat端口号-->
<path>/</path> <!--虚拟目录-->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
2.1.2 POST请求传递普通参数
  • 普通参数:form表单post请求传参,

  • Handler形参变量名和表单中表单项name属性值,SpringMVC就会自动帮我们封装赋值

//普通参数:请求参数与形参名称对应即可完成参数传递
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param'}";
}

问题:我们发现,POST请求传递的参数如果包含中文那么就会出现中文乱码问题,说明我们之前配置的tomcat插件uri路径编解码字符集无法解决POST请求中文乱码问题。那么如何解决呢?

2.1.3 POST请求中文乱码处理

在加载SpringMVC配置的配置类中指定字符过滤器。

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
} protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
} protected String[] getServletMappings() {
return new String[]{"/"};
} // Post请求乱码问题,使用CharacterEncodingFilter处理全局请求乱码
// 模板代码
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}

2.2 常见类型参数类型封装

常见的数据类型,我们只要按照SpringMVC要求,保证名称一致,SpringMVC就会自动帮我们解析封装赋值。

2.2.1 五种常见类型参数
  • 普通参数(基本类型 + String
  • POJO类型参数
  • 嵌套POJO类型参数
  • 数组类型参数
  • 集合类型参数
2.2.2 普通参数
  • 普通参数:

    • 保证请求参数名与形参名一致,SpringMVC便会自动封装

    • 当请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

      @RequestParam中配置的值要和请求参数名一致

  • Handler代码

    //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
    @RequestMapping("/commonParamDifferentName")
    @ResponseBody
    public String commonParamDifferentName(@RequestParam("name") String userName , int age){
    System.out.println("普通参数传递 userName ==> "+userName);
    System.out.println("普通参数传递 age ==> "+age);
    return "{'module':'common param different name'}";
    }
  • 注解说明

    • 名称:@RequestParam
    • 类型:形参注解
    • 位置:SpringMVC控制器方法形参定义前面
    • 作用:绑定请求参数与处理器方法形参间的关系
    • 参数:
      • required:是否为必传参数
      • defaultValue:参数默认值
2.2.3 POJO类型参数
  • POJO参数:

    请求参数名与形参中实体对象属性名相同,SpringMVC便会自动帮我们封装请求参数到实体对象中

  • Handler代码

    public class User {
    private String name;
    private int age;
    //同学们自己添加getter/setter/toString()方法
    }
    //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'module':'pojo param'}";
    }

    注意:

    请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

2.2.4 嵌套POJO类型参数
  • POJO对象中包含POJO对象
public class User {
private String name;
private int age;
private Address address;
//同学们自己添加getter/setter/toString()方法
}
public class Address {
private String province;
private String city;
private Address address;
}
  • 嵌套POJO参数:

    请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

  • Handler代码

    //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
    @RequestMapping("/pojoContainPojoParam")
    @ResponseBody
    public String pojoContainPojoParam(User user){
    System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
    return "{'module':'pojo contain pojo param'}";
    }

    注意:

    请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

2.2.5 数组类型参数
  • 数组参数:

    多个相同请求参数名与形参中数组变量名一致,SpringMVC就会自动把多个相同参数名的值封装到形参位置的数组中。

  • Handler代码

    //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
    System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
    return "{'module':'array param'}";
    }
2.2.6 集合类型参数
  • 集合保存普通参数:

    请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

  • Handler代码

    //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
    @RequestMapping("/listParam")
    @ResponseBody
    public String listParam(@RequestParam List<String> likes){
    System.out.println("集合参数传递 likes ==> "+ likes);
    return "{'module':'list param'}";
    }

2.3 Json数据参数封装

2.3.1 json数据参数介绍

  • json普通数组(["","","",...])
  • json对象({key:value,key:value,...}
  • json对象数组([{key:value,...},{key:value,...}]

2.3.2 准备工作

  • 设置请求头

    低版本PostMan发送Json数据,需要设置一个请求头

    Content-Type: application/json
  • 数据封装提交

    JSON数据需要在请求体中,切勾选Raw,将JSON数据写在下方的文本域中。

2.3.3 传递json普通数组

2.3.3.1 代码演示
  1. 添加json数据转换相关坐标

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
    </dependency>
  2. 开启自动转换json数据的支持

    @Configuration
    @ComponentScan("com.itheima.controller")
    //开启json数据类型自动转换
    @EnableWebMvc
    public class SpringMvcConfig {
    }

    注意事项:

    @EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

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

  4. Controller中编写方法接收json参数

    //集合参数:json格式
    //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
    //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
    //3. Handler形参的参数名任意,因为Json数据没有对应的key
    @RequestMapping("/listParamForJson")
    @ResponseBody
    public String listParamForJson(@RequestBody List<String> likes){ // 参数名任意
    System.out.println("list common(json)参数传递 list ==> "+likes);
    return "{'module':'list common for json param'}";
    }
2.3.3.2 @EnableWebMvc
  • 名称:@EnableWebMvc
  • 类型:配置类注解
  • 位置:SpringMVC配置类定义上方
  • 作用:开启SpringMVC多项辅助功能,包括Json序列化反序列化
  • 范例:
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
2.3.3.3 @RequestBody
  • 名称:@RequestBody
  • 类型:形参注解
  • 位置:SpringMVC控制器方法形参定义前面
  • 作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器Handler方法只能使用一次
  • 范例:
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println("list common(json)参数传递 list ==> "+likes);
return "{'module':'list common for json param'}";
}

2.3.4 传递json对象

  • POJO参数:

    json数据与形参对象属性名相同,定义POJO类型形参即可接收参数

  • Handler代码

    //POJO参数:json格式
    //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
    //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
    @RequestMapping("/pojoParamForJson")
    @ResponseBody
    public String pojoParamForJson(@RequestBody User user){
    System.out.println("pojo(json)参数传递 user ==> "+user);
    return "{'module':'pojo for json param'}";
    }

2.3.5 传递json对象数组

  • POJO集合参数:

    json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

  • Handler代码

    //集合参数:json格式
    //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
    //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
    @RequestMapping("/listPojoParamForJson")
    @ResponseBody
    public String listPojoParamForJson(@RequestBody List<User> list){
    System.out.println("list pojo(json)参数传递 list ==> "+list);
    return "{'module':'list pojo for json param'}";
    }

2.3.6 @RequestBody与@RequestParam区别

  • 区别

    @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded

    @RequestBody用于接收json数据【application/json

  • 应用

    后期开发中,发送json格式数据为主,@RequestBody应用较广

    如果发送非json格式数据,选用@RequestParam接收请求参数

3. 日期类型参数传递

3.1 代码演示

  • 格式不同

    日期类型数据基于系统不同格式也不尽相同

    2088-08-18

    2088/08/18

    08/18/2088

    2022年5月31日

  • 如何解析

    当请求的日期的格式不同时,在后台Handler参数上添加注解@DateTimeFormat并通过pattern属性指定格式,就可以完成解析并自动封装。

  • Handler代码

    需要配合@EnableWebMvc,才能生效。

    //日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
    //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
    @RequestMapping("/dataParam")
    @ResponseBody
    public String dataParam(Date date,
    @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
    @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
    System.out.println("参数传递 date ==> "+date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
    System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
    return "{'module':'data param'}";
    }

3.2 @DateTimeFormat注解介绍

  • 名称:@DateTimeFormat
  • 类型:形参注解
  • 位置:SpringMVC控制器方法形参前面
  • 作用:设定日期时间型数据格式
  • 属性:pattern:指定日期时间格式字符串

3.3 工作原理

  • 其内部依赖Converter接口
public interface Converter<S, T> {
@Nullable
T convert(S var1);
}
  • 请求参数年龄数据(String→Integer)
  • json数据转对象(json → POJO)
  • 日期格式转换(String → Date)

3.4 注意事项

@EnableWebMvc注解功能二:

  • 根据类型匹配对应的类型转换器。

4. 响应数据

4.1响应页面

@Controller
public class UserController { //响应页面/跳转页面
//返回值为String类型,设置返回值为页面名称,即可实现页面跳转
@RequestMapping("/toJumpPage")
public String toJumpPage(){
System.out.println("跳转页面");
return "page.jsp";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>Hello Spring MVC!</h2>
</body>
</html>

4.2 文本数据

//响应文本数据
//返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解
// @RequestMapping("/toText")
@RequestMapping(value = "/toText",produces = "application/json;charset=utf-8") //解决响应乱码问题 @ResponseBody
public String toText(){
System.out.println("返回纯文本数据");
return "response tex你好!!";
}

4.3 json数据

//响应POJO对象
//返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json对象数据");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
//响应POJO集合对象
//返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
System.out.println("返回json集合数据");
User user1 = new User();
user1.setName("传智播客");
user1.setAge(15); User user2 = new User();
user2.setName("黑马程序员");
user2.setAge(12); List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2); return userList;
}

注意:需要添加jackson-databind依赖以及在SpringMvcConfig配置类上添加@EnableWebMvc注解

4.4 @ResponseBody@RequestBody 区别

类目 @ResponseBody @RequestBody
标注位置 类 | 方法 方法形参
作用 把返回的(POJO等)数据写入响应体 从请求体中获取请求json数据
数据格式 POJO对象(使用jackson)转成Json格式字符串,
写入响应体
前端请求的Json格式字符串,
读取并封装成POJO对象

相关注解(多看)

@Controller

  • 名称:@Controller
  • 类型:类注解
  • 位置:SpringMVC控制器类定义上方
  • 作用:设定SpringMVC的控制器
  • 范例
@Controller
public class UserController {
}

@RequestMapping

  • 名称:@RequestMapping
  • 类型:方法、类注解
  • 位置:SpringMVC控制器(方法)定义上方
  • 作用:
    • 建立请求的URL处理该请求的处理器(方法)之间的映射关系
    • 限定请求方式、参数、头等内容
  • 范例
@RequestMapping("/user")
public class UserController{ //控制器
@RequestMapping("/save")
public void save(){ // 处理器handler
System.out.println("user save ...");
}
}

注意:其实@RequestMapping注解还可以写到类上面

@ResponseBody

  • 名称:@ResponseBody

  • 类型:方法注解

  • 位置:SpringMVC控制器方法定义上方

  • 作用:

    • Controller类中方法(控制器中)的返回值直接写入响应体,而非把返回值作为要跳转的页面名称。

      一般配合前台的异步请求,局部刷新数据到页面上。

  • 范例

@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}

@RequestParam

  • 名称:@RequestParam

  • 类型:形参注解

  • 位置:SpringMVC控制器方法形参定义前面

  • 作用:绑定请求参数与处理器方法形参间的关系

    可以解决:

    1. 请求参数名和Handler形参对应名称不一样
    2. 请求参数中多个同名参数,Handler形参为集合类型
  • 参数:

    • required:是否为必传参数
    • defaultValue:参数默认值

相关接口API(理解)

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

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

    • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个项目范围。
    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(SpringMvcConfig.class);
    return ctx;
    }
    • getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理。
    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
    return new String[]{"/"};
    }
    • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()
    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
    return null;
    }

入门程序开发总结(1+N)

  • 一次性工作

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

SpringMVC-01的更多相关文章

  1. SpringMVC 01: SpringMVC + 第一个SpringMVC项目

    SpringMVC SpringMVC概述: 是基于MVC开发模式的框架,用来优化控制器 是Spring家族的一员,也具备IOC和AOP 什么是MVC: 它是一种开发模式,是模型视图控制器的简称,所有 ...

  2. SpringMVC 02: SpringMVC响应get和post请求 + 5种获取前端数据的方式

    响应get和post请求 SpringMVC中使用@RequestMapping注解完成对get请求和post请求的响应 项目结构和配置文件与SpringMVC博客集中的"SpringMVC ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. SpringMVC札集(01)——SpringMVC入门完整详细示例(上)

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  5. SpringMVC学习01——HelloSpringMvc Demo

    HelloWorldController.java文件 package com.su.controller; import org.springframework.stereotype.Control ...

  6. springmvc 配置01

    springmvc请求流程与struts比较   1.添加包 com.springsource.org.aopalliance-1.0.0.jarcom.springsource.org.apache ...

  7. 01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器

     1 添加Spring MVC所需的jar包. 2 创建一个以下项目结构的springmvc项目 3 web.xml的配置如下: <?xmlversion="1.0"en ...

  8. SpringMVC框架01——使用IDEA搭建SpringMVC环境

    1.Spring MVC 入门 1.1.Spring MVC 简介 把Web应用程序分为三层,分别是: 控制器(Controller):负责接收并处理请求,响应客户端: 模型(Model):模型数据, ...

  9. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  10. SpringMVC框架 SpringMVC的获取01

    ---恢复内容开始--- SpringMVC通过实现MVC模式,很好地将数据.业务与展现进行了分离.从MVC的角度来说,SpringMVC和Struts2非常类似,但SpringMVC采用了可插拔的组 ...

随机推荐

  1. .net core 配置swagger

    首先要现有一个asp.net  webApi项目 这里就不赘述了,接下来就按下面的步骤进行即可(本文是基于swagger 1.0.0-rc3版本的配置) 1.在project.json中添加 swag ...

  2. docker:compose安装

    compose:独立于docker的程序,可以做多容器app 安装docker-compose: 下载docker-compose文件: curl -L https://github.com/dock ...

  3. RAID5加热备盘

    RAID 5加热备盘 RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失.换句话说,在RAID 10 ...

  4. 代码管理工具-Git基础介绍及常用技巧

    目录 Git起源 基本概念 Branch.HEAD和Commit tree Git分支 git merge 和 git rebase 的区别和抉择 与远程仓库的交互 关于一些实际开发场景的问题和解决方 ...

  5. 定位、z-index、JavaScript变量和数据类型

    溢出属性 # 文本内容超出了标签的最大范围 overflow: hidden; 直接隐藏文本内容 overflow: auto\scroll; 提供滚动条查看 # 溢出实战案例 div { overf ...

  6. Windows IDEA Community 报错

    运行时报错 "CreateProcess error=206,文件名或扩展名太长" 解决方法:https://plugins.gradle.org/plugin/ua.eshepe ...

  7. URL 是什么?

    URL 是什么? 本文写于 2020 年 5 月 16 日 URL 是什么?天天听到人家说到这个名词,那它到底是什么? URL 是统一资源定位符,Uniform Resource Locator. 俗 ...

  8. 【Java面试】Redis存在线程安全问题吗?为什么?

    一个工作了5年的粉丝私信我. 他说自己准备了半年时间,想如蚂蚁金服,结果第一面就挂了,非常难过. 问题是: "Redis存在线程安全问题吗?" 关于这个问题,看看普通人和高手的回答 ...

  9. 使用 oh-my-posh 美化 windows terminal,让其接近oh-my-zsh

    本文旨在快速让你进行美化,少踩一些坑,原文出自我的博客:prettier-windows-terminal-with-oh-my-posh 为了同 iterm2 下的 oh-my-zsh 保持基本一致 ...

  10. 【SSM框架】Spring笔记 --- 事务详解

    1.Spring的事务管理: 事务原本是数据库中的概念,在实际项目的开发中,进行事务的处理一般是在业务逻辑层, 即 Service 层.这样做是为了能够使用事务的特性来管理关联操作的业务. 在 Spr ...