使用Servlet中的过滤器Filter对所有的Servlet类(配置以.do为后缀)进行编码过滤,编码过滤生效是什么原因?

摘要:本文将介绍Servlet中的过滤器Filter对所有的Servlet类进行编码过滤,并讲解一些对Servlet类进行编码过滤,但是不生效时可能的原因。

1. 编码过滤器的编写:定义一个实现Filter接口的类,重写doFilter方法,在该doFilter方法设置请求和响应对象的编码,防止后续中的乱码情况。下面的例子中,我将讲解:编码过滤器EncodingFilter对Servlet的实现类SelectBookInfoServlet进行过滤。

// EncodingFilter类:过滤器

// 编码过滤器
// @WebFilter("*.do"):这里表示的是对以 .do 为后缀的文件进行过滤(编码过滤)

@WebFilter("*.do")
public class EncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        // 对请求的数据设置编码,以防乱码的情况
        request.setCharacterEncoding("UTF-8");

        // 对响应的数据设置编码,防止渲染的页面的数据发生乱码
        response.setContentType("text/html;charset=UTF-8");

        // 过滤放行
        filterChain.doFilter(request,response);
    }
}


// SelectBookInfoServlet类:被过滤的对象
// 注意: @WebServlet中的字符串内容一定要以 .do 为后缀,这样也可以识别Servlet资源,方便设置Servlet的编码进行过滤。

@WebServlet("/book/SelectBookInfoServlet.do")
public class SelectBookInfoServlet extends HttpServlet {

    private BookService bookService = new BookServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取参数
        String bid = req.getParameter("bid");

        // 查询数据库的数据
        Book bookByBid = bookService.findBookByBid(bid);
        System.out.println("查询数据库的数据:");
        System.out.println(bookByBid);
        // JSON化
        String value = JSON.toJSONString(bookByBid);

        // 响应数据
        PrintWriter pw = resp.getWriter();
        pw.write(value);
        pw.close();

    }
}

2.  Servlet实现类使用了过滤器,但是过滤器不生效的原因:(大部分原因是过滤器写错了)

1)请检查这个@WebFilter("*.do")注解是否正确?

过滤器Filter的实现类的注解一定是@WebFilter,不要写成了@WebServlet注解,@WebServlet是对控制器Servlet的实现类进行的注解。

2)请检查这个@WebFilter("*.do")注解中的需要过滤的文件是否正确?这里表示的是对 .do 为后缀的文件进行过滤。

 

 3)请检查你需要过滤的文件是否在你编写的过滤器的文件范围内?由于上述中我编写的过滤器是针对以.do为后缀的文件进行过滤的,在我需要过滤的文件中添加了.do为后缀的注解,所以我需要进行过滤的SelectBookInfoServlet类是在我编写的EncodingFilter类过滤的文件的范围之内的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值