我试了几次一般get请求不会乱码,post请求如果不做处理,文字会乱码。
EncodeController.java
package com.zhang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class EncodeController {
@RequestMapping("/encode/test")
public String test(String name, Model model){
model.addAttribute("msg", "我的名字是:"+name);
return "encode";
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="/encode/test" method="post">
姓名:<input type="text" name="name">
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
encode.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
请求路径:localhost:8080/
点击提交按钮,跳转到encode.jsp,结果显示乱码
1.添加HttpServletRequest参数(无效)
package com.zhang.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
public class EncodeController {
@RequestMapping("/encode/test")
public String test(String name, Model model, HttpServletRequest req) throws UnsupportedEncodingException {
req.setCharacterEncoding("utf-8");
model.addAttribute("msg", "我的名字是:"+name);
return "encode";
}
}
没有用,依旧乱码
2.使用过滤器解决乱码(手动创建)
创建过滤器encodeFilter.java实现Filter接口
package com.zhang.filter;
import javax.servlet.*;
import java.io.IOException;
public class EncodeFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy() {
}
}
web.xml中配置过滤器(注意:这里的因为是通过index.jsp请求所以是/*
<url-pattern>/*</url-pattern>)
<?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">
<!--注册servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动顺序,数字越小启动越早-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有请求都会被SpringMVC拦截-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--过滤器-->
<filter>
<filter-name>encodeFilter</filter-name>
<filter-class>com.zhang.filter.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
请求路径:localhost:8080/
点击提交按钮,跳转到encode.jsp,结果正确显示,没有乱码
3.使用过滤器解决乱码(配置SpringMVC)
web.xml中配置过滤器(注意:这里的因为是通过index.jsp请求所以是/*
<url-pattern>/*</url-pattern>,极端情况下对get请求支持不好)
<?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">
<!--注册servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动顺序,数字越小启动越早-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有请求都会被SpringMVC拦截-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--过滤器-->
<filter>
<filter-name>encodeFilter</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>encodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
请求路径:localhost:8080/
点击提交按钮,跳转到encode.jsp,结果正确显示,没有乱码
4.修改tomcat的server.xml
(路径:\apache-tomcat-8.5.35\conf\server.xml)追加URIEncoding="UTF-8
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
追加后测试不好用/(ㄒoㄒ)/~~