Java Web应用开发案例|用过滤器解决HTTP请求导致的乱码问题

举报
TiAmoZhang 发表于 2023/08/01 14:35:39 2023/08/01
【摘要】 在Web应用开发中经常会遇到乱码问题,使用过滤器解决HTTP 请求导致的乱码问题,是十分有效的解决方案。

image.png

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。