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、过滤器与监听器的更多相关文章

  1. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  2. Java学习笔记之---Servlet

    Java学习笔记之---Servlet (一)如何实现Servlet 1.实现javax.servlet.Servlet接口: 2.继承javax.servlet.GenericServlet类: 3 ...

  3. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  4. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  5. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  6. servlet学习笔记四

    Servlet 主要内容: 1)servlet初始化参数与上下文参数 2)过滤器 3)监听器一.servlet初始化参数与上下文参数 1)servlet初始化参数 把某些变量放在web.xml配置,到 ...

  7. Django:学习笔记(7)——模型进阶

    Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...

  8. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  9. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  10. amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules

    amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules 一.总结 1.am:以 am 为命名空间 2.模块状态: {命名空间}-{模块名}-{状态描述} 3.子模块: {命名空间}- ...

随机推荐

  1. EasyARM i.mx28学习笔记——开箱试用总结

    0 前言     本月初(2014年8月)购买了周立功的EasyARM开发板,主控为EasyARM i.mx287.出于下面几个理由购买了该开发板.     [1]主要原因,有人约我一起学习一起使用该 ...

  2. 了解undefined、null、NaN的区别

    1.常规的解释,null是个对象,表示空值,undefined也是个对象,表示没有定义 2.详细分析 null 书上的解释(Javascript权威指南),Javascript的关键词null是一种特 ...

  3. 火狐HACK

     /*针对Firefox*/@-moz-document url-prefix() {    #nav{ width:200px; }} 

  4. C#_IComparable实例 - 对象ID进行排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Comp ...

  5. 如何将java代码生成一个bat文件

    java -cp classes;lib/* beans.FileUpload  列出所要带的参数,用空格分开Pause

  6. 在IOS中 NSRange类详解

    NSRange的定义 typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; NSRange是一个结构 ...

  7. mysql:慢查询日志slow_query_log

    1.慢查询日志:当查询超过一定的时间没有返回结果的时候,才会记录到慢查询日志中.默认不开启.采样的时候手工开启.可以帮助DBA找出执行慢的SQL语句 2.常用的参数详解: 注意:修改以下参数,需要重新 ...

  8. Tinymce4 中Ajax多次加载时,会出现菜单在第二次进入时,显示的下拉菜单在左上角

    在项目中,ajax多次导入tinymce的js包 参考了: Having issues with Multiple AJAX refresh and TinyMCE load page with ti ...

  9. android之模拟器访问外网设置

    一.确定adb可用 1.1 确认adb环境变量 1.2 命令行cmd 执行adb shell启动模拟器的命令行 二.DNS确认 2.1 确定DNS是否为电脑的DNS 2.2 修改DNS地址 三.效果图

  10. ajax 跨域的几种方式

    网络上跨域的文章大多一样,这里我写下,巩固下自己的知识,顺便做个记录 什么是跨域 这里简单拿百度的网址做个例子:http://www.baidu.com:80 (默认都是80端口.可省略) http ...