Java Web应用开发案例|用过滤器解决HTTP请求导致的乱码问题
【摘要】 在Web应用开发中经常会遇到乱码问题,使用过滤器解决HTTP 请求导致的乱码问题,是十分有效的解决方案。
01、案例:编码转换
(1) 自定义过滤器,实现Filter接口。
@WebFilter(urlPatterns="/*",
initParams={
@WebInitParam(name="encoding",value="utf-8")})
public class CharacterEncodingFilter implements Filter {
● urlPatterns="/*"表示对所有的HTTP请求进行过滤。
● 设置了初始化参数,名字为encoding,参数值可以按需要配置。
(2) 在初始化方法中读取参数。
public class CharacterEncodingFilter implements Filter {
private String encoding;
public void init(FilterConfig filterCondig)
throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}
}
(3) 在doFilter中过滤请求。
先把HTTP请求的参数转换成单字节码ISO-8859-1,然后用配置的encoding进行编码。此处只对GET请求进行了处理,POST请求一般不会乱码。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (encoding != null)
request.setCharacterEncoding(encoding);
HttpServletRequest r = (HttpServletRequest)request;
if(r.getMethod().equalsIgnoreCase("get")){
Enumeration<?> names = request.getParameterNames();
while (names.hasMoreElements()){
String[] values = request.getParameterValues(names.nextElement().toString());
for (int i = 0; i < values.length; ++i){
values[i] = new String(values[i].getBytes("ISO-8859-1"), encoding );
}
}
}
chain.doFilter(request, response);
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)