在idea里创建一个maven项目,先在pom.xml文件里引入坐标依赖,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qcby</groupId>
<artifactId>SpringMvcDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--版本锁定-->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--SpringMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--servlet API-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!--日志-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
等依赖下载成功后,添加web模块,我们现在main文件夹下创建一个目录,名为webapp
应用后会生成web.xml文件
在web.xml文件中配置DispatcheServlet
Spring MVC是基于原生的servlet,通过强大的前端控制器DispatcheServlet,对请求和响应进行统一处理。
Spring MVC的本质就是一个servlet,是对原生的servlet进行了封装。在以前我们浏览器的每一次请求都需要我们写一个对应的servlet,现在我们只需要将浏览器的请求和响应交给DispatcheServlet进行统一的处理。
在web.xml配置文件中核心控制器DispatcherServlet代码如下:
<!‐‐配置前端控制器,对浏览器发送的请求进行统一处理‐‐>
<servlet>
<servlet‐name>dispatcherServlet</servlet‐name>
<servlet‐class>org.springframework.web.servlet.DispatcherServlet</servlet‐class>
<!‐‐加载springmvc.xml配置文件的位置和名称,配置的是Spring配置‐‐>
<init‐param>
<!--contextConfigLocation:上下文配置路径,固定值-->
<param‐name>contextConfigLocation</param‐name>
<!--classpath:类路径,值得是Java和resources文件夹-->
<!--springmvc.xml:指的是配置文件的名称:需要配置springmvc.xml,在下面-->
<param‐value>classpath:springmvc.xml</param‐value>
</init‐param>
<!‐‐配置启动加载‐‐>
<load‐on‐startup>1</load‐on‐startup>
</servlet>
<servlet‐mapping>
<servlet‐name>dispatcherServlet</servlet‐name>
<url‐pattern>*.do</url‐pattern>
</servlet‐mapping>
配置spring.xml,依赖引入后我们可以找到spring.xml
配置Tomact:
编写index.html文件
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>入门</h3><a href="/SpringMvcDemo/hello.do" >入门程序</a>
</body>
</html>
在webapp目录里创建html文件夹,并在里面写一个suc.html
编写Controller类和方法
配置spring.xml:
运行Tomact:
点击链接
完成了跳转,如下图
RequestMapping注解
RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
RequestMapping注解可以作用在方法和类上
1. 作用在类上:第一级的访问目录
2. 作用在方法上:第二级的访问目录
3. 细节:路径可以不编写 / 表示应用的根目录开始
RequestMapping的属性
1. path 指定请求路径的url
2. value value属性和path属性是一样的
3. mthod 指定该方法的请求方式
在index.html中加入两个按钮,代码如下:
<form action="/SpringMvcDemo/first/delete.do" method="get">
<input type="submit" value="删除"/>
</form>
<form action="/SpringMvcDemo/first/add.do" method="post">
<input type="submit" value="添加"/>
</form>
我们再创建一个Controller类:
我们点击按钮会在控制台打印 完成了视图层对控制层的访问。
请求参数的绑定
请求参数的绑定说明
1. 绑定机制:
表单提交的数据都是k=v格式的 username=haha&password=123
2SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
要求:提交表单的name和参数的名称是相同的
2. 支持的数据类型
基本数据类型和字符串类型
实体类型(JavaBean)
3. 集合数据类型(List、map集合等)
基本数据类型和字符串类型
提交表单的name和参数的名称是相同的. 区分大小写
实体类型(JavaBean)
1. 提交表单的name和JavaBean中的属性名称需要一致
2. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name
给集合属性数据封装
创建一个Car的javabean类,代码如下:
public class Car {
private Integer money;
public Integer getMoney() {
return money;
}
public void setMoney(Integer money) {
this.money = money;
}
@Override
public String toString() {
return "Car{" +
"money=" + money +
'}';
}
}
创建一个Cat的javabean类,代码如下:
public class Cat {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
创建一个User的javabean类,里面有各种类型数据,代码如下:
public class User {
private String name;
private Integer age;
private Cat cat;
private Car car;
private List<Cat> cats;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public List<Cat> getCats() {
return cats;
}
public void setCats(List<Cat> cats) {
this.cats = cats;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", cat=" + cat +
", car=" + car +
", cats=" + cats +
'}';
}
}
在index.html中添加以下代码,name中要对应javabean里变量的名称
<form action="/SpringMvcDemo/my/save3.do" method="post">
<input type="text" name="name"/>
<input type="text" name="age"/>
<input type="text" name="cat.name"/>
<input type="text" name="car.money"/>
<input type="text" name="cats[0].name"/>
<input type="text" name="cats[1].name"/>
<input type="text" name="cats[2].name"/>
<input type="submit" value="添加"/>
请求是post请求,数据会产生乱码,我们在web.xml文件中对编码格式进行设置,代码如下:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
编写控制层类,代码如下:
向里面填入数据:
控制台输出结果如下: