JavaWeb三大组件之过滤器及监听器

Filter过滤器

        1.什么是过滤器?

                Filter过滤器它是JavaWEB三大组件之一(Servlet应用程序、Listener监听器、Filter过滤器)

                Filter过滤器它是JavaEE的规范,也就是接口。

                Filter过滤器它的作用:拦截请求,过滤响应

                它会在一组资源(jsp,servlet,.css,.html等)的前面执行

        2.过滤器的使用场景

                a.防止未登录就进入界面

                b.控制应用编码

                c.过滤敏感词汇等场景

        3.如何编写过滤器?

                a.自定义类实现Filter接口,重写接口中的抽象方法(3个)

                b.在web.xml中进行配置

<filter>
    <filter-name>DemoFilter</filter-name>
    <filter-class>com.zking.filter.DemoFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>DemoFilter</filter-name>
    <url-pattern>/as.do</url-pattern>
</filter-mapping>

<url-pattern>/a.jsp</url-pattern>:你要拦截的内容是什么?
<url-pattern>/*.jsp</url-pattern>
<url-pattern>/*.do</url-pattern>
<url-pattern>/*</url-pattern>

        4.Filter接口的生命周期

void init(FilterConfig)
	* 创建之后,马上执行:Filter会在服务器启动时就创建
    void destory()
	* 销毁之前执行!在服务器关闭时销毁
    void doFilter(ServletRequest,ServletResponse,FilterChain)
	* 每次过滤器时都会执行

        5.Filter接口中的相关类介绍

                FilterConfig---->与ServletConfig相似

                        * 获取初始化参数:getInitParameter

                        * 获取过滤器名称:getFilterName

                        * 获取application:getServletContext

                FilterChain

                        * doFilter(ServletRequest,ServletResponse):放行请求

        6.多个过滤器的执行顺序

                过滤器的执行顺序和url-pattern标签匹配的精确程度无关,只和他们的filter-mapping标签在web.xml文件中的顺序有关,靠上的配置的先执行。

        7.过滤器的四种拦截方式(了解)

                REQUEST、FORWARD、INCLUDE、ERROR。

                REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;

                FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、<jsp:forward>标签都是转发访问;

                INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、<jsp:include>标签都是包含访问;

                ERROR:当目标资源在web.xml中配置为<error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

Listener监听器

         主要功能是负责监听Web的各种操作,当相关的事件触发后将产生事件,并对事件进行处理。

        监听器一共8中,常用监听器分为3种:

            application监听器

            session监听器

            request监听器

        1.application监听器  servlet---ServletContext

                  实现:ServletContextListener  (常用)

                  重写:

//容器启动时调用
  public void contextInitialized(ServletContextEvent event){
    
  }

  //容器消毁时调用
  public void contextDestroyed(ServletContextEvent event){
    
  }


  ServletContextEvent事件方法:
	.getServletContext()	//取得ServletContext对象,即上下文

  例示:
	event.getServletContext().getContextPath();

        2.Session监听器

                  实现:HttpSessionListener  (偶尔用)

                  重写:

 //session创建时调用
  public void sessionCreated(HttpSessionEvent event){

  }

  //session销毁时调用
  public void sessionDestroyed(HttpSessionEvent event){

  }


  HttpSessionEvent事件方法:
	.getSession()	//取得当前的session

	例示:
	event.getSession().getId();	//得到session的ID


  实现:HttpSessionAttributeListener (不用,性能差)
  重写:
  //增加属性时触发
  public void attributeAdded(HttpSessionBindingEvent event){
	
  }

  //删除属性时触发
  public void attributeRemoved(HttpSessionBindingEvent event){
	
  }

  //替换属性时触发
  public void attributeReplaced(HttpSessionBindingEvent event){
	
  }

     HttpSessionBindingEvent事件方法:
	.getSession()	//取得session
	.getName()	//取得属性的名称
	.getValue()	//取得属性的内容

	例示:
	event.getSession()	//取得session
	event.getName()		//取得属性的名称
	event.getValue()	//取得属性的内容

        3.request监听器

                 实现:ServletRequestListener (不用,性能差)

                 重写:

//请求开始时调用
  public requestInitialized(ServletRequestEvent event){

  }

  //请求结束时调用
  public requestDestroyed(ServletRequestEvent event){

  }


  ServletRequestEvent事件方法:
	.getServletRequest()	//取得ServletRequest对象
	.getServletContext()	//取得ServletContext对象

	例示:
	event.getServletRequest().getRemoteAddr();	//得到IP地址
	event.getServletContext().getContextPath();	//得到当前路径


        为什么说session监听器和request监听器一般都不用?

        答:以request监听器为例,如果采用request监听,那就意味着每次请求都要触发一次监听,这大大降低了程率的效率,因此很少用。

        调用监听器

web.xml
<listener>
   <listener-class>com.listener.Application</listener-class>
</listener>

        在tomcat执行时被加载。

          正常关闭时被销毁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值