过滤器四:案例

您所在的位置:网站首页 洗脸盆过滤器的作用与用途 过滤器四:案例

过滤器四:案例

2024-07-13 12:28| 来源: 网络整理| 查看: 265

字符集过滤器:解决web应用中的中文乱码问题。

(1)这是一个过滤器完整案例;(2)展示使用过滤器的方式解决中文乱码的问题;(3)可以发现,过滤器的作用不仅仅局限于“拦截,筛查”,过滤器也可以完成很多其他种类的功能,即过滤器可以在“拦截”一个请求(或响应)后,对这个请求(或响应)进行其他的处理后再予以放行。

目录

一:问题阐述

二:开始开发

1.编写CharacterEncodingFilter类,实现Filter接口,编写doFilter方法,作为字符集过滤器:

2.配置过滤器(和以前介绍的一样啦)

3.编写完成,开始测试:

一:问题阐述

对于中文乱码问题:在Servlet请求与响应中文乱码问题这篇博客中有详细介绍。

上面几种解决方案中,都需要按照一定的规则去配置或者编写代码;而万一代码写错了,都会出现中文乱码问题,所以,为了应对这种可能出错的问题,字符集过滤器应运而生。

字符集过滤器作用就是对所有请求进行前置处理,将请求与响应中的字符集进行一个统一的设置,如此一来,在使用Servlet开发的时候就不需要再写上图中2、3两句话,这样可以极大降低程序员出错的风险。

二:开始开发 1.编写CharacterEncodingFilter类,实现Filter接口,编写doFilter方法,作为字符集过滤器:

CharacterEncodingFilter:

          注:

              (1)因为这个过滤器是基于HTTP请求来进行的,所以在编写doFilter()方法体的时候,需要将ServletRequest这个顶层接口强制转成HttpServletRequest;

              (2)get请求的中文乱码,Tomcat8.x已经解决了,所以doFilter()方法中没有处理;doFilter()方法中只处理了post请求和响应的编码方式;

              (3)这个例子也印证了过滤器简介这篇博客中,“过滤器执行过程”部分中所说的:请求会走一遍过滤器,响应也会走一遍过滤器!

package com.imooc.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CharacterEncodingFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } /* * doFilter方法的参数是ServletRequest类型,而不是HttpServletRequest类型,需要强转一下; * so,为什么doFilter方法的参数为什么不设置成HttpServletRequest类型呐? */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 因为这个过滤器是基于HTTP请求来进行的,所以需要将ServletRequest转成HttpServletRequest HttpServletRequest req = (HttpServletRequest)request; req.setCharacterEncoding("UTF-8"); HttpServletResponse res = (HttpServletResponse)response; res.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } }

那么,为什么,doFilter方法中的参数不直接设置成HttpServletRequest呐?

当每一个从客户端向服务器发来的请求数据,由RequestFacade类进行解析;所以,只要使用的是Tomcat,见到HttpServletRequest接口的时候,就需要明白,底层是由RequestFacade类来进行的处理;如果使用的不是Tomcat,自然底层实现HttpServletRequest接口的就是其他类了;

ServletResponse接口和HttpServletResponse接口同理。

……………………………………………………

2.配置过滤器(和以前介绍的一样啦)

3.字符集过滤器编写完成,开始测试:

启动应用后,访问这个Servlet,浏览器显示结果:发现编写的字符集过滤器解决了中文乱码问题。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3