Struts2中get请求中文乱码问题

Struts2提供了一个默认的过滤器,在post请求中一般不会出现中文乱码问题,单在get请求中极易出现中文乱码问题。
1.在strurs2.xml中配置以下代码

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

2.对post的编码写一个过滤类(SetCharacterEncodingFilter),示例代码:

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.接着在web.xml中配置字符编码过滤器,需要配置在struts2中的核心过滤器之前,示例代码:

<!-- 配置字符编码过滤器 -->
<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.最后需要修改Tomcat的server.xml文件,找到以下位置,添加URIEncoding=“UTF‐8”,如下所示:

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

猜你喜欢

转载自blog.csdn.net/weixin_44547592/article/details/106616199
今日推荐