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

简介: 在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);
    }
目录
相关文章
|
1月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
352 130
|
2月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
420 2
|
3月前
|
Go 定位技术
Golang中设置HTTP请求代理的策略
在实际应用中,可能还需要处理代理服务器的连接稳定性、响应时间、以及错误处理等。因此,建议在使用代理时增加适当的错误重试机制,以确保网络请求的健壮性。此外,由于网络编程涉及的细节较多,彻底测试以确认代理配置符合预期的行为也是十分重要的。
175 8
|
2月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
2月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
3月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
194 0
|
3月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
303 0
|
JavaScript 前端开发
|
Web App开发 .NET 数据库连接