第9章_过滤器和监听器技术
过滤器与监听器
第10章过滤器和监听器主要内容✓过滤器✓监听器1.过滤器从过滤器这个名字上可以得知就是在源数据和目标数据之间起到过滤作用的中间组件。
例如家里用的纯净水过滤器,将自来水过滤为纯净水。
在JSP的Web应用程序中,过滤器是一种在服务端运行的Web组件程序,它可以截取客户端给服务器发的请求,也可以截取服务器给客户端的响应。
图1 过滤器在Web程序中的位置当Web容器获得一个对资源的请求时,Web容器判断是否存在过滤器和这个资源关联。
如果有存在关联就把请求交给过滤器去处理,在过滤器中可以对请求的内容做出改变,然后再将请求转交给被请求的资源。
当被请求的资源做出响应时,Web容器同样会将响应先转发给过滤器,在过滤器中可以对响应做出处理然后再将响应发送给客户端。
在这整个过程中客户端和目标资源是不知道过滤器的存在的。
在一个Web应用程序中可以配置多个过滤器,从而形成过滤器链。
在请求资源时,过滤器链中的过滤器依次对请求作出处理。
在接受到响应时再按照相反的顺序对响应作出处理。
图2 过滤器链需要注意的是在过滤器中不一定必须将请求发送给被请求资源,也可以直接给客户端做出响应。
开发一个过滤器必须实现javax.servlet.Filter接口:代码演示:FristFilter.javapublic class FirstFilter implements Filter {public void init(FilterConfig arg0) throws ServletException { ①}public void destroy() { ②}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { ③}}代码分析:①由Web容器来调用init方法完成过滤器的初始化工作。
30-《过滤器与监听器》
过滤器示例
页面打印页面响应时间和IP
示例代码请见:教学案例 示例代码请见:教学案例\Fileter
过滤器API
java.servlet.Filter接口 java.servlet.FilterConfig接口 java.servlet.FilterChain接口
过滤器API
java.servlet.ServletRequestWrapper类 java.servlet.ServletResponseWrapper类 java.servlet.http.ServletRequestWrapper 类 java.servlet.http.ServletResponseWrappe r类
中文处理
String(String[] bytes,String charset) 配置web服务器环境 Request.setCharacterEncoding() response. setCharacterEncoding()
监听器
监听器的目的是用来监听客户端 Servlet处理动作
示例代码请见:教学案例 示例代码请见:教学案例\ Listenter
作业布置与要求
使用过滤器完成对表单提交数据的字符转码
下次课内容
1 3 2 3 理解业务和功能的区别 理解接口、抽象类的使用 理解三层架构的原理
Filter接口
开发过滤器必须实现Filter接口。 接口方法void init(FilterConfig filterConfig)
初始化过滤器,FilterConfig对象可以得到 ServletContext对象,以及在部署描述符中 配置的过滤器参数。
Filter接口
开发过滤器必须实现Filter接口。 接口方法void doFilter(ServletRequest
javaweb中监听器、过滤器、拦截器以及AOP的先后顺序和理解
javaweb中监听器、过滤器、拦截器以及AOP的先后顺序和理解java web三⼤器:过滤器、拦截器、监听器(spring框架)spring、springMVC与springBoot的关系详见:⼀、启动顺序监听器---》过滤器---》拦截器案例理解:接到上级命令,要求对电话进去监听,过滤出恐怖分⼦,然后,拦截他们的恐怖袭击⾏动。
配置位置:监听器、过滤器⼀般配置在web.xml中,拦截器⼀般配置在springmvc.xml配置⽂件中⼆、概念监听器:Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener接⼝的服务器端程序,它也是随web应⽤的启动⽽启动,只初始化⼀次,随web应⽤的停⽌⽽销毁。
主要作⽤是:做⼀些初始化的内容添加⼯作、设置⼀些基本的内容、⽐如⼀些参数或者是⼀些固定的对象等等Filter过滤器:过滤器拦截web访问url地址。
严格意义上讲,filter只是适⽤于web中,依赖于Servlet容器,利⽤Java的回调机制进⾏实现。
Filter过滤器:和框架⽆关,可以控制最初的http请求,但是更细⼀点的类和⽅法控制不了。
过滤器可以拦截到⽅法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出像响应的过滤操作,⽐如设置字符编码,鉴权操作等⽐如:(不是login.do的地址请求,如果⽤户没有登陆都过滤掉),或者在传⼊servlet或者struts的action前统⼀设置字符集,或者去除掉⼀些⾮法字符。
主要为了减轻服务器负载,减少压⼒。
Interceptor拦截器:拦截器拦截以 .action结尾的url,拦截Action的访问。
Interfactor是基于Java的反射机制(APO思想)进⾏实现,不依赖Servlet容器。
拦截器可以在⽅法执⾏之前(preHandle)和⽅法执⾏之后(afterCompletion)进⾏操作,回调操作(postHandle),可以获取执⾏的⽅法的名称,请求(HttpServletRequest)Interceptor:可以控制请求的控制器和⽅法,但控制不了请求⽅法⾥的参数(只能获取参数的名称,不能获取到参数的值)(⽤于处理页⾯提交的请求响应并进⾏处理,例如做国际化,做主题更换,过滤等)。
过滤器与监听器
Servlet监听器
1、概念: Servlet监听器是当今Web应用开发的一个重要组成部分。Servlet监听器主 要目的是给 Web应用增加事件处理机制,以便更好地监视和控制Web应用的状 态变化,从而在后台调用相应处理程序 2、常见的Servlet监听器如下:
监听对象 ServletRequest HttpSession 监听接口 ServletRequestListener 监听事件 ServletRequestEvent
ServletContext
ServletContextListener
ServletContextAttributeListener
ServletContextEvent
ServletContextAttributeEvent
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
第五课
过滤器与监听器
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
回
提问
• • • Session与Request有哪些区别?
顾
Session被关闭的可能原因有哪些? Session的默认超时时间是多少,Session的最大空闲时间有哪两种 设置方式?
<filter-mapping> <filter-name>过滤器名</filter-name> <url-pattern>/文件名/*</url-pattern> </filter-mapping>
chap05-过滤器和监听器
当ServletContext对象中属性增加时调用该方 法
当ServletContext对象中属性被删除时调用该 方法 当ServletContext对象中属性值被改变时调用 该方法 Java Web 开发技术 第五章
5.2 监听器 监听器接口(续) HttpSession对象监听器接口
• HttpSessionListener是用来监听会话对象生命周期 的监听器接口 • HttpSessionAttributeListener是用来监听会话对象 属性改变的监听器接口 • HttpSessionBindingListener是用来监听会话对象的 对象绑定监听器接口 • HttpSessionActivationListener是用来监听会话对象 的对象迁移监听器接口
Java Web 开发技术 第五章
5.1 过滤器
过滤器开发步骤 (1)创建一个实现了javax.servlet.Filter接口的类 (2)重写类中的init(FilterConfig filterConfig)方法,该 方法中一般编写初始化Filter需要执行的代码。 (3)重写类中的方法doFilter(ServletRequest request,ServletResponse response,FilterChain chain),该方法中编写实现过滤操作的代码。 (4)重写类中的destroy()方法,大多数简单过滤器为此 方法提供一个空实现。 (5)针对被访问的目标Web组件(Servlet程序或者JSP 页面)注册过滤器,在部署描述文件web.xml中使用 <filter-apping>和<filter>元素对过滤器进行配置。
• (1)<filter>元素 • <filter>元素位于部署描述符文件web.xml的前部, 所有<filter-mapping>、<servlet>或<servletmapping>元素之前。
Filter(过滤器)简介和工作原理
2022-10-27 12:40Filter(过滤器)简介Filter 的基本功能是对Servlet 容器调用Servlet 的过程进行拦截,从而在Servlet 进行响应处理的先后实现一些特殊的功能。
在Servlet API 中定义了三个接口类来开供开辟人员编写Filter 程序:Filter, FilterChain, FilterConfigFilter 程序是一个实现了Filter 接口的Java 类,与Servlet 程序相似,它由Servlet 容器进行调用和执行Filter 程序需要在web.xml 文件中进行注册和设置它所能拦截的资源:Filter 程序可以拦截Jsp, Servlet, 静态图片文件和静态Filter 的基本工作原理当在web.xml 中注册了一个Filter 来对某个Servlet 程序进行拦截处理时,这个Filter 就成为了Servlet 容器与该Servlet 程序vlet 容器发送给Servlet 程序的请求和Servlet 程序回送给Servlet 容器的相应进行拦截,可以决定是否将请求继续传递给Se在一个web 应用程序中可以注册多个Filter 程序,每一个Filter 程序都可以对一个或者一组Servlet 程序进行拦截。
若有多个Filter 程序对某个Servlet 程序的访问过程进行拦截,当针对该Servlet 的访问请求到达时,web 容器将把这多个F 链中各个Filter 的拦截顺序与它们在应用程序的web.xml 中映射的顺序一致Filter 接口init(FilterConfig filterConfig)throws ServletException:在web 应用程序启动时,web 服务器将根据web.xml 文件中的配置信存在服务器的内存中。
Web 容器创建Filter 对象实例后,将即将调用该Filter 对象的init 方法。
监听器与过滤器
监听器与过滤器监听器简介什么是监听器1.能监听某个对象的状态变化的组件2.监听域对象的变化监听器相关的概念1.事件源:被监听的对象- request、session、servletContext2.监听器:监听事件源的对象- 8个监听器3.注册监听器:监听器与事件源相绑定4.响应行为:监听到事件源变化时,去做什么事情监听器划分1.三个监听域对象的创建与销毁ServletContextListenerbbbSessionListenerServletRequestListener2.三个监听域对象当中属性变化ServletContextAttributeListener bbbSessionAttributeListener ServletRequestAttributeListener域监听器ServletContext域监听器监听ServletContext域的创建与销毁的监听器ServletContextListenerServletContext域生命周期:服务器启动创建、服务器关闭销毁监听器的编写步骤:1.编写一个监听器类去实现监听器接口2.覆盖监听器的方法3.需要在web.xml中进行配置作用1.初始化的工作:初始化对象、初始化数据、加载数据库驱动、连接池的初始化2.加载一些初始化的配置文件3.任务调度bbbSessionListener监听bbbSession域的创建与销毁的监听器bbbSessionListenerbbbSession的生命周期:第一次调用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、chain2.在过滤器中,放行之后,才能访问到对应的资源3.中间的过滤可能有多个,在一个过滤器中,可以调用另外一个过滤器4.也有可能过滤器没有拦截所有资源,有些资源可以直接被访问filter的生命周期init方法当filter对象创建时调用当服务器启动时创建。
servlet过滤器和监听器
忽略此参数;最后一个参数为 FilterChain,该参数用来调
用过滤 器链中的下一个资源。FilterChain参数用于访问后续 过滤器
destroy():Servlet容器在销毁过滤器实例前调用该方法 ,这个方法中可以释放Servlet过滤器占用的资源。性质等同 与servlet的destory()方法。
doFilter(ServletRequest
reg,
ServletResponse
res,FilterChain chain):
用于进行过滤操作,该方法的第一个参数为
ServletRequest对象, 此对象给过滤器提供了对进入的信息( 包括表单数据、Cookie和
HTTP 请 求 头 ) 的 完 全 访 问 ; 第 二 个 参 数 为 ServletResponse,用于 响应使用ServletRequest对象访问的信 息,通常在简单的过滤器中
•Servlet过滤器
•filterConfig=null; •(3)创建JSP页面“online. •3.ServletRequest事件监听器
•redirectPort="8443" •Servlet监听器工作原理 •<title>拒绝访问</title>
•<Connector port="8080" protocol="HTTP/1. •HttpSessionListener用于监听HttpSession对象的改变,例如HttpSession对象的创建与销毁,HttpSessionActivationListener用 于监听HttpSession对象的状态,例如HttpSession对象是被激活还是被钝化。 •在方法中,若需要获取客户端请求相关的信息,则访问方法的第一个参数(HttpServletRequest类型),若需要发回给客户端响应 信息,则利用方法的第二个参数(HttpServletResponse类型)。 •HttpSessionBindingListener用于监听HttpSession对象的绑定状态,例如添加对象和移除对象。 •ServletContext事件监听器中的接口和方法如表所示: •欢迎访问吉林省三扬科技咨询有限
java 过滤器、监听器 拦截器 原理个人总结
过滤器创建一个Filter 只需两个步骤:(1)创建Filter 处理类:(2)在web.xml 文件中配置Filter 。
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。
在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中。
一、理解Struts2拦截器1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.2. 拦截器栈(Interceptor Stack)。
Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。
在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
二、实现Struts2拦截器原理Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器三、定义Struts2拦截器。
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别1. 过滤器(Filter)的作用和用途:过滤器用于截取请求和响应,可以在请求到达目标资源之前预处理请求,也可以在响应返回给客户端之前对响应进行处理。
过滤器可以对请求和响应进行统一的处理,例如验证用户的登录状态、设置字符编码、限制请求的访问等。
过滤器的主要特点:- 过滤器的配置和初始化是在web.xml文件中进行的。
-过滤器可以通过设置多个过滤器链来实现不同的目的。
-过滤器可以通过链式调用的方式实现多个过滤器的集成。
-过滤器可以修改请求的参数、头部信息或者重定向到其他资源。
2. 监听器(Listener)的作用和用途:监听器用于监听Servlet中发生的事件和动作,并作出相应的处理。
监听器可以监听到Web应用的生命周期事件(如应用的启动和关闭)、会话的创建和销毁事件、请求的到达和离开等。
通过监听Servlet的事件,可以在事件发生前、发生后或者发生中进行相关操作,用于处理这些事件。
监听器的主要特点:-监听器可以通过注解或者配置文件的方式进行配置和初始化。
-监听器可以监听多个事件,根据事件的类型进行不同的处理。
-监听器可以访问和修改请求和响应对象。
-监听器可以获取到应用的初始化参数、会话信息等。
区别:- 过滤器(Filter)主要用于拦截请求和响应,可以对其进行预处理和后处理,常用于权限验证、请求包装、字符编码设置和URL重定向等。
而监听器(Listener)主要用于监听特定的事件和动作,常用于记录日志、统计在线人数、初始化和销毁操作等。
- 过滤器是在Servlet调用之前进行处理,通过链式调用的方式实现多个过滤器的集成。
而监听器是在Servlet处理过程中监听特定事件的发生,对事件进行相应的处理。
-过滤器可以修改请求和响应对象,而监听器只能获取和监听这些对象。
-过滤器可以针对多个URL进行配置,而监听器是全局的,对整个应用进行监听。
2016年最新版JavaEE学科课程大纲 黑马程序员官网
2016年最新版JavaEE学科课程大纲黑马程序员官网2016年最新版JavaEE学科课程大纲一、JavaWeb部分第一阶段:JavaWEB 部分一之WEB前端技术1、Html了解HTML语言,HTML语言背景知识,掌握HTML 的整体结构、文件标签、排版标签、块标签、字体标签、列表标签、图形标签、超链接标签、表格标签、表单标签(form 标签、input标签、select标签等)、分区标签、头标签。
(1)CSSCSS介绍、CSS导入方式(内部样式表、内联样式表、外部样式表)、五大CSS选择器(ID选择器、类选择器、元素选择器、属性选择器、伪类等)、样式属性介绍。
(2)JavaScript基础JavaScript编程,JavaScript语法、数据类型、运算符、表达式、流程控制,JavaScript内部对象、数组、字符串、日期时间、数学函数、正则表达式,JavaScript函数、自定义函数、全局函数,BOM介绍、window 对象、location对象、history对象使用。
DHTML编程,理解DOM树,DOM对象,常用DOM对象的属性、方法和事件,编写事件处理程序、使用DOM操作HTML文档、遍历文档树上的节点、搜索文档中特定的元素、修改文档内容、往文档添加新内容、使用DOM操作XML文档。
(3)JQuery基础认识JQuery、选择器介绍、css选择器、jQuery选择器及其优势势、基本选择器、层次选择器、过滤选择器、表单选择器、选择器练习小案例等;JQuery操作DOM:DOM分类、查找元素/属性节点、创造元素/属性/文本节点、插入节点、删除节点、复制节点、替换节点、包裹节点、属性操作、样式操作、遍历节点、CSS-DOM操作;动画和事件:jQuery中的事件、加载DOM、事件绑定、合成事件、事件冒泡、事件对象的属性、移除按钮上注册的事件、模拟操作、JQuery中的动画。
(4)BootStrap响应式页面的的开发与设计,强大的栅格布局,内置的CSS类库,JS插件,快速布局商城页面。
chap05-过滤器和监听器
当ServletContext对象中属性增加时调用该方 法
当ServletContext对象中属性被删除时调用该 方法 当ServletContext对象中属性值被改变时调用 该方法 Java Web 开发技术 第五章
5.2 监听器 监听器接口(续) HttpSession对象监听器接口
• HttpSessionListener是用来监听会话对象生命周期 的监听器接口 • HttpSessionAttributeListener是用来监听会话对象 属性改变的监听器接口 • HttpSessionBindingListener是用来监听会话对象的 对象绑定监听器接口 • HttpSessionActivationListener是用来监听会话对象 的对象迁移监听器接口
Java Web 开发技术 第五章
5.1 过滤器 例程:使用过滤器过滤未登录用户或者登录失败 用户使其重新返回到登录页面登录。 程序为login.jsp、LoginServlet.java、 LoginFilter.java和index.jsp。 LoginFilter.java配置代码 LoginServlet.java配置代码
Java Web 开发技术 第五章
5.1 过滤器
过滤器配置 过滤器配置需要用到部署描述符文件web.xml 的两个元素<filter>和<filter-mapping>。 <filter>元素向Web应用注册一个过滤器对象, <filter-mapping>元素指定该过滤器对象所要过 滤Web组件的URL。
监听接口 方法 public void requestInitialized( ServletRequestEvent sce) public void requestDestroyed( ServletRequesttEvent sce) public void attributeAdded( ServletRequestAttributeEvent scab) ServletRequestAttributeL istener public void attributeRemoved( ServletRequestAttributeEvent scab) public void attributeReplaced( ServletRequestAttributeEvent scab) 说明 在ServletRequest对象生成时调用该方法 在ServletRequest对象即将结束销毁前调用该方 法 当ServletRequest对象中属性增加时调用该方法 当ServletRequest对象中属性被删除时调用该方 法 当ServletRequest对象中属性值被改变时调用该 方法 Java Web 开发技术 第五章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1.2 设计过滤器
2.过滤器的建立 在MyEclipse开发环境下创建过滤器是很方便的,其创建过程: • 创建实现Filter接口的类:在项目的src下,创建一个或多个过 滤器,并采用“包”结构的方式组织所有的过滤器。 • 实现init方法,读取过滤器的初始化函数。 • 将过滤行为放入doFilter()方法中:实现doFilter(),完成该过滤 器所需要过滤功能。 • 调用filterchain对象的doFilter方法:filterChain对象是过滤器接 口的doFilter方法的一个参数,调用Filterchain的doFilter方法时 ,下一个关联的过滤器将被调用,若没有其他与Servlet或JSP 相关联的过滤器,就调用Servlet或JSP本身。 • 将过滤器与特定的Servlet或JSP页面关联:使用部署配置文件 (web.xml)中的filter元素和filter-mapping元素。
9.1.2 设计过滤器
过滤器的设计需要实现Filter接口,并要根据处 理的功能需要,实现Filter接口中的3个方法: 1、public void init(FilterConfig filterConfig) throws ServletException 2、public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException 3、public void destroy()
9.1.2 设计过滤器
1. 过滤器基本结构 一个过滤器程序的基本结构如下:
package …; import …; public class Filter1 implements Filter{ //这里是给出Filter的一个实现类Filter1 public void destroy(){ //添加代码 } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException{ //添加代码 } public void init(FilterConfig filterConfig) throws ServletException{ //添加代码 } }
<filter> <filter-name> FilterName </filter-name> <filter-class>package.className </filter-class> <init-param> <param-name>ParamName1</param-name> <param-value>ParamValue1</param-value> </init-param> </filter> <filter-mapping> <filter-name>FilterName </filter-name> <url-pattern>/path</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FilterName </filter-name> <servlet-name>ServletName</servlet-name> </filter-mapping>
说明: (1)<init-param>标签(可有多个)用来设置过滤器的初始化参数, 在init(FilterConfig config)方法中通过config的 getInitParameter("ParamName")获得参数值。
(2)url-pattern用来设定过滤器的过滤地址,可带通配符“/*”, 表示任何地址都要经过该过滤器。
9.1.3 案例——基于过滤器的用户权限控制
【设计关键】 (1) 在过滤器中获取session对象(HttpSession): HttpServletRequest requ = (HttpServletRequest)request; HttpSession session = requ.getSession(true); (2) 过滤地址在web.xml中设置,假设是以/admin打头的所有地址。
要设计的组件: (1)登录检验过滤器:LoginFilter.java (2)在Web.xml中注册配置过滤器 (3)在WebRoot目录下,创建页面 (register.jsp)、以及登录处理页面(主要将请 求参数uaerName保存到session中的u_name属性 中。 (4)在WebRoot自下创建目录admin,并创建登录页 面(login.jsp)
3.过滤器的部署与运行 过滤器编译后的字节码文件必须部署到web目录 /WEB-INF/classes下才能起作用9-1】在一个Web应用程序中,有些JSP页面或Servlet必须是 注册用户登录后才有权访问。设计一个过滤器用于对用户是否 是登录用户进行检验。 【分析】判断一个用户是否登录的方法通常是:当用户登录成 功后,将用户名存放到session范围内 (session.setAttribute(“u_name”,username)), 判断时,从session中取出u_name属性 (session.getAttribute(“u_name”)),若取值不为空就是登录用户, 否则,就不是登录用户,可转入注册页面。 在每个需要登录用户才可以访问的页面或Servlet中加入登录 检验代码很冗余,可以通过编写过滤器统一解决,过滤地址设 为需要进行登录检验的那些Servlet或JSP的地址。
第2步:将过滤行为放入doFilter()方法中,按功能需要,实现 doFilter()方法。 第3步: 过滤器与相关联的servlet、JSP注册, 过滤器的配置信息要在web .xml注册。配置过滤器需要使用 <filter>和<filter-mapping>元素,并且要放在<app>与</app>之间。 其配置格式:
接口Filter的主要方法:
(2)doFilter()方法 方法原型: public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException{} 当请求地址和过滤地址匹配时将进行过滤操作,该方法 被执行。 第1个参数为ServletRequest对象,此对象给过滤器提供了 对请求信息(包括表单数据、Cookie和HTTP请求头)的完全 访问。 第2个参数为ServletResponse,用于响应请求。 第3个参数为FilterChain对象,使用该参数对象调用Servlet、 JSP页面或者过滤器链中的下一个过滤器。 调用方法为: public void doFilter(ServletRequest request, ServletResponse response)
(3)若对Servlet实现过滤,其配置方式是: <filter-mapping> <filter-name>FilterName </filter-name> <servlet-name>ServletName</servlet-name> </filter-mapping>
9.1.2 设计过滤器
第9章 过滤器和监听器技术
9.1 过滤器技术 9.2 监听器技术 本章小结
9.1 过滤器技术
过滤器是在服务器上运行的,且位于请求与响应 中间的起过滤功能的程序,其工作原理如图9-1所示。
浏览器
请求/request 响应/response
过滤器 1 过滤器 2 过滤器 3
JSP、Servlet、HTML 等 Web 容器
第1步:实现Filter的接口,建立过滤器 选中工程,右击工程src目录,选择“new”,再选择 “class”,显示如图9-2所示的对话框,并按提示输入有关的信 息:在包filter下新建过滤器类Filter_first.java。
点击图9-2中的“Finish”按钮后,就建立了过滤器程序的基本框 架。新建的Servlet的基本结构代码:
9.1 过滤器技术
在与过滤器相关联的Servlet或JSP运行前,过滤器 先执行。一个过滤器可以与一个或多个Servlet或JSP绑 定,可以检查访问这些资源的请求信息。检查请求信 息后,过滤器可以选择下一个动作: • 正常调用请求的资源(即Servlet或JSP). • 用修改后的请求信息调用请求资源。 • 调用请求的资源,修改请求响应,再将响应发送到 客户端。 • 禁止调用该资源,将请求重定向到其它的资源,或 返回一个特定的状态码,或产生替换的输出。
9.1 过滤器技术
本节主要内容:
9.1.1 9.1.2 9.1.3 9.1.4 9.1.5 过滤器编程接口 设计过滤器 案例——基于过滤器的用户权限控制 案例——基于过滤器的中文乱码解决 案例——禁止未授权的IP访问站点过滤器
9.1.1 过滤器编程接口
进行过滤器编程用到javax.servlet.jar中的一组接 口和类,表9-1只列出了与过滤器设计有关的三个重要 接口,而与Servlet编程有关的接口、类请参考第6章。 表9-1 Servlet编程接口 功能 类和接口
第9章 过滤器和监听器技术