servlet学习笔记四
Servlet
主要内容:
1)servlet初始化参数与上下文参数
2)过滤器
3)监听器
一、servlet初始化参数与上下文参数
1)servlet初始化参数
把某些变量放在web.xml配置,到时无需修改Servlet类
配置:
<servlet>
<init-param>
<param-name>userName</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
获取:
Servlet.getInitParameter(name);
或
ServletConfig.getInitParameter(name);
2)上下文参数
供所有Servlet共享的参数
配置:
<context-param>
<param-name>uploadDir</param-name>
<param-value>/files</param-value>
</context-param>
获取:
ServletContext.getInitParameter(name);
二、过滤器
功能:
在客户端的请求访问后台资源时,拦截这些请求
在服务器的响应发送给客户端之前,处理这些响应
应用:
1)修改request、response中的头部和体部信息
2)日志输出
3)字符编码设置
4)用户权限控制
编写:
1)实现javax.servlet.Filter接口
doFilter(ServletRequest,ServletResponse,FilterChain)
init(FilterConfig)
destory()
2)配置
<filter>
<filter-name>Filter命名</filter-name>
<filter-class>Filter类全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter命名</filter-name>
<!--待过滤的资源-->
<url-pattern>/*</url-pattern>
</filter-mapping>
多个拦截器执行顺序问题
由<filter-mapping>在web.xml里的定义顺序决定
当容器对Filter对象进行初始化时,容器调用Filter的init方法,并传入一个实现FilterConfig接口的对象。
FilterConfig接口包含方法:
public String getFilterName()
获得过滤器的名称信息。该名称是在部署描述符中说明的。
public String getInitParamter(String name)
获得过滤器的初始化字符串。初始化字符串也是在部署描述符中说明的。如果这个参数不存在,该方法将返回null。
public Enumeration getInitParamterNames()
获得一个枚举器,以遍历过滤器的所有初始化字符串。如果过滤器没有初始化参数,此方法返回一个空的枚举集合。
public ServletContext getServletContext()
获得过滤器所在Web应用的Servlet上下文对象引用
javax.servlet.FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。
过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器或者是将调用目标资源。
FilterChain接口仅定义一个方法:
public void doFilter(ServletRequest req, ServletResponse res)
该方法用于将请求/响应继续沿过滤器链向后传送给下一个过滤器。
如果调用该方法的过滤器是链中最后一个,那么目标资源被调用。
子元素<url-pattern>和<servlet-name>可以选择一个设置,<url-pattern>元素为过滤器关联的URL,<servlet-name>元素为过滤器对应的Servlet,当用户访问<url-pattern>元素上指定的资源或<servlet-name>元素指定的Servlet时,这个过滤器才会被容器调用;
最多可以有4个<dispatcher>元素,<dispatcher>元素指定过滤器对应的请求方式
有四种请求方式:REQUEST,INCLUDE,FORWARD和ERROR,默认是REQUEST。
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。除此之外,不会调用该过滤器。
INCLUDE:用户访问的目标资源是通过RequestDispatch的include()方法访问时,容器会调用过滤器。除此之外,不会调用该过滤器。
FORWARD:用户访问的目标资源是通过RequestDispatch的forward()方法访问时,容器会调用过滤器。除此之外,不会调用该过滤器。
ERROR:如果目标资源是通过声明式异常处理机制调用时,容器会调用过滤器
使用<filter-mapping>元素
使用<servlet-name>元素将过滤器连接到一个servlet中。
**********************************
使用<filter-mapping>元素
使用<servlet-name>元素将过滤器连接到一个servlet中。
三、监听器
事件处理机制:
事件
事件源
事件监听器
Servlet技术中已定义了一些事件,我们可以编写相关的事件监听器来对特定事件进行处理。
Servlet事件主要有三类:八大监听器
ServletContext事件
2种
HttpSession事件
4种
ServletRequest事件
2种
1)ServletContext的监听
可以监听ServletContext对象的创建和删除以及其属性的添加、删除和修改等操作。
通过实现两接口实现:
ServletContextListener:监听ServletContext对象的创建和销毁操作
ServletContextAttributeListener:监听属性的添加、删除和修改操作
2)HttpSession的监听
可以监听HttpSesson对象的创建、删除、状态情况及会话中属性的添加、删除和修改操作。
通过实现三个接口实现:
HttpSesionListener:监听会话对象的创建和销毁操作
HttpSessionAttributeListener:监听属性的相关操作
//这两种方法由session.setAttribute(String key,Object obj),Object对象实现
HttpSessionBindingListener:使对象在被绑定到会话或从会话中取消对它的绑定时得到通知。
HttpSessionActivationListener:session钝化过程监控
3)ServletRequest的监听
可以监听ServletRequest对象的创建和删除即属性的相关操作。
通过实现两接口实现:
ServletRequestListener:监听ServletRequest对象的创建和销毁操作
ServletRequestAttributeListener:监听属性的相关操作
4)web.xml的配置
<listener>
<listener-class>监听器类全限定名</listener-class>
</listener>
servlet学习笔记四的更多相关文章
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...
- python3.4学习笔记(四) 3.x和2.x的区别,持续更新
python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...
随机推荐
- 50.ISE布局布线错误
ERROR:Pack:1654 - The timing-driven placement phase encountered an error. 原因:时钟输出引脚直接接在I/O上了: 方法:在时钟 ...
- skill-判断浏览器
判断是ie浏览器还是火狐等标准浏览器 var ie=!+"\v1"; 因为ie浏览器不支持\v,也就是水平制表符,所以"\"符号会被忽略,前面的+号是把&quo ...
- 【BZOJ 2324】 [ZJOI2011]营救皮卡丘
Description 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的道路. 火箭队一共有N个据点,据点 ...
- PE格式的理解(待补充)
PE文件格式 一.基本结构 1.DOS头一般到节区头成为PE头部分,其下称为PE体.文件的内容一般可分为代码(.text).数据(.data).资源(.rsrc),分别保存. 2.PE头与各节区的尾部 ...
- 如何维护SSH安全
遇到两次,一次是公司服务器搭建好后,有人尝试ssh暴力破解,auth.log不停出现错误提示 还有买的米国vps,很荣幸地遭到来自波兰的ssh破解尝试 不得不重视ssh的安全 方法: 修改sshd_c ...
- (转)c语言学习volatile
原文网址:http://www.cnblogs.com/chio/archive/2007/11/24/970632.html 参考网址:http://www.embedu.org/Column/Co ...
- xml基础学习笔记05
Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档 * Xpatn.Xquery,是专门用来查询xml的语言 * 查询xml非常快 Xpatn.Xquery,是专门用来 ...
- CSS中盒子模型和position(一)
今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...
- javascript进行url转义方法比较escape、encodeURI和encodeURIComponent
escape会将除了 ASCII 字母.数字和特定的符号(* @ - _ + . /)以外的字符全部进行转义编码,因此如果想对URL编码,最好不要使用此方法,因为它会让你的URL变的不可读. 提示:E ...
- Sea.js入门
本文只是seajs的入门贴.要详细了解,请看GitHub主页上的相关链接,精彩不断,精选几篇: 前端模块化开发的价值 前端模块化开发的历史 ID和路径匹配原则 与RequireJS的异同 模块的加载启 ...