Servlet的过滤器(Fileter)和Spring中的过滤器的实现方式
程序员文章站
2024-02-29 23:44:28
...
我们知道,当我们通过表单上传数据时,如果是中文就会出现乱码的问题,这个时候就可以引入过滤器,
过滤器有三个方法:
init,doFilter,destory。
init是初始化的时候 过滤器需要做什么。
doFilter是在访问控制单元前,过滤器需要做什么。每次访问web资源的时候都会通过该方法。
destory是关闭服务器之前,过滤器需要执行什么。
实现代码:
Servlet中的Filter过滤器应用:
首先我们在web.xml中配置filter过滤器:
<filter>
<filter-name>f</filter-name>
<!-- 我们是通过该路径 找到filter的访问路径的-->
<filter-class>com.bjsxt.filter.EncodingFilter</filter-class>
<init-param>
<!-- 这里我们可以随意的写,最后是通过init读取到的-->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>f</filter-name>
<!-- 所有的访问请求都会通过filter过滤器-->
<url-pattern>/*</url-pattern>
</filter-mapping>
filter包下的EncodingFilter类:
package com.bjsxt.filter;
import javax.servlet.*;
import java.io.IOException;
public class EncFilter implements Filter{
String uu;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获得初始化参数 UTF-8
uu = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//【A】到达目标资源之前的预处理
request.setCharacterEncoding(uu);
//【B】执行下一个过滤器或者目标资源
chain.doFilter(request,response);
//【C】离开服务器之前的处理操作
}
@Override
public void destroy() {
}
}
这样就可以接受中文参数并且不会乱码了!
使用了spring之后,spring会帮我们 解决中文乱码的问题,但是需要我们进行配置:
web.xml配置:
<filter>
<filter-name>fil</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!-- 这里必须要这样写,因为spring会通过这个encoding来找我们需要的处理格式-->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>fil</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果不清楚为什么init-param必须要写encoding,我们可以查看一下characterEncodingFilter这个源码:
他的底层也是和我们配置filter一样,但是他是固定的通过String encoding来获取utf-8的值的,所以在这里我们必须要这样写
这样便能够正确并且成功的使用spring中的中文处理的过滤器啦!
上一篇: Java中的接口与多态
推荐阅读
-
Servlet的过滤器(Fileter)和Spring中的过滤器的实现方式
-
Spring中配置和读取多个Properties文件的方式方法
-
spring cloud gateway 全局过滤器的实现
-
详谈springboot过滤器和拦截器的实现及区别
-
详解Spring Boot 中实现定时任务的两种方式
-
详谈springboot过滤器和拦截器的实现及区别
-
布隆过滤器(bloom filter)及php和redis实现布隆过滤器的方法
-
详解在Spring-Boot中实现通用Auth认证的几种方式
-
SpringBoot实现过滤器、拦截器与切片的实现和区别
-
spring cloud gateway 全局过滤器的实现