您的位置:首页 > 其它

Listener和Filter监听器和过滤器

2018-03-11 23:21 375 查看
Listener
WEB中的监听器
WEB中的监听器的分类
一类:监听三个域对象的创建和销毁的监听器

二类:监听三个域对象的属性变更的监听器:(属性添加,移除,替换)

三类:监听HttpSession中的JavaBean的对象的状态改变的监听器

Filter

过滤器的生命周期

FilterConfig:过滤器的配置对象

FilterChain:过滤器链

Filter相关的配置

增强request中的getParameter方法

Listener

监听器:就是一个Java类,用来监听其他的Java的状态的变化。监听器用来监听其他的对象的变化的,主要应用在图形化界面中比较多(GUI,Android)。

监听器的术语

事件源:指的是被监听的对象.(汽车)

监听器:值的是监听的对象.(报警器)

事件源与监听器的绑定:就是在汽车上安装报警器.

事件:指的是事件源的改变.(踹汽车一脚)—主要的功能获得事件源对象.

WEB中的监听器

WEB中的监听器共有三类八种(监听三个域对象)

事件源:Servlet中的三个域对象.ServletContext,HttpSession,ServletRequest.

监听器:自定义类实现8个接口.

事件源和监听器的绑定:配置.

WEB中的监听器的分类

三类八种:

一类:监听三个域对象的创建和销毁的监听器:

ServletContextListener

HttpSessionListener

ServletRequestListener

二类:监听三个域对象的属性变更的监听器(属性添加,移除,替换):

ServletContextAttributeListener

HttpSessionAttributeListener

ServletRequestAttributeListener

三类:监听HttpSession中的JavaBean的状态改变(绑定,解除绑定,钝化,活化)

HttpSessionBindingListener

HttpSessionActivationListener

WEB中的监听器的使用

编写一个类实现监听器的接口:

通过配置文件配置监听器:

一类:监听三个域对象的创建和销毁的监听器

ServletContextListener:监听ServletContext对象的创建和销毁

void contextDestroyed(ServletContextEvent sce)

void contextInitialized(ServletContextEvent sce)

ServletContext对象的创建和销毁

创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext.

销毁:服务器关闭或者项目从服务器中移除的时候.

HttpSessionListener:监听HttpSession的创建和销毁的监听器

void sessionCreated(HttpSessionEvent se)

void sessionDestroyed(HttpSessionEvent se)

HttpSession何时创建和销毁的

创建:服务器端第一次调用getSession();

销毁:

非正常关闭服务器(正常关闭session会序列化):

session过期了默认30分钟.

手动调用session.invalidate();

HttpSession的问题

访问Servlet会不会创建Session : 不会

访问JSP会不会创建Session :会.

JSP内置的九个对象中有session,但是由page标签的session属性决定是否会自动创建session对象。默认值是true。

访问html会不会创建Session :不会

ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:

void requestDestroyed(ServletContextEvent sce)

void requesttInitialized(ServletContextEvent sce)

request对象何时创建和销毁

创建:客户端向服务器发送一次请求,服务器就会创建request对象.

销毁:服务器对这次请求作出响应后就会销毁request对象.

问题

访问一个Servlet会不会创建request对象:会

访问一个JSP会不会创建request对象:会

访问一个HTML会不会创建request对象:会

二类:监听三个域对象的属性变更的监听器:(属性添加,移除,替换)

ServletContextAttributeListener:监听ServletContext对象的属性变更:

HttpSessionAttributeListener:监听HttpSession中的属性变更:

ServletRequestAttributeListener:监听ServletRequest对象的属性变更的:

方法都是如下三个

void attributeAdded(ServletContextAttributeEvent scab)

void attributeRemoved(ServletContextAttributeEvent scab)

void attributeReplaced(ServletContextAttributeEvent scab)

三类:监听HttpSession中的JavaBean的对象的状态改变的监听器

第三类监听器很特殊,不需要进行配置的.作用在JavaBean上的监听器.JavaBean可以自己感知到在Session中的状态.

HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的

void valueBound(HttpSessionBindEvent event)

void valueUnbound(HttpSessionBindEvent event)

HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的.

void sessionDidActivate(HttpSessionBindEvent event); :–活化(反序列化)

void sessionWillPassivate(HttpSessionBindEvent event); :–钝化(序列化到硬盘)

优化Session

通过配置标签配置定时session序列化.

在tomcat/conf/context.xml中配置 :在tomcat中所有的虚拟主机和虚拟路径都会按照这个配置执行.

在tomcat/conf/Catalina/localhost/context.xml配置 :在tomcat中的localhost虚拟主机中的所有虚拟路径按照这个配置执行.

在当前的工程下的META-INF/context.xml配置 :当前这个工程按照配置执行.

Filter

过滤器Filter可以过滤从客户端向服务器发送的请求。

过滤器的生命周期

过滤器的创建和销毁:

创建:服务器启动的时候.

销毁:服务器关闭的时候.

FilterConfig:过滤器的配置对象

String getFilterName()

String getInitParameter(String name)

Enumeration getInitParameterNames()

ServletContext getServletContext()

FilterChain:过滤器链

过滤器链中的过滤器的执行的顺序与
<filter-mapping>
的配置顺序有关.

doFilter(request,response); – 放行,放行到下一个过滤器中,如果没有下一个过滤器,到达目标资源

Filter相关的配置

<url-pattern>
的配置

完全路径匹配 :以 / 开始 /demo4/demo1.jsp

目录匹配 :以 / 开始 以 * 结束. /* /demo1/*

扩展名匹配 :不能以 / 开始 以 * 开始. .do .action

<servlet-name>
的配置:根据Servlet的名称拦截Servlet.

<dispatcher>
的配置:

REQUEST :默认值.

FORWARD :转发.

INCLUDE :包含.

ERROR :错误页面跳转.(全局错误页面)

增强request中的getParameter方法
4000

继承 :控制这个类构造.

装饰者模式 :增强的类和被增强类实现相同的接口,增强的类中获得到被增强的类的引用.

缺点:接口中方法太多.可以在中间加上一个适配器类

动态代理 :被增强的类实现接口就可以.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息