Filter解决中文乱码问题
JavaWeb中提交中文经常会出现乱码,想必各位都遇到过吧,例如:
Filter就是起到一个过滤器的作用,当提交或者获取信息的时候,都会经过Filter,
然后Filter会将你传递的信息转换成你设置好的编码格式,从而避免一些中文乱码的情况。
一个过滤器必须实现javax.servlet.FilterConfig接口,该接口包含以下方法:
1.void init(FilterConfig filterConfig):这个方法在容器实例化过滤器时被调用,它主要用于做一些准备工作。
2.void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):这个方法用于处理请求和响应,FilterChain 对于正确的过滤器操作至关重要,通过调用FilterChain的doFilter()方法可重新返回到被拦截的程序中。
3.void destroy():该方法由容器在销毁过滤器实例之前调用。
步骤说明:
1、代码请参考——第八篇JDBC操作数据库之分页查询。
2、在第八篇基础上继续实现功能——第九篇JDBC操作数据库之Filter过滤器(乱码)。
一、CharSetFilter.java
1.位于com.Filter
2.实现Filter类
3.重写方法
package com.Filter;
import javax.servlet.*;
import java.io.IOException;
/**
* Created by Ray on 2018/3/12 0012.
**/
public class CharSetFilter implements Filter{
private FilterConfig config;
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("----过滤器初始化----");
config = filterConfig;
}
//拦截请求
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String charset = config.getInitParameter("charset");
if(charset == null){
charset = "UTF-8";
}
servletRequest.setCharacterEncoding(charset);
filterChain.doFilter(servletRequest,servletResponse);
}
//销毁
public void destroy() {
System.out.println("----过滤器销毁----");
}
}
二、web.xml配置文件
1.配置过滤器
<filter></filter>
2.映射过滤器
<filter-mapping></filter-mapping>
encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>BookList</servlet-name>
<servlet-class>com.control.BookList</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookList</servlet-name>
<url-pattern>/BookList</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookAdd</servlet-name>
<servlet-class>com.control.BookAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookAdd</servlet-name>
<url-pattern>/BookAdd</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookUpdate</servlet-name>
<servlet-class>com.control.BookUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookUpdate</servlet-name>
<url-pattern>/BookUpdate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDoUpdate</servlet-name>
<servlet-class>com.control.BookDoUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDoUpdate</servlet-name>
<url-pattern>/BookDoUpdate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDelete</servlet-name>
<servlet-class>com.control.BookDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDelete</servlet-name>
<url-pattern>/BookDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDoDelete</servlet-name>
<servlet-class>com.control.BookDoDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDoDelete</servlet-name>
<url-pattern>/BookDoDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookBatchAdd</servlet-name>
<servlet-class>com.control.BookBatchAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookBatchAdd</servlet-name>
<url-pattern>/BookBatchAdd</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookBatchDelete</servlet-name>
<servlet-class>com.control.BookBatchDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookBatchDelete</servlet-name>
<url-pattern>/BookBatchDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookFind</servlet-name>
<servlet-class>com.control.BookFind</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookFind</servlet-name>
<url-pattern>/BookFind</url-pattern>
</servlet-mapping>
<!--配置过滤器-->
<filter>
<filter-name>CharSetFilter</filter-name>
<filter-class>com.Filter.CharSetFilter</filter-class>
<init-param>
<!--用来指定一个具体的字符集-->
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!--映射过滤器-->
<filter-mapping>
<filter-name>CharSetFilter</filter-name>
<!--“/*”表示拦截所有的请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
三、页面效果
ok!