概述
1.配置filter,必须在最开始(过滤器也有顺序)
2.获取filter节点下的参数
3.用获取到的参数去设置request和response编码值
4.在表单做post提交的时候是没有乱码问题的。但是如果表单做get提交就会有乱码。还有url带参数的请求都还有中文乱码问题。把Eclipse中的Servers项目中的server.xml中的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
增加一个属性:useBodyEncodingForURI=”true”
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"/>
5.在Tomcat中的server.xml文件中也配置(部署的时候),之后get请求就正常了
测试代码
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2_Course_003_Action</display-name>
<!-- 编码过滤器,必须在最开头,过滤器也有顺序 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>top.itcourse.charset.EncodingCharset</filter-class>
<init-param>
<!-- 编码值 -->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Struts2配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
server.xml
<!-- 增加useBodyEncodingForURI="true"属性,解决编码问题 -->
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
useBodyEncodingForURI="true"/>
EncodingCharset.java
package top.itcourse.charset;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*
* 设置编码值:
* 1.配置filter,必须在最开始(过滤器也有顺序)
* 2.获取filter节点下的参数
* 3.用获取到的参数去设置request和response编码值
* 4.在表单做post提交的时候是没有乱码问题的。但是如果表单做get提交就会有乱码。还有url带参数的请求都还有中文乱码问题。
* 4.1.把Eclipse中的Servers项目中的server.xml中的
* <Connector port="8080" protocol="HTTP/1.1"
* connectionTimeout="20000"
* redirectPort="8443"/>
* 增加一个属性:useBodyEncodingForURI="true"
* 4.2.在Tomcat中的server.xml文件中也配置(部署的时候)
* 4.3.之后get请求就正常了
*/
public class EncodingCharset implements Filter{
// filter配置参数
private FilterConfig filterConfig;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
// 1.获取filter中的编码值
String encoding = filterConfig.getInitParameter("encoding");
System.out.println("encoding: " + encoding);
// 2.设置编码值
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
// 3.开启链
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
}
效果
其它
关注下方公众号,回复:struts2_course.code
该文件是:Struts2_Course_009_SessionCountUserUTF8
欢迎加入交流群:451826376
更多信息:www.itcourse.top