Filter
 1Filter是什么:是过滤器简称
 2Filter有什么作用:在filter中可以得到代表用户请求和响应的request、response对象,因此在编程中可以使用Decorator(装饰器)模式对request、response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求。
  Example: 举一个不恰当的例子:比如当我们喜欢的人电话给我们,我们想手机提供不一样的铃声,
        让我来区分是谁打电话给我,这样我就不用拿出手机出来,才知道谁打电话给我
 3Filter运行原理解析
 如下图:
 

3Filter接口的介绍:
 ①FilterConfig接口:用户在配置filter时,可以使用<init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

  String getFilterName():得到filter的名称。
  String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  public ServletContext getServletContext():返回Servlet上下文对象的引用。

②FilterChian接口:在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。
          web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源(就是URL的资源)。

 3Filter怎样使用:
  使用步骤:

    1自定义Filter,并实现内置的Filter接口
    2复写doFilter()方法,在里面处理我们需要的逻辑
    3若还有其他过滤器就调用FilterChian的doFilter()方法
    4若返回页面就是用response
    5注册Filter,配置Filter拦截怎样的请求

<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.FlyPig.util.filter_session</filter-class>
</filter> <filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Listener
  1监听器是什么 :监听对象的变化或者监听事件的触发
  2有什么作用:当被监听的对象状态改变时,触发对应的方法
  3怎么用:
    ①声明监听器,(继承对应的监听器)
    ②重写监听方法,并实现自己需要的功能
    ③注册监听器
JavaWeb的监听器
1运行原理
  ①自定义监听器,并实现对应的监听器(ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener)
  ②实现了对应的监听器,就代表自定义的监听监听那个对象
  ③覆写对应的监听方法,并实现自己的功能
  ④在web.xml中注册监听器 

<listener>
<description>listenername/description>
<listener-class>class</listener-class>
</listener>
 Servlet监听器的分类:在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象
Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

①监听域对象自身的创建和销毁的事件监听器。
  I 监听ServletContext域对象的创建和销毁
    ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。(一般用于服务器启动时就静态化系统所需要的资源)
    实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。
        当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。
        当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。
    ServletContext域对象创建和销毁时机:
       创建:服务器启动针对每一个Web应用创建ServletContext
       销毁:服务器关闭前先关闭代表每一个web应用的ServletContext
  II 监听HttpSession域对象的创建和销毁
    HttpSessionListener 接口用于监听HttpSession对象的创建和销毁
      创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
      销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。
  III 监听ServletRequest域对象的创建和销毁
    ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁
      Request对象被创建时,监听器的requestInitialized(ServletRequestEvent sre)方法将会被调用
      Request对象被销毁时,监听器的requestDestroyed(ServletRequestEvent sre)方法将会被调用

    ServletRequest域对象创建和销毁时机:
      创建:用户每一次访问都会创建request对象
      销毁:当前访问结束,request对象就会销毁

②监听域对象中的属性的增加和删除的事件监听器。
  I ServletContextAttributeListener:监听ServletContext对象的属性变化
  II HttpSessionAttributeListener :监听session对象的属性变化
  III ServletRequestAttributeListener:监听Request对象的属性变化
   (I,II,III都是监听域对象中属性的变更的监听器,就是监听属性的增删改并且都有以下方法)
   1.1、attributeAdded方法
     当向被监听对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行响应,这个方法接收一个事件类型的参数,
    监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象各个域属性监听器中的完整语法定义为:
    1 public void attributeAdded(ServletContextAttributeEvent scae)
    2 public void attributeAdded(HttpSessionBindingEvent hsbe)
    3 public void attributeAdded(ServletRequestAttributeEvent srae)
  1.2、attributeRemoved 方法
      当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应
      各个域属性监听器中的完整语法定义为:
    1 public void attributeRemoved(ServletContextAttributeEvent scae)
    2 public void attributeRemoved (HttpSessionBindingEvent hsbe)
    3 public void attributeRemoved (ServletRequestAttributeEvent srae)
  1.3、attributeReplaced 方法
      当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应
      各个域属性监听器中的完整语法定义为:
    1 public void attributeReplaced(ServletContextAttributeEvent scae)
    2 public void attributeReplaced (HttpSessionBindingEvent hsbe)
    3 public void attributeReplaced (ServletRequestAttributeEvent srae)
notice:
  XXXEvent对象具有的方法
  XXXEvent.getName()---被修改的属性名
  XXXEvetn.getValue()--属性修改后的值
问题又来了,监听那个特定属性呢??还是监听全部属性呢??
当前是监听对象的全部属性啦
③监听绑定到HttpSession域中的某个对象的状态的事件监听器。
  HttpSessionBindingListener接口
   实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件
   当对象被绑定(setAttribute())到HttpSession对象中时,web服务器调用该对象的void valueBound(HttpSessionBindingEvent event)方法
   当对象从HttpSession对象中解除绑定(removeAttribute())时,web服务器调用该对象的void valueUnbound(HttpSessionBindingEvent event)方法

Servlet

Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

配置:

 <servlet>
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
<servlet-class>com.liferay.portal.servlet.FriendlyURLServlet</servlet-class>
<init-param>
<param-name>user</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>

Javaweb里面的filter,listener,servlet的更多相关文章

  1. springboot之filter/listener/servlet

    简介 SpringBoot可以简化开发流程,但是在其中如何使用传统的J2EE servlet/listener/filter呢 @Bean配置 在Configuration类中加入filter和ser ...

  2. java-web中的Filter&Listener

    Filter过滤器 当访问服务器资源的时候,过滤器可以将i气你个球拦截下来,完成一些特殊的功能 过滤器的作用: 一般用于完成通用的操作,如验证登陆,统一的编码处理,敏感字符过滤.就是打游戏骂人,会出现 ...

  3. Spring boot 注册Filter , Listener, Servlet

    1: ServletRegistrationBean   Servlet @Bean public ServletRegistrationBean myServlet(){ ServletRegist ...

  4. geotools解析SLD中的elsefilter为什么里面的filter无效

    原因是在org.geotools.renderer.lite.StreamingRenderer中的process函数: /** * @param rf * @param feature * @par ...

  5. spring mvc 的配置 及interceptor filter listener servlet 配置

    创建 三个类 分别实现 Filter  ServletContextListener  HttpServlet 在springboot 启动类中@bean加入 2 ,实现 ServletContext ...

  6. Filter and servlet

    filter与servlet的区别与联系呢? 1. Filter    实现javax.servlet.Filter接口,在web.xml中配置与标签指定使用哪个Filter实现类过滤哪些URL链接. ...

  7. Filter与Servlet的区别与联系

    Filter与Servlet的区别与联系 转自 http://blog.csdn.net/gaibian0823/article/details/51027495 在我们写代码时,在web.xml中总 ...

  8. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  9. 【转载并整理】filter、servlet、interceptor、listener区别

    参考文章:https://blog.csdn.net/u013087513/article/details/56835894 一.servlet servlet是一种运行服务器端的java应用程序,具 ...

随机推荐

  1. 饶有兴致的用javascript做了个贪食蛇游戏

    09年写的东西.一直藏在自己的记事本里头,现在开始整理写博客,所以直接搬过来 先上效果图 再添代码: <HTML> <HEAD> <TITLE>贪吃蛇 Snake ...

  2. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  3. web.xml文件中加载顺序的优先级

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  4. Android核心分析之二十二Android应用框架之Activity

    3 Activity设计框架 3.1 外特性空间的Activity    我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的 ...

  5. Hadoop HDFS文件系统通过java FileSystem 实现上传下载等

    package linlintest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException ...

  6. USACO Section 3.3: A Game

    第一次碰到博弈论题目,是很棘手,博弈论题目要考虑全局最优的解法,我第一次用了局部最优的,而且vector也没pop_front()操作.后来看了网上的用dp的方法解的. 博弈论的题目基本都得用dp法子 ...

  7. 大型web系统架构详解

    (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) 动态应用,是相对于网站静态内 ...

  8. poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)

    http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由 ...

  9. 51 nod 1006 最长公共子序列Lcs

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 参考博客 :http://blog.csdn.net/yysdsy ...

  10. selenium如何做兼容性测试呢

    selenium如何做兼容性测试呢. 现在selenium做自动化测试基本是web driver操作浏览器做操作,code中assert关键值,做判断. 具体执行2种 1.使用htmluint 来执行 ...