监听器与过滤器

监听器与过滤器
监听器与过滤器

监听器与过滤器

监听器简介

什么是监听器

1.能监听某个对象的状态变化的组件

2.监听域对象的变化

监听器相关的概念

1.事件源:被监听的对象- request、session、servletContext

2.监听器:监听事件源的对象- 8个监听器

3.注册监听器:监听器与事件源相绑定

4.响应行为:监听到事件源变化时,去做什么事情

监听器划分

1.三个监听域对象的创建与销毁ServletContextListener

HttpSessionListener

ServletRequestListener

2.三个监听域对象当中属性变化ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

域监听器

ServletContext域监听器监听ServletContext域的创建与销毁的监听器ServletContextListenerServletContext域生命周期:服务器启动创建、服务器关闭销毁监听器的编写步骤:

1.编写一个监听器类去实现监听器接口

2.覆盖监听器的方法

3.需要在web.xml中进行配置

作用

1.初始化的工作:初始化对象、初始化数据、加载数据库驱动、连接池的初始化

2.加载一些初始化的配置文件

3.任务调度

HttpSessionListener

监听HttpSession域的创建与销毁的监听器HttpSessionListener

HttpSession的生命周期:第一次调用request.getSession时创建、服务器关闭session 过期或手动销毁

应用场景:记录访问人数

过滤器介绍

什么是过滤器

1.filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行

2.可以对目标资源访问前后进行逻辑处理

过滤器编写步骤

1.编写一个过滤器的类实现Filter接口

2.实现接口中尚未实现的方法(主要是DoFilter方法)

3.在web.xml中进行配置(主要是对哪些资源进行过滤)

示例:

web.xml中的配置

访问一个资源的时候,会被过滤器拦截

要在过滤器当中进行放行之后后,才能够访问到对应的servlet chain.doFilter(req,res)

过滤器的访问流程

1.在发送一个请求时,web容器会先到filter当中,创建三个参数:res、req、chain

2.在过滤器中,放行之后,才能访问到对应的资源

3.中间的过滤可能有多个,在一个过滤器中,可以调用另外一个过滤器

4.也有可能过滤器没有拦截所有资源,有些资源可以直接被访问

filter的生命周期

init方法

当filter对象创建时调用

当服务器启动时创建。因为有可能一个filter对应多个servlet,启动时先把filter准备好,访问资源时就可以进行过滤了。

参数filterconfig

1.可以获取当前filter对象的配置信息

2.和servletConfig差不多,获取名称、参数

3.获取servletContext对象

4.先有的ServletContext

dofitter方法

当匹配到mapping时调用fitter

参数:res、req、filterChain

filterChain:过滤器链对象,内部维护者各个filter的索引,并且知道所有filter的顺序,是根据mapping的顺序来执行的

destroy方法

当filter对象销毁时调用,关闭服务器时销毁对象,和servletContext的生命周期是一样的。

配置

mapping - 完全匹配、目录匹配、扩展名匹配

servlet_name

1.可以把路径直接指定某一个servlet

2.可以有多个servlet_name

3.开发中基本使用的都是mapping

dispatcher

配置请求的形式,不是请求方式,是页面跳转的形式

形式分类:

REQUEST 默认值,代表直接访问某个资源时执行filter

ERROR 发生错误时,进行跳转是执行filter

INCLUDE 包含资源时执行filter

FORWARD 转发时才执行filter

老九学堂会员社群出品作者:柳成萌

Activiti 监听器的配置使用

Activiti 监听器的配置使用 一)流程监听器的配置 此监听器的作用是记录流程的启动和结束事件日志,详细参考类 cn.bc.workflow.activiti.delegate.ProcessLogListener 用Activiti Designer打开流程图,点击空白处,在Properties的Listeners中如下配置流程的start和end两个事件: 二)任务监听器的配置 此监听器的作用是记录任务的创建、分派和完成的事件日志,详细参考类 cn.bc.workflow.activiti.delegate.TaskLogListener 用Activiti Designer打开流程图,点击要配置的任务节点,在Properties的Listeners中如下配置任务的事件监听:

如下是自动将任务分配到岗位或岗位内用户的任务监听器的配置: 详见类cn.bc.workflow.activiti.delegate.Assign2GroupUserListener,监听器在流程图中需要配置为"java class"类型,Fields参数中有两种配置方式:1)岗位名称+保存组织ID的流程变量名(全局变量),2)岗位编码。 监听器会根据配置方式先获取岗位,然后自动获取岗位内的用户信息,如果岗位内只有一个用户,就直接将任务分配给此用户,否则分配给岗位。

三)流向或网关监听器的配置 此监听器的作用是记录流向的执行事件日志,在平台中是可选的,视具体情况按需配置,详细参考类cn.bc.workflow.activiti.delegate.FlowLogListener 用Activiti Designer打开流程图,点击要配置的流向或网关,在Properties的Listeners 中类似任务监听器的方式进行配置即可:

过滤器和拦截器的区别

过滤器和拦截器的区别 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器:就是在你调用一个方法前,或者调用一个方法后,做一些业务逻辑的操作,例如打印字符串。 下面通过实例来看一下过滤器和拦截器的区别: 使用拦截器进行/admin 目录下jsp页面的过滤:

下面是我实现的拦截器: package com.test.news.util; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.test.news.action.AdminLoginAction; public class AccessInterceptor extends AbstractInterceptor { private static final long serialVersionUID = -4291195782860785705L; public String intercept(ActionInvocation actionInvocation) throws Exception { ActionContext actionContext = actionInvocation.getInvocationContext(); Map session = actionContext.getSession(); Object action = actionInvocation.getAction(); if (action instanceof AdminLoginAction) { return actionInvocation.invoke(); } //check session

安卓期末重点复习资料(EK-绝密版)

1、p4 开放手机联盟成员 ①电信运营商 ②半导体芯片商 ③手机硬件制造商 ④软件厂商 ⑤商品化公司 2、p9 Android具有自己的运行时和虚拟机,与java和.Net 运行时不同,Android运行时还可以管理进程的生命周期。Eclipse 3、p10 4、p12 在开始下载和安装Eclipse之前,应该首先确认开发主机上是否已经安装了Java 运行环境JRE 5、p26 DDMS ①Android系统中内置的调试工具 ②监视Android系统中进程、堆栈信息,查看logcat日志,实现端口转发服务和屏幕截图功能,模拟器电话呼叫和SMS短信,以及浏览Android模拟器

文件系统等 ③启动文件: /tools/ddms.bat (1)DDMS中的设备管理器 同时检控多个Android模拟器,显示每个模拟器中所以正在运行的进程 提供屏幕截图功能 (2)DDMS中的模拟器控制器 控制Android模拟器的网络速度和延迟,模拟语音和SMS短信通信 网络速率:GSM、HSCSD、PRS、EDGE、MTS、DPA和全速率 网络延迟:GPRS、EDGE、UMTS和无延迟 (3)DDMS中的模拟器控制器 电话呼入显示 SMS短信显示 (4)DDMS中的文件浏览器 上传、下载和删除Android内置存储器上的文件 显示文件和目录的名称、权限、建立时间等 (5)DDMS中的日志浏览器(LogCat) 浏览Android系统、Dalvik虚拟机或应用程序产生的日志信息,有助于快速定位应用程序产生的错误 6、p36 根目录包含四个子目录:src、assets、res和gen,一个库文件android.jar,以及两个工程文件Androidmanifest.xml和default.properties (1)src目录是源代码目录,所有允许用户修改的java文件和用户自己添加的java文件都保存在这个目录中 (2)gen目录是1.5版本新增的目录,用来保存ADT自动生成的java文件,例如R.java或AIDL文件 (3)assets目录用来存放原始格式的文件,例如音频文件、视频文件等二进制格

拦截器和过滤器的区别以及AOP概念

过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置 一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不 是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符 拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在 方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异 常的时候做业务逻辑的操作。 拦截器与过滤器的区别: 1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被 调用一次 执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤 通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数 据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。 面向切面编程(AOP是Aspect Oriented Program的首字母缩写),我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中 往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一 个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。 但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须 在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设 计让类与类之间无法联系,而不能将这些重复的代码统一起来。 也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后 再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入 代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是 面向切面的编程。 一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到 需要时再切入对象中去,从而改变其原有的行为。 这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP 则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,

ssh中自定义监听器,拦截器,过滤器

SSH中自定义监听器、拦截器、过滤器 1、自定义监听器 a)自定义监听器有哪些 监听器的定义是在web.xml中完成,其实做过ssh项目的人并不陌生监听器,主要是因为spring提供了监听器就是 org.springframework.web.context.ContextLoa derListener 如果我们想自己定义一个监听器来完成我们自己的特定功能怎么办呢,struts为我们提供了自定义servlet监听器,他们主要有 (1)ServletContextListener Servlet的上下文监听,它主要实现监听ServletContext的创建和删除。该接口提供了两种方法 1.contextInitialized(ServletContextEvent event); 通知正在收听的对象,应用程序 已经被加载和初始化。 2.contextDestroyed(ServletCotextEvent event); 通知正在收听的对象,应用程序 已经被载出,即关闭。 (2)ServletAttributeListener 主要实现监听ServletContext属性的增加,删除和修改。该接口提供了一下3个方法 1.attributeAdded(ServletContextAttributeEvent event); 当有对象加入 Application的范围时,通知正在收听的对象 2.attributeReplaced(ServletContextAttributeEvent event); 当在application的范围有 对象取代另一个对象的时,通知正在收听的对象 3.attributeRemoved(ServletContextAttributeEvent event); 当有对象从application 的范围移除时,通知正在收听的对象 (3)HttpSessionListener HTTP会话监听,该接口实现监听HTTP会话创建、销毁。该接口提供了一下两种方法 1.sessionCreated(HttpSessionEvent event); 通知正在收听的对象,session 已经被加载及初始化 2. sessionDestoryed(HttpSessionEvent event)l 通知正在收听的对象, session已经被载出(HttpSessionEvent类的主要方法是getSession(),可以使用该方法回传一个session对象)

javaWeb面试题(含答案)

1、jsp和servlet的区别、共同点、各自应用的围?? JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层. 2、cookie和session的作用、区别、应用围,session的工作原理??? Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。 Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的存资源。 3、jstl是什么?优点有哪些?? JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。优点有: 1、在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。 2、简化了JSP和WEB应用程序的开发。 3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet 代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。 4、允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE 开发工具出现。 4、j2ee的优越性主要表现在哪些方面?MVC模式 a、 J2EE基于JAVA 技术,与平台无关 b、 J2EE拥有开放标准,许多大型公司实现了对该规支持的应用服务器。如BEA ,IBM,ORACLE

structs2知识点

Struts2原理 上图来源于Struts2官方站点,是Struts 2 的整体结构。 Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。 (1)核心控制器:FilterDispatcher

FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts2框架处理。 Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。 Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。 Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。 (2)一个请求在Struts2框架中的处理大概分为以下几个步骤 1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。 2 .这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 .如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 .ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 .ActionProxy创建一个ActionInvocation的实例。 7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 .一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

Java+Swing+常用事件和监听器接口

Swing 常用事件和监听器接口 AncestorEvent AncestorListener ancestorAdded(AncestorEvent e) ancestorMoved(AncestorEvent e) ancestorRemoved(AncestorEvent e) CaretEvent 通知感兴趣的参与者事件 源中的文本插入符已经发 生更改 CaretListener caretUpdate(CareEvente) ChangeEvent 通知感兴趣的参与者事件 源中的状态已经发生更改 ChangeListener stateChanged(ChangeEvent e) HyperlinkEvent 通知感兴趣的参与者发生 了与超文本链接有关的事 情 HyperlinkListener hyperlinkUpdate(HyperlinkEvent e) InternalFrameEvent 以事件源的形式添加对J InternalFrame对象的支持的 A WTEvent InternalFrameListener internalFrameActivated(InternalFrameEvent e) internalFrameClosed(InternalFrameEvent e) internalFrameClosing(InternalFrameEvent e) internalFrameDeactived(InternalFrameEvent e) internalFrameDeiconified(InternalFrameEvent e) internalFrameIconified(InternalFrameEvent e) internalFrameOpened(InternalFrameEvent e) ListDataEvent 定义一个列表更改的事件ListDataListener contentsChanged(ListDataEvent e) intervalAdded(ListDataEvent e) intervalRemoved(ListDataEvent e)

监听器与过滤器

监听器与过滤器 监听器简介 什么是监听器 1.能监听某个对象的状态变化的组件 2.监听域对象的变化 监听器相关的概念 1.事件源:被监听的对象- request、session、servletContext 2.监听器:监听事件源的对象- 8个监听器 3.注册监听器:监听器与事件源相绑定 4.响应行为:监听到事件源变化时,去做什么事情 监听器划分 1.三个监听域对象的创建与销毁ServletContextListener HttpSessionListener ServletRequestListener 2.三个监听域对象当中属性变化ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

域监听器 ServletContext域监听器监听ServletContext域的创建与销毁的监听器ServletContextListenerServletContext域生命周期:服务器启动创建、服务器关闭销毁监听器的编写步骤: 1.编写一个监听器类去实现监听器接口 2.覆盖监听器的方法 3.需要在web.xml中进行配置 作用 1.初始化的工作:初始化对象、初始化数据、加载数据库驱动、连接池的初始化 2.加载一些初始化的配置文件 3.任务调度

HttpSessionListener 监听HttpSession域的创建与销毁的监听器HttpSessionListener HttpSession的生命周期:第一次调用request.getSession时创建、服务器关闭session 过期或手动销毁 应用场景:记录访问人数 过滤器介绍 什么是过滤器 1.filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行 2.可以对目标资源访问前后进行逻辑处理 过滤器编写步骤 1.编写一个过滤器的类实现Filter接口 2.实现接口中尚未实现的方法(主要是DoFilter方法)

三大框架原理

ooa(object oriented analysis)面向对象分析 ood(object oriented design)面向对象设计 Oop 面向对象编程 Spring javabean的生命周期 配置初始化调用销毁 Spring 1、spring原理 2、IoC概念:控制权由对象本身转向容器:由容器根据配置文件区创建实例并创建各个实例之间依赖关系。 spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中, 程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间 的藕合度。它的原理是在applicationContext.xml加入bean标记, 在bean标记中通过class属性说明具体类名、通过property标签说明 该类的属性名、通过constructor-args说明构造子的参数。其一切都是 返射,当通过applicationContext.getBean(―id名称‖)得到一个类实例时, 就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象, 唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。 正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring 的一个问题。 spring第二大作用就是aop,其机理来自于代理模式,代理模式 有三个角色分别是通用接口、代理、真实对象 代理、真实对象实现的是同一接口,将真实对象作为 代理的一个属性,向客户端公开的是代理,当客户端 调用代理的方法时,代理找到真实对象,调用真实对象 方法,在调用之前之后提供相关的服务,如事务、安全、 日志。其名词分别是代理、真实对象、装备、关切点、连接点。 2、动态代理:不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过 类实例化一个动态代理,在实例化动态代理时将真实对象 及装备注入到动态代理中,向客户端公开的是动态代理, 当客户端调用动态代理方法时,动态代理根据类的返射得

java web拦截器配置及原理

java web 过滤器 (2013-03-01 10:04:24)本人转载收藏 ServletFilter,Servlet过滤器: Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术可以对web服务器管理的所有web资源:Jsp, Servlet, 静态图片文件或静态html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。ServletAPI提供了一个Filter接口,实现这个接口的Servlet就是一个过虑器。过虑器在WEB应用访问流程中如下: 由图可见,只要我们编写了过滤器,可以对一切访问WEB应用的连接进行过滤。比如,用户访问权限、统一WEB编码… Filter是如何实现拦截的? 实现了Filter接口的Servlet是过滤器,因为Filter接口有一个 doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法,只要用户访问我们在web.xml中配置的映射目录,服务器便会调用过滤器的doFilter方法。我们在这里实现过虑功能代码,当我们调用 chain.doFilter(request, response);方法时,将请求反给服务器服务器再去调用相当的Servlet。如果我们不调用此方法,说明拒绝了用户的请求。 Filter开发入门: 在WEB应用中添加一个过滤器,有两步工作需要完成: 1.编写实现了Filter接口的Servlet——过滤器。 2.在web.xml中配置过滤器: (1). 标签添加器 (2). 注册过滤器的映射目录(过滤目录),与注册Servlet一样。 在实际WEB应用中,我们可能需要编写多个过虑器,比如:1.统一WEB编码的过滤器(过虑所有访问)2.用户访问权限管理。这样,用户的访问需要选经过过滤器1过滤然后再经过过滤器2过滤。doFilter中有一个FilterChain参数,这个参数是服务器根据web.xml中配置的过滤器,按照先后顺序生成的过滤器链。当我们在doFilter方法中调用chain.doFilter(request, response);方法时,服务器会查找过滤链中是否还有过滤器,如果有继续调用下一个过滤器,如果没有将调用相应的Servlet处理用户请求。 Filter接口的其他细节: 1.Filter的Init(FilterConfig filterConfig)方法: 与Servlet的Init方法一样,在创建时被调用,之后被保存在内存中直至服务器重启或关闭时Filter实例才会被销毁。与Servlet不同之处在于,服务器启动时就会实例化所有Filter,而Servlet中有当用户第一次访问它时才会被实例化。我们通过在web.xml使用对Filter配置的初始化参数,可以通过FilterConfig来获得。 FilterConfig的方法有: String getFilterName():得到filter的名称。

web.xml配置解析

一.监听器: 1.ContextLoaderListener 配置信息: org.springframework.web.context.ContextLoaderListener 配置解释: ContextLoaderListener的作用就是启动Web容器时,自动装ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,书上都没怎么详细说明。现在的方法就是查看它的API文档。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。看看它的API说明 第一段说明ContextLoader可以由ContextLoaderListener和ContextLoaderServlet 生成。如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader 这个类而且它实现了HttpServlet接口。 第二段,ContextLoader创建的是XmlWebApplicationContext这样一个类,它实现的接口 WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext-> BeanFactory,这样一来spring中的所有bean都由这个类来创建。 第三段,讲如何部署applicationContext的xml文件,如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml 里加入contextConfigLocation这个context参数: view plaincopy to clipboardprint? contextConfigLocation /WEB-INF/classes/applicationContext-*.xml

过滤器与拦截器的区别

过滤器与拦截器的区别 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符 拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。 拦截器与过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起 作用。 4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器 初始化时被调用一次 执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。 面向切面编程(AOP是Aspect Oriented Program的首字母缩写),我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。 但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。

struts2面试题(自己总结)

Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。

实验五、过滤器与监听器

实验五:过滤器与监听器 一、实验目的 1.掌握过滤器的创建与配置方法; 2.掌握监听器的创建与配置方法; 二、实验内容 2.1 创建Web项目 1. 打开MyEclipse,创建一个Web Project,命名为ServletTest。 2.1 SecurityFilter 详细过程见securityFilter.rmvb 1.过滤器SecurityFilter的代码如下: package filters; import java.io.IOException; import java.io.PrintWriter; 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; public class SecurityFilter implements Filter { private FilterConfig filterConfig; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; // 获得用户输入的密码 String pwdInput = httpRequest.getParameter("password"); // 获得filter配置参数中的rightpass的值 String rightPwd = filterConfig.getInitParameter("rightpass"); if (!rightPwd.equals(pwdInput)) {

java核心技术试题

下列能自动为上下文中定义的所有的Bean生成代理的类为:() A. ProxyFactoryBean B. BeanNameAutoProxyCreator C. DefaultAdvisorAutoProxyCreator 若Hibernate的Session出现了Spring中的HibernateTemplate中没有的方法,则:( ) A. 无法使用Spring的HibernateTemplate了 B. 可以使用HibernateTemplate的回调方法 以下程序的打印结果是什么:( ) 1) tx = session.beginTransaction(); 2) Customer c1=(Customer)session.load(Customer.class,new Long(1)); 3) Customer c2=(Customer)session.load(Customer.class,new Long(1)); 4) System.out.println(c1==c2); 5) https://www.360docs.net/doc/23410465.html,mit(); 6) session.close(); A. 运行出错,抛出异常 B. 打印false C. 打印true 以下程序代码对Customer的name属性修改了两次 1) tx = session.beginTransaction(); 2) Customer customer=(Customer)session.load(Customer.class,new Long(1)); 3) customer.setName("Jack"); 4) customer.setName("Mike"); 5) https://www.360docs.net/doc/23410465.html,mit(); 执行以上程序,Hibernate需要向数据库提交几条update语句:( ) A.0 B. 1 C. 2 D. 3 以下哪一种检索策略利用了外连结查询:( ) A. 立即检索 B. 延迟检索 C. 迫切左外连结检索 假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况:( ) 1) Session session=sessionFactory.openSession(); 2) tx = session.beginTransaction(); 3) Customer customer=(Customer)session.get(Customer.class,new Long(1)); 4) https://www.360docs.net/doc/23410465.html,mit(); 5) session.close(); 6) Iterator orderIterator=customer.getOrders().iterator(); A. 编译出错 B. 编译通过,并正常运行 C. 编译通过,但运行时抛出异常 如果让数据库中的表与POJO对应,我们必须通过:( )映射 A. *.class B. *.xml C. *.hbm.xml; D. *.java 我们在实用Set方式映射一对多单向关联时,下列那句话是正确的:( )

JSP中的Filter拦截器和Listener监听器

JSP中的Filter过滤器和Listener监听器 1. JSP中的过滤器 1.1 什么是过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet 或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择: (1)以常规的方式调用资源(即,调用servlet或JSP页面)。 (2)利用修改过的请求信息调用资源。 (3)调用资源,但在发送响应到客户机前对其进行修改。 (4)阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。 1.2 过滤器的基本原理 过滤器可以对客户的请求进行处理,处理完成后,它会交给下一个过滤器处理。这样,客户的请求在“过滤器链”里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改业务数据”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话查看该用户是否有修改权限;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。 1.3 过滤器的使用 开发Servlet过滤器的步骤如下:(1)编写实现Filter接口的类;(2)在web.xml中配置Filter。 1.3.1 实现Filter接口类 Filter接口定义了以下方法: 成员描述 destory() 由Web容器调用,初始化此Filter。 init(FilterConfig filterConfig) 由Web容器调用,初始化此Filter。 doFilter(ServletRequest request, 具体过滤处理代码,其中FilterChain参数非常重要,允许通ServletResponse response,FilterChain chain) 过当前过滤器时须要调用FilterChain.doFilter() 下面示例实现一个权限过滤器,若用户尚未登录(Session中没有保存用户信息),将回到登录页面;若已经登录则继续该请求。 public class SecurityFilter implements Filter {

相关文档
最新文档