作者:伴生约定_879 | 来源:互联网 | 2023-09-11 09:01
乱码问题(一般使用mvc自己配置的过滤器)
测试步骤:
1、我们可以在首页编写一个提交的表单
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<form action="/t" method="post">
<input type="text" name="username">
<input type="submit">
form>
body>
html>
2、后台编写对应的处理类
package com.xing.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class Encoding {
@PostMapping("/t")
提交到了/t请求
3、输入中文测试,发现乱码
不得不说,乱码问题是在我们开发中十分常见的问题,也是让我们程序猿比较头大的问题!
使用自己配置的过滤器
EncodingFilter
package com.xing.filter;
import javax.servlet.*;
import java.io.IOException;
web.xml
version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
还是乱码
将post改为get方法
form.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<form action="/t" method="get">
<input type="text" name="username">
<input type="submit">
form>
body>
html>
Encoding
package com.xing.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class Encoding {
@GetMapping("/t")
乱码解决
使用springmvc自配的过滤器
以前乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置
web.xml
version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
最终极解决乱码方法
但是我们发现 , 有些极端情况下,这个过滤器对get的支持不好 .
处理方法 :
1、修改tomcat配置文件 :设置编码!
D:\ruanjian\environment\apache-tomcat-9.0.62\conf\server.xml
<Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1"
cOnnectionTimeout="20000"
redirectPort="8443" />
2、自定义过滤器
package com.xing.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;