一. 在web.xml文件下声明即注册过滤器,解决post请求乱码的问题
调用框架中characterEncodingFilter类
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--设置项目中使用的字符编码-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--强制请求对象(HttpServletRequest)使用encoding编码的值-->
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<!--强制应答对象(HttpServletResponse)使用encoding编码的值-->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<!--
/*:表示强制所有的请求先通过过滤器处理
-->
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二. characterEncodingFilter源码分析
- encoding,forceRequestEncoding,forceResponseEncoding是类characterEncodingFilter的三个属性(可查看源代码)
- characterEncodingFilter类的爷爷类是Filter接口的实现类。而Filter接口中的doFileter方法是在characterEncodingFilter类的父类OncePerRequestFilter中是实现的。
- OncePerRequestFilter在doFileter方法中调用了子类characterEncodingFilter中实现的的doFilterInternal抽象方法。
- doFilterInternal方法中说明了一切。
复习:
javaWeb基础中老杨讲的自定义过滤器
1. Filter接口实现类开发步骤:
1)创建一个Java类实现Filter接口
2)重写Filter接口中的doFilter()方法
3)在web.xml文件中将过滤器接口实现类注册到Http服务器
在E盘course文件夹下的JavaProjects文件夹下的在线考试系统中有例子