SpringMVC基础学习之简单的数据处理

前言

小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。

这个SpringMVC基础学习系列是用来记录我学习SpringMVC框架基础知识的全过程 (这个系列是参照B站狂神的SpringMVC最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)


之后我将尽量以两天一更的速度更新这个系列,还没有学习SpringMVC框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧,加油吧,编程人!

特别提醒:如果对SpringMVC基础学习系列感兴趣,可以阅读本系列往期博客:
第一篇SpringMVC基础学习之简单回顾MVC架构和Servlet的使用
第二篇SpringMVC基础学习之初识SpringMVC
第三篇SpringMVC基础学习之初识
第四篇SpringMVC基础学习之使用注解开发
第五篇SpringMVC基础学习之Controller的两种实现方式和RequstMapping注解的使用
第六篇SpringMVC基础学习之Restful风格的简单使用
第七篇SpringMVC基础学习之页面跳转方式的简单使用


今天我们来到了SpringMVC基础学习的第八站:使用Spring MVC进行简单的数据处理 ,主要包括如何处理提交数据,如何将数据显示到前端,以及解决中文乱码问题。废话不多说,让我们开始今天的学习内容吧。

8.使用Spring MVC进行数据处理

8.1 处理提交数据

8.1.1 提交参数名和字段名一致

1.编写UserController控制类
package com.kuang.controller;

import com.kuang.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
// 在类上使用@RequestMapping注解,设置父级映射请求路径
@RequestMapping("/user")
public class UserController {
    
    /** 
     * 测试提交参数名和字段名一致
     * @param: name 用户名
     * @param: model 视图模型
     * @return: String字符串
     */
    /* 在方法上使用@RequestMapping注解,设置子级映射请求路径
       其真实访问路径为:http://localhost:8080/user/h2?name=xxx */
    @RequestMapping("/h1")
    public String hello(String name, Model model) {
        // 1.设置前端参数
        System.out.println("接收到前端的参数为:"+name);
        // 2.将返回的结果传递给前端: Model
        model.addAttribute("msg",name);
        // 3.视图跳转: 返回视图逻辑名,让视图解析器进行处理
        return "user/hello";
    }
}
2.查看测试结果
2-1 前端传入参数为空
  • 向前端提交数据http://localhost:8080/user/h1

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果页面访问失败,前端接收到的参数为null!

2-2 前端传入参数为不为空
  • 向前端提交数据http://localhost:8080/user/h1?name=zhoujielun

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果页面访问成功,前端接收到的参数为zhoujielun

8.1.2提交参数名和字段名不一致

提交的域名称和处理方法的参数名不一致,例如提交数据http://localhost:8080/hello?username=zhoujielun

1.编写UserController控制类
1-1 未使用@RequestParam注解
package com.kuang.controller;

import com.kuang.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
// 在类上使用@RequestMapping注解,设置父级映射请求路径
@RequestMapping("/user")
public class UserController {
    
    /** 
     * 测试提交参数名和字段名不一致, 未使用@RequestParam注解
     * @param: name 用户名
     * @param: model 视图模型
     * @return: String字符串
     */
    /* 在方法上使用@RequestMapping注解,设置子级映射请求路径
       其真实访问路径为:http://localhost:8080/user/h2?name=xxx */
    @RequestMapping("/h2")
    public String hello2(String name, Model model) {
        // 1.设置前端参数
        System.out.println("接收到前端的参数为:"+name);
        // 2.将返回的结果传递给前端:Model
        model.addAttribute("msg",name);
        // 3.视图跳转: 返回视图逻辑名,交由视图解析器进行处理
        return "user/hello";
    }
    
}
1-2 使用@RequestParam注解
package com.kuang.controller;

import com.kuang.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
// 在类上使用@RequestMapping注解,设置父级映射请求路径
@RequestMapping("/user")
public class UserController {
    
    /** 
     * 测试提交参数名和字段名不一致, 使用@RequestParam注解
     * @param: name 用户名
     * @param: model 视图模型
     * @return: String字符串
     */
    /* 在方法上使用@RequestMapping注解,设置子级映射请求路径
       其真实访问路径为:http://localhost:8080/user/h2?name=xxx */
    @RequestMapping("/h2")
   /* @RequestParam("username"):"username"提交的域的名称,
      同时也强调这是必须要从前端接收的,防止前端接收null值 */
    public String hello2(@RequestParam("username") String name, Model model) {
        // 1.设置前端参数
        System.out.println("接收到前端的参数为:"+name);
        // 2.将返回的结果传递给前端:Model
        model.addAttribute("msg",name);
        // 3.视图跳转: 返回视图逻辑名,让视图解析器进行处理
        return "user/hello";
    }
    
}
2.测试结果
2-1 未使用@RequestParam注解
  • 向前端提交数据http://localhost:8080/user/h2?name=fangwenshan

在这里插入图片描述

结果访问页面失败,HTTP状态400-错误的请求:字符串类型的“username"值没有被设置!

2-2 使用@RequestParam注解不传递参数
  • 向前端提交数据http://localhost:8080/user/h2

在这里插入图片描述

结果访问页面失败,HTTP状态400-错误的请求:字符串类型的“username"值没有被设置!

2-3 使用@RequestParam注解传递参数不一致
  • 向前端提交数据http://localhost:8080/user/h2?name=fangwenshan

在这里插入图片描述

结果访问页面失败,与2-2提示错误相同!

2-3 使用@RequestParam注解传递一致参数
  • 向前端提交数据http://localhost:8080/user/h2?username=fangwenshan

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果访问页面成功,前端接收的参数为:fangwenshan

3.使用总结
  • 要解决前端传递的参数和字段不一致,在不一致字段前使用@RequestParam注解即可
  • 在name参数前使用@RequestParam(“username”),"username"是指提交的参数名
  • 使用@RequestParam也强调这是必须要从前端接收的参数,防止前端接收null值

8.1.3 前端传递一个对象

前端接收的是一个对象id,name,age要提交的表单域和对象的属性名一致,参数使用对象即可

1.引入Lombok资源依赖
  • 在该项目的pom.xml配置文件中引入lombok的资源依赖
<dependencies>
    <!-- lombok资源依赖 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
</dependencies>
2.编写User实体类
package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data // 引入无参构造,get和set方法,以及toString方法等
@AllArgsConstructor // 引入有参构造
@NoArgsConstructor // 再次引入无参构造,防止引入有参构造时被覆盖
// User实体类
public class User {
    
    private int id; // 编号
    private String name; // 用户名
    private int age; // 年龄
    
}

3.编写UserController控制类

package com.kuang.controller;

import com.kuang.pojo.User;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
// 在类上使用@RequestMapping注解,设置父级映射请求路径
@RequestMapping("/user")
public class UserController {
    
    /**
     * 前端接收的是一个对象:id,name,age
     * 在方法上使用@RequestMapping注解,设置子级映射请求路径
     */
    @GetMapping("/h3")
    public String hello3(User user) {
        // 打印用户信息
        System.out.println(user);
        //视图跳转: 返回视图逻辑名,让视图解析器进行处理
        return "user/hello";
    }
    
}
4.测试结果
4-1 不传递参数
  • 向前端提交数据http://localhost:8080/user/h3

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果在控制台打印用户信息"User(id=1, name=null, age=22)"

4-2 传递参数
  • 向前端提交数据:http://localhost:8080/user/h3?id=1&username=linjunjie&age=22

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果访问页面成功,并且在控制台打印用户信息"User(id=1, name=linjunjie, age=22)"

3.使用总结
  • 要提交的表单域和对象的属性名一致,参数使用对象即可
  • 接收前端用户传递的参数,判断参数的名字,假设名字直接在方法中,可以直接使用
  • 假设传递的是一个对象User,匹配User对象中的字段名,如果名字一致就OK,否则,匹配不到
  • 如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null

8.2 数据显示到前端

8.2.1 使用Model对象

1.编写springmvc-servlet.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.kuang.controller"/>
    
     <!-- 设置default-servlet-handler用来防止静态资源被过滤 -->
    <mvc:default-servlet-handler/>
    
     <!-- 支持mvc的注解驱动: 让@RequstMapping注解生效, 以及引入DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter实例
         annotation-driven配置帮助我们自动完成上述两个实例的注入 -->
    <mvc:annotation-driven/>

    <!-- 配置internalResourceViewResolver(视图解析器): 解析DispatcherServlet(中心控制器)给它的ModelAndView -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!--前缀--->
        <!-- 注意:在视图解析器中我们把所有的视图都放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>
2.编写UserController2控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
public class UserController2 {
    
    /**
     * 在方法上使用@RequestMapping注解,设置请求映射的路径
     * 真实访问路径:http://localhost:8080/user2/h1 
     */
    @RequestMapping("/user2/h1")
    public  String hello(@RequestParam("username") String name, Model model) {
        model.addAttribute("name",name);
        System.out.println(name);
        return "user/hello";
    }
    
}
3.测试结果
  • 向前端提交数据http://localhost:8080/user2/h1?username=wumengda

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果访问页面成功,并且在控制台打印用户信息"wumengda"

8.2.2 使用ModelAndView对象

1.编写springmvc-servlet.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 显式引入处理器映射和处理器适配器,也可以不写,其实Spring已经帮我们引入了-->
    <!-- 配置处理器映射器 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
    <!-- 配置处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    <!-- 配置internalResourceViewResolver(视图解析器): 
         解析DispatcherServlet(中心控制器)给它的ModelAndView -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!--前缀-->
        <!-- 在视图解析器中我们吧所有的视图都放在/WEB-INF/目录下,
             这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 注册控制器HelloController的Bean信息,交由Spring的IOC容器进行管理
         class对应处理请求的控制类,name对应请求路径 -->
    <bean class="com.kuang.controller.UserController2" name="/hello"/>
    
</beans>
2.编写UserController2控制类
package com.kuang.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 实现Controller接口
public class UserController2 implements Controller {
    
    /**
     * 使用ModelAndView对象
     * @param request Http请求
     * @param response Http响应
     * @return ModelAndView模型视图对象
     */
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 获取ModelAndView对象
        ModelAndView mv = new ModelAndView();
        // 封装对象:设置属性msg与值,进行视图渲染
        mv.addObject("msg","Hello,ModelAndView!");
        // 设置视图逻辑名
        mv.setViewName("user/hello");
        // 视图跳转:返回ModelAndView让视图解析器进行处理
        return mv;
    }
    
}
3.测试结果
  • 向前端提交数据http://localhost:8080/hello

在这里插入图片描述

结果访问hello.jsp页面成功,并且显示"Hello,ModelAndView!"的信息!

8.2.3 使用ModelMap对象

1.编写springmvc-servlet.xml配置文件
  • 与使用Map对象springmvc-servlet.xml配置文件相同
1.编写UserController2控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
// 在类上使用@RequestMapping注解,设置父级请求映射的路径
@RequestMapping("/user2")
public class UserController2 {
    
    /* 在方法上使用@RequestMapping注解,设置子级请求映射的路径
       真实访问路径:http://localhost:8080/user2/h2 */
    @RequestMapping("/h2")
    public  String hello2(@RequestParam("username") String name, ModelMap map) {
        // 封装要显示到视图中的数据
        map.addAttribute("name",name);
        // 打印名字
        System.out.println(name);
        // 跳转视图
        return "user/hello";
    }
    
}
2.测试结果
2-1 不传递参数
  • 向前端提交数据http://localhost:8080/user2/h2

在这里插入图片描述

结果访问页面失败,HTTP状态400-错误的请求:字符串类型的“username"值没有被设置

2-2 传递参数名与字段名不一致
  • 向前端提交数据http://localhost:8080/user2/h3?name=zhouxingchi

在这里插入图片描述

结果访问页面失败,与2-1的错误相同!

2-3 传递参数名与字段名一致
  • 向前端提交数据http://localhost:8080/user2/h3?username=zhouxingchi

在这里插入图片描述

  • 查看控制台输出

在这里插入图片描述

结果访问页面成功,并且在控制台打印username的值“zhouxingchi”

8.2.4 分析对象关系

1.查看ModelMap对象源码
public class ModelMap extends LinkedHashMap<String, Object> {
    ...
}

ModelMap继承了LinkedHashMap,所以它拥有LinkedHashMap的全部功能

2.查看ModelMap的子类ExtendedModelMap源码
public class ExtendedModelMap extends ModelMap implements Model {
    ...
}

Model精简版(大部分情况下,我们都直接使用Model)

8.2.3 不同方式的区别

使用区别简单来说就是

  • Model只有几个方法只适用于存储数据,简化了对于Model对象的操作和理解
  • ModelMap继承了LinkedMap,除了实现自身的一些方法,同样继承LinkedMap的方法和特性
  • ModelAndView可以在存储数据的同时,进行设置返回的逻辑视图,进行控制视图层的跳转

当然更多的以后开发考虑的因素更多的是性能和优化,就不能单单仅限于此的了解

8.3 乱码问题解决

8.3.1 提交英文和中文名字

1.编写EncodingController控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
public class EncodingController {
    
    /* 在方法上使用@RequestMapping注解,设置请求映射的路径
       其真实访问路径为: http://localhost:8080/hello2/h1 */
    @RequestMapping("/hello2/h1")
    public String hello(String name,Model model){
        // 封装对象: 设置属性msg与其值, 进行渲染视图
        model.addAttribute("msg",name);
        // 页面跳转: 返回数据模型,交由视图解析器处理
        return "user/hello";
    }
    
}
2.编写form.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%-- 注意from.jsp页面要放在web文件夹下 --%>
    <form action="/hello2/h1" method="post">
        <input type="text" name="name"/>
        <input type="submit"/>
    </form>
</body>
</html>
3.测试结果
3-1 提交英文名字
  • 提交前

在这里插入图片描述

  • 提交后

在这里插入图片描述

3-2 提交中文名字
  • 提交前

在这里插入图片描述

  • 提交后

在这里插入图片描述

8.3.2 乱码问题分析

1.修改EncodingController控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
public class EncodingController {
    
    /* 在方法上使用@RequestMapping注解,设置请求映射的路径
       其真实访问路径为: http://localhost:8080/hello2/h1 */    
    @RequestMapping("/hello2/h1")
    public String hello(String name,Model model){
        // 封装对象: 设置属性msg与其值,进行渲染视图
        model.addAttribute("msg",name);
        // 在控制台打印name值
        System.out.println(name);
        // 页面跳转: 返回数据模型,交由视图解析器处理
        return "user/hello";
    }
    
}
2.测试结果

在这里插入图片描述

结果控制台输出结果前端一样,也是乱码

因此,我们可以考虑通过设置字符集来解决乱码问题

8.3.3 直接在控制类中设置字符集
1.修改EncodingController控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
public class EncodingController {
    
    /* 在方法上使用@RequestMapping注解,设置请求映射的路径 
       其真实访问路径:http://localhost:8080/hello2/h1 */
    @RequestMapping("/hello2/h1")
    public String hello2(String name, Model model, HttpServletRequest request) throws UnsupportedEncodingException {
        // 设置字符集为UTF-8
        request.setCharacterEncoding("UTF-8");
        // 封装对象: 设置属性msg与其值,进行渲染视图
        model.addAttribute("msg",name);
        System.out.println(name);
        //页面跳转: 返回数据模型,交由视图解析器处理
        return "user/hello";
    }
    
}
2.测试结果
2-1 传入中文名字
  • 提交前

在这里插入图片描述

  • 提交后

在这里插入图片描述

结果控制台输出的name值依旧是乱码!

结论

虽然在控制类中设置字符集不能解决乱码问题,但是我们可以手动去设置字符集过滤器

8.3.4 设置字符集过滤器

1.编写EncodingFilter过滤器
package com.kuang.filter;

import javax.servlet.*; // 注意: Filter接口是javax.servlet.*包下的
import java.io.IOException;

// 编写字符集过滤器
public class EncodingFilter implements Filter {
    
    // 初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }
    
    // 执行过滤
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 设置请求和相应的字符集为uft-8
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        // 设置完字符集后,记得让chain链继续执行
        chain.doFilter(request,response);
    }
    
    // 销毁
    public void destroy() {
        
    }
    
}
2.修改web.xml配置文件
  • 修改web.xml配置文件,引入过滤器配置映射关系
<!-- 手动设置过滤器 -->

<!-- 引入过滤器 -->
<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.kuang.filter.EncodingFilter</filter-class>
</filter>

<!-- 过滤器映射 -->
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>
3.测试结果

在这里插入图片描述

结果控制台输出的name值依旧还是乱码!

我们可以把尝试把控制类中的@RequestMapping注解修改为@GetMapping注解,测试是否能够解决乱码问题

4.修改EncodingController控制类
package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

// 使用@Controller注解, 将其注册为Controller层, 交由Spring的IOC容器统一管理
@Controller
public class EncodingController {
    
    /* 在方法上使用@RequestMapping注解,设置请求映射的路径  
       真实访问路径: http://localhost:8080/hello2/h1 */
    @GetMapping("/hello2/h1")
    public String hello3(String name, Model model) {
        // 封装对象: 设置属性msg与值,进行渲染视图
        model.addAttribute("msg",name);
        // 在控制台打印name值
        System.out.println(name);
        // 页面跳转:返回数据模型,让视图解析器处理
        return "user/hello";
    }
    
}
5.修改后测试结果
  • 提交前

    表单填写地址为:http://localhost:8080/form.jsp

在这里插入图片描述

  • 提交后

在这里插入图片描述

结果成功显示出中文名字

总结

使用@GetMapping注解(即请求方式为GET方式)后就不乱码了,而form表单的请求方式为POST,因此我们可以推断为认为GET方式不会造成乱码

6.修改web.xml配置文件
  • 过滤器映射中的url-pattern中的 / 修改为 /*
<!-- 手动设置过滤器 -->
<!-- 引入过滤器 -->
<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.kuang.filter.EncodingFilter</filter-class>
</filter>

<!-- 过滤器映射 -->
<filter-mapping>
    <filter-name>encoding</filter-name>
    <!-- 注意: 这里要使用/* -->
    <url-pattern>/*</url-pattern>
</filter-mapping>
7.再次修改测试结果

在这里插入图片描述

结果真正的解决了乱码问题,成功显示中文名字

8.3.5 使用Spring的字符集过滤器

1.修改web.xml配置文件
<!-- 配置SpringMVC的乱码过滤 -->
<filter>
    <filter-name>encoding</filter-name>
    <!-- 引入Spring的字符集过滤器 -->
    <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>encoding</filter-name>
    <!-- 注意:这里要使用/* -->
    <url-pattern>/*</url-pattern>
</filter-mapping>
2.测试结果
  • 提交前

    表单填写地址为:http://localhost:8080/form.jsp

在这里插入图片描述

  • 提交后

在这里插入图片描述

结果使用Spring自带的字符集过滤器,成功显示出中文名字


好了,今天的有关 使用Spring MVC进行简单的数据处理 的学习就到此结束啦。欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连。我们下期见,拜拜啦!


参考视频链接【狂神说Java】SpringMVC最新教程IDEA版通俗易懂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狂奔の蜗牛rz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值