利用过滤器(Filter)统一处理请与响应乱码

在web项目中,由于编码格式不统一可能导致乱码。本文介绍了两种处理乱码的方法:一是在每个servlet中设置编码,二是通过过滤器统一处理。过滤器可以拦截请求和响应,设置编码格式,减少代码冗余。示例展示了如何使用@WebFilter注解配置过滤器,拦截所有请求和响应,确保编码为UTF-8。
摘要由CSDN通过智能技术生成


前言

在web项目中,由于不同的浏览器和服务器对请求和响应处理的编码格式不一样,不统一编码格式会出现乱码现象,而许多编码格式对中文的处理不太好,所以在服务器接收请求和返回给浏览器响应的时候我们需要对请求和响应的编码格式进行统一的处理,设置为UTF-8。


一、直接在servlet中设置处理乱码

我们常见的使用方法就是在在servlet中直接加入以下代码

//设置请求和响应统一编码格式为UTF-8
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");

而当你服务器的servlet数量多起来了,你就需要在每一个servlet中加入上面两段代码,就会有代码冗余,这个时候我们就可以使用过滤器将这些共性的代码抽取出来。

二、在过滤器中设置处理乱码

1.什么是过滤器

引入一张图
在这里插入图片描述可以看到,过滤器是介于浏览器和web资源(servlet/jsp/html等)之间的,它的作用其实就是将你对指定资源的请求“过滤”一下,然后送到web资源,或者将你指定资源的响应“过滤”一下,然后送到浏览器,它不单单只有处理乱码的作用,也有很多其他用处,比如过滤敏感字和登陆验证过滤等。
实现过滤器需要写一个java类来实现Filter接口,
有了过滤器,我们就可以直接在过滤器中设置请求和响应的编码格式。

2.利用@WebFilter注解配置过滤器

使用前首先先介绍@WebFilter注解的常用的三种拦截形式:
(1)精确拦截匹配:比如/index.jsp,/myservlet1

//只会拦截向index.jsp发送的请求和返回的响应
@WebFilter(value="/index.jsp")

(2)后缀拦截匹配:比如*.jsp ,*.html

//会拦截所有发送向以.jsp为后缀的请求和返回的响应
@WebFilter(value="*.jsp")

(3)通配符拦截匹配:/* ,/abc/*

//会拦截所有发送向abc资源目录下的所有资源的请求和返回的响应
@WebFilter(value="/abc/*")

具体示例代码

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;

@WebFilter(value="/*")//拦截所有请求和响应
public class servletFilter implements Filter {


    @Override
   //初始化方法
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //统一处理请求和响应的乱码
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
//  或者 servletResponse.setContentType("text/html;charset=utf-8");

        //过滤完之后需要放行请求和响应
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    //销毁方法
    public void destroy() {

    }
}

这样,一个利用注解实现的简单过滤器就完成了。(本文只演示利用注解配置过滤器,利用xml配置文件配置过滤器的方法可自行学习)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值