在修改端口处加上 URIEncoding="utf-8"
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8090" protocol="HTTP/1.1" redirectPort="8443"/>
用过滤器设置字符编码
1、创建一个字符编码过滤器:EncodingFilter
package com.web.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;
public class EncodingFilter implements Filter {
private String encoding;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 输入数据乱码解决方案:使用request对象获取浏览器提交数据前,先设置字符集
request.setCharacterEncoding(encoding);
// 输出数据乱码解决方案,使用request输出数据前,先设置字符集和内容类型
response.setCharacterEncoding(encoding);
response.setContentType("text/html");
// 放行
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 得到web.xml里面的param-value的值
String e = filterConfig.getInitParameter("encoding");
if (e != null && !"".equals(e)) {
encoding = e; //如果web.xml里面的param-value不为空,就用该字符编码
} else {
encoding = "utf-8"; //如果web.xml里面的param-value为空,就用utf-8编码
}
}
}
2、配置 web.xml 文件
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.web.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<!-- param-value设置初始化编码,可以为空 -->
<param-value></param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<!-- /*表示任何操作都要经过本过滤器 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
或者直接在 EncodingFilter 使用 @WebFilter 注解的方式
package com.gjb.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.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
/**
*
* @ClassName: EncodingFilter
* @Description: 字符编码过滤器
* @param:
*/
@WebFilter(urlPatterns = {"/*"}, initParams = {@WebInitParam(name = "encoding", value = "")})
public class EncodingFilter implements Filter {
private String encoding;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
response.setContentType("text/html");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String e = filterConfig.getInitParameter("encoding");
if (e != null && !"".equals(e)) {
encoding = e;
} else {
encoding = "utf-8";
}
}
}