如何利用过滤器处理乱码?怎么解决中文乱码?

如何利用过滤器处理乱码?怎么解决中文乱码?

前言

在开发JavaWeb项目时,由于不同的浏览器和服务器对请求和响应处理的编码格式不同,从而导致了中文乱码的现象出现。同时许多的编码方式对中文的处理并不是特别好,所以一般我们需要对请求和响应做出统一的配置,即设置编码集为UTF-8。这篇文章将会告诉你出现乱码到底是怎样解决的。

方法一:直接在Servlet中配置

处理乱码时最直接的方式就是在Servlet中对请求和响应进行配置。具体配置如下:

//设置请求编码格式

request.setCharacterEncoding(“utf-8”);

//设置响应的编码格式

response.serCharacterEncoding(“utf-8”);

response.setContentType(“text/html;charset=utf-8”);

这种方式是最简单直接的方法,但是它也存在一个很大的问题。当业务量多起来时,需要为每个Servlet都加上这几行代码,造成了代码冗余。所以需要想办法把这几行代码抽离出来

方法二:使用过滤器处理乱码

在介绍这种方法之前先来了解一下什么是过滤器

1、什么是过滤器?

过滤器是介于浏览器和web资源之间的,它的作用是将浏览器发来的请求进行“过滤”后再发送给web资源,然后再把web资源返回的响应“过滤”后再返回给浏览器。它的用处也有很多,处理乱码只是其众多功能之一。

上一张图具体描述一下这个流程吧

如何利用过滤器处理乱码?怎么解决中文乱码?

2、如何利用过滤器处理乱码

使用过滤器处理乱码,首先得有一个过滤器的类

package com.demo.filter;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import java.io.IOException;

public class MyFilter 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() {

}

}

写好过滤器后有两种方式可以使过滤器发挥其功效,分别是在web.xml中配置标签和使用注解的方式

在web.xml中配置

<filter>

<!–

filter-class 标签用来配置过滤器的位置 ,格式为包名+类名

filter-name 标签相当于给过滤器起个别名

–>

<filter-name>myFilter</filter-name>

<filter-class>com.demo.filter.MyFilter</filter-class>

</filter>

<filter-mapping>

<!–

filter-name 标签内容要与上边配置的名字相同

url-pattern 标签要拦截的请求名 /* 表示拦截所有请求

–>

<filter-name>myFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

使用注解配置

可以使用注解的方式来配置过滤器,不过如果使用了注解就不要再使用web.xml的配置,二者选一种就好,具体方法为:

//在过滤器类上方加上注解@WebFilter ,然后依然通过/* 表示拦截所有请求

@WebFilter(“/*”)

public class MyFilter implements Filter {

…..

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 86345@qq.com 举报,一经查实,本站将立刻删除。
(0)
上一篇 2023-12-30 09:00:45
下一篇 2023-12-30 09:02:29

猜你喜欢

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注