Chinese garbled problem of get request in Struts2

Struts2 provides a default filter. Generally, Chinese garbled characters will not appear in post requests, and Chinese garbled characters are prone to appear in get requests alone.
1. Configure the following code in strurs2.xml

<!-- constant 配置 -->
<!-- 用于设置默认的本地编码 -->
<constant name="struts.i18n.encoding" value="UTF-8" />

2. Write a filter class (SetCharacterEncodingFilter) for the post encoding, sample code:

package com.gx.filter;

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SetCharacterEncodingFilter implements Filter{
    
    
	private String encoding="utf-8";
	private boolean ignore=true; 
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
    
    
		String encoding= filterConfig.getInitParameter("encoding");
		String ignore= filterConfig.getInitParameter("ignore");
		if (encoding!=null && !"".equals(encoding)) {
    
    
			this.encoding=encoding;
		}
		if (ignore!=null) {
    
    
			try {
    
    
				this.ignore=Boolean.valueOf(ignore);
			} catch (Exception e) {
    
    
			}
		}
	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
			FilterChain chain) throws IOException, ServletException {
    
    
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		if (this.ignore && (request.getCharacterEncoding() == null)) {
    
    
			if (encoding!=null) {
    
    
				request.setCharacterEncoding(encoding);
				response.setCharacterEncoding(encoding);
			}
		}
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
    
    
		encoding=null;
	}
}

3. Then configure the character encoding filter in web.xml, before configuring the core filter in struts2, sample code:

<!-- 配置字符编码过滤器 -->
<filter>
	<filter-name>SetCharacterEncodingFilter</filter-name>
	<filter-class>com.gx.filter.SetCharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>utf-8</param-value>
	</init-param>
	<init-param>
		<param-name>ignore</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>

4. Finally, you need to modify the Tomcat server.xml file, find the following location, and add URIEncoding="UTF-8", as shown below:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
			   URIEncoding="UTF-8" />

Guess you like

Origin blog.csdn.net/weixin_44547592/article/details/106616199