前言:
小伙伴们,大家好,我是狂奔の蜗牛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进行简单的数据处理 的学习就到此结束啦。欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连。我们下期见,拜拜啦!