传智播客java web 学习,过滤器

Filter是一种在Servlet容器中拦截请求和响应的技术,可有效解决中文乱码等问题。本文介绍Filter的工作原理,包括如何设置字符集编码及统计页面访问次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天学习了Filter,张老师举了很多例子表述其原理,理解起来非常简单,感觉Filter在web项目中是很有用的类,可以一次性解决中文乱码问题,拦截请求增加一些业务逻辑。
  Filter(过滤器),其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应的处理的前后实现一些特殊功能。可以设置请求的字符集编码防止中文乱码问题,统计静态html页面的访问次数等。
   Filter的基本工作原理, Filter是一个实现了特殊接口的(java.servlet.Filter)的java类,由Servlet容器进行调用和执行, Filter程序需要在web.xml文件中进行注册和设置它所能拦截的资源。它可以对Servlet容器发送给Servlet程序的请求和Servlet程序进行会送给Servlet容器的响应进行拦截,可以决定是否将请求继续传递给Servlet程序,以及对请求和响应消息是否进行修改。当Servlet容器调用某个Servlet程序时,如果发现已经注册了一个Filter程序来对该servlet进行拦截,那么Servlet容器将不再直接调用Servlet的service方法,而是调用 Filter的doFilter方法,再由doFilter方法决定是否去激活Servlet的service方法。
     Filter.dofilter方法也不能直接调用目标Servlet的service方法,而是调用FilterChain.dofilter方法来激活目标Servlet的service方法,FilterChain对象是通过Filter.doFilter方法传递进来的,只要在Filter的dofilter方法中调用FilterChain.doFilter方法的前后加入一下程序代码,就可以在Servlet进行响应处理的前后实现一些特殊功能。如果在Filter.doFilter方法中没有调用FilterChain.doFilter方法,目标Servlet的service方法将不会执行,这样就可以阻止一些访问请求。
     Filter接口,一个Filter类必须实现javax.Servlet.Filter接口,接口中定义了三个方法init,doFilter,destroy.
init方法 在Web容器创建Filter的实例对象后,将立即调用该Filter对象的init方法,init方法在Filter的生命期中仅执行一次,web容器在调用init方法时,会传递一个包含Filter的配置和运行环境信息的FilterConfig对象。
public void init (FilterConfig filterConfig) throws ServletException
可以在其中添加初始化代码。
    doFilter方法 当一个filter对象可以拦截的访问请求到达后,Servlet容器将调用该Filter对象的diFilter方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException
  可以在该方法中调用FilterChain.doFilter(request, response)方法,将请求传递给下一个Filter或目标Servlet程序。
    destroy方法 ,在web容器卸载Filter对象之前被调用,可以在该方法中完成与init方法想反的功能,释放被该Filter对象打开的资源,例如,可以关闭数据库和io流。
   FilterChain接口 用于定义一个代表Filter链的对象应该对外提供的方法,
  public void doFilter(ServletRequest request, ServletResponse response)throws IOException, ServletException
  用于通知web容器把请求交给Filter链中的下一个Filter去处理,如果当前调用此方法的Filter对象是Filter链的最后一个Filter,web容器将把请求交给目标Servlet程序去处理。
  
  FilterConfig接口 它对外提供了一些方法,以便在Filter程序中可以调用这些方法来获取ServletContent对象,以及获取在web.xml文件中为Filter设置初始化参数。Filter的init方法将FilterConfig对象传递给该Filter对象。这类似于Servlet的init方法和ServletConfig对象。
   1.getFilterName方法
      返回在web.xml文件中为Filter设置的友好名称。
   2.getServletContext方法 返回ServletConfig对象中说包装的ServletContext对象的引用。
    3.getInitParameter方法  返回在web.xml文件中为Filter设置初始化参数值。
   4,getInitParameterNames 返回一个Enumeration集合对象,包含在web.xml文件中为Filter设置初始化参数名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值