- 前言
- 一、直接在servlet中设置处理乱码
- 二、在过滤器中设置处理乱码
- 1.什么是过滤器
- 2.利用@WebFilter注解配置过滤器
前言
在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接口,
有了过滤器,我们就可以直接在过滤器中设置请求和响应的编码格式。
使用前首先先介绍@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配置文件配置过滤器的方法可自行学习)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)