第九篇——JDBC操作数据库之Filter过滤器(乱码)

Filter解决中文乱码问题

JavaWeb中提交中文经常会出现乱码,想必各位都遇到过吧,例如:


今天跟大家聊聊一种比较常用的方式——Filter过滤。
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!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值