Spring MVC 页面跳转和数据交互例子

在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>

 编写控制层类,代码如下:

向里面填入数据:

 控制台输出结果如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sshm_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值