【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器
Servlet接口上,与生命周期及请求服务相关的三个方法是init()、service()与destory()方法。当Web容器加载Servlet类并实例化之后,会生成ServletConfig对象并调用init()方法,将ServletConfig对象当作参数传入。ServletConfig相当于Servlet在web.xml中的设置代表对象,可以利用它来取得Servlet初始参数。
GenericServlet同时实现了Servlet及ServletConfig。主要的目的就是将初始Servlet调用init()方法所传入的ServletConfig封装起来。
当希望编写代码在Servlet初始化时运行,要重新定义无参数的init()方法,而不是有ServletConfig参数的init()方法或构造器。
ServletConfig上还定义了getServletContext()方法,这可以取得ServletContext实例,这个对象代表了整个web应用程序,可以从这个对象取得ServletContext初始参数,或者设置、取得、移除ServletContext属性。
每个Web应用程序都会有一个相对应的ServletContext,针对应用程序初始化时所需用到的一些参数资料,可以在web.xml中设置应用程序初始参数,设置时使用<context-param>标签来定义。每一对初始参数要使用一个<context-param>来定义。
在整个web应用程序生命周期,Servlet所需共享的资料可以设置为ServletContext属性。由于ServletContext在Web应用程序存活周期都会一直存在,所以设置为ServletContext属性的资料,除非主动移除,否则也是一直存活于Web应用程序中。
监听器顾名思义,就是可监听某些事件的发生,然后进行一些想做的事情。在Servlet/JSP中,如果想要在ServletRequest、HttpSession与ServletContext对象创建、销毁时收到通知,则可以实现以下相对应的监听器: ServletRequestListener HttpSessionListener ServletContextListener
Servlet/JSP中可能设置属性的对象有ServletRequest、HttpSession与ServletContext、如果想在这些对象被设置、移除、替换属性时收到通知,则可以实现以下相对应的监听器: ServletRequestAttributeListener HttpSessionAttributeListener ServletContextAttributeListener
Servlet/JSP中如果某个对象即将加入HttpSession中成为属性,而你想要该对象在加入HttpSession、从HttpSession移除、HttpSession对象在JVM间迁移时收到通知,则可以在将成为属性的对象上,实现以下相对应的监听器: HttpSessionBingingListener HttpSessionActivationListener
在Servlet/JSP中要实现过滤器,必须实现Filter接口,并在web.xml中定义过滤器,从容器知道加载哪个过滤类。Filter接口有三个要实现的方法,init()、doFilter()与destory(),三个方法的作用与Servlet接口的init()、service()、destory()类似。
Filter接口的init()方法的参数是FilterConfig,FilterConfig为过滤器定义的代表对象,可以通过FilterConfig的getInitParameter()方法来取得初始参数。
当请求来到过滤器时,会调用Filter接口的doFilter()方法,doFilter()上除了ServletRequest与ServletResponse之外,还有一个FilterChain参数。如果调用了FIlterChain的doFilter()方法,就会运行下一个过滤器,如果没有下一个过滤器了,就调用请求目标Servlet的service方法。如果因为某个条件(例如用户没有通过验证)而不调用FilterChain的doFilter(),则就不会继续至目标Servlet,这时就是所谓的拦截请求。
在实现Filter接口时,不用理会这个Filter前后是否有其它的Filter,完全作为一个独立的元件进行设计。
对于容器产生的HttpServletRequest对象,无法直接修改某些信息,如请求参数值。可以继承HttpServletRequestWrapper类(父类ServletRequestWrapper),并编写想要重新定义的方法。对于HttpServletResponse对象,则可以继承HttpServletResponseWrapper类(父类ServletResponseWrapper)来对HttpServletResponse对象进行封装。
【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器的更多相关文章
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
- Java学习笔记之---Servlet
Java学习笔记之---Servlet (一)如何实现Servlet 1.实现javax.servlet.Servlet接口: 2.继承javax.servlet.GenericServlet类: 3 ...
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- servlet学习笔记四
Servlet 主要内容: 1)servlet初始化参数与上下文参数 2)过滤器 3)监听器一.servlet初始化参数与上下文参数 1)servlet初始化参数 把某些变量放在web.xml配置,到 ...
- Django:学习笔记(7)——模型进阶
Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules
amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules 一.总结 1.am:以 am 为命名空间 2.模块状态: {命名空间}-{模块名}-{状态描述} 3.子模块: {命名空间}- ...
随机推荐
- dotnetfx35.exe
http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- [C++]对象的销毁机制
销毁时会按照从后向前的顺序销毁,也就是说,越在后面定义的对象会越早销毁.其中的原因就是函数是在栈中保存的,因此,先定义的对象先压栈,所以在退栈时就会后销毁.而如果参数有多个的话,大多数编译器是从右开始 ...
- Java_swing控件实例
package ming; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event ...
- Models and the ServiceManager
Models and the ServiceManager In the previous chapter we've learned how to create a "Hello Worl ...
- maven系列之二maven项目的创建和maven项目的结构
maven系列之一简单介绍了maven的基本信息,安装和配置,大家对maven有一个大概的了解,但是在maven项目开发中远远不够,为了进一步了解maven,现在我们介绍maven项目的创建和mave ...
- Python基础:1.数据类型(列表)
提示:python版本为2.7,windows系统 1.列表(List) List,是一个有序的集合,可以添加.删除其中的元素. >>> colors = ['red', 'oran ...
- Linux:返回上一次目录 / 返回上次命令目录
返回上一次目录命令: cd - 该命令等同于cd $OLDPWD,关于这一点在bash的手册页(可使用命令man bash访问其手册页)中有介绍:An argument of - is equiva ...
- 关于Eclipse Modeling Framework 实现模型驱动开发,第一部分
======================================EMF第二篇文章========================= 用 Eclipse Modeling Framework ...
- C#下利用封包、拆包原理解决Socket粘包、半包问题(新手篇)
介于网络上充斥着大量的含糊其辞的Socket初级教程,扰乱着新手的学习方向,我来扼要的教一下新手应该怎么合理的处理Socket这个玩意儿. 一般来说,教你C#下Socket编程的老师,很少会教你如何解 ...