Servlet学习打卡
Servlet学习笔记—第五天
Servlet笔记 第五天
一. 复习
二. ServletContext
1. 从文件的角度理解ServletContext对象
1) tomcat启动时,会去读取每一个web应用的配置文件web.xml,并将读到的内容封装成ServletContext
对象保存在内存中, ServletContext对象就是web.xml文件在内存中的体现
2) 一个web应用只有一个web.xml文件,只对应一个ServletContext
3) ServletConfig对象: tomcat在读取配置文件过程中,封装一段关于servlet的描述信息(servlet标签)
4) 使用场景
2. 从作用域的角度理解ServletContext对象
1)ServletContext对象是一个作用域,可以存放命名属性
① 获取对象: ServletContext context = session.getServletContext();
② 存数据: context.setAttribute(“name”,value);
取数据: context.getAttribute(“name”) --> Object value
移除数据: context.removeAttribute(“name”);
2)servlet里的三大作用域
三. 过滤器 Filter
1. 冗余代码的解决方案
1) corejava 冗余代码 — 通过函数封装解决
2) servlet 冗余代码( 多次出现 , 通用基础功能与主要业务无关 )
① 设置request和response的编码方式
② 检查登陆标志的代码
③ 异常处理的代码
~~~java
try{
// 业务处理
}catch(Exception e){
String str = e.getMessage();
String mess = java.net.URLEncoder.encode(str,"GBK");
response.sendRedirect("/Telbook/ErroView?mess="+mess);
}
~~~
解决: 通过定义“过滤器”程序来解决servlet程序中出现的冗余代码
2. 特点:双向过滤
1)是一个web应用程序,主要对request和response进行预处理
2)过滤器会在请求到达servlet程序前执行代码,也会在response回到client之前运行代码
3)servlet里的冗余代码通常都定义在filter程序中
3. 自定义过滤器程序
1)写程序 — 实现指定的接口 Filter
2)写配置文件web.xml
<filter>
<filter-name>filter程序的简称</filter-name>
<filter-class>filter程序的全类名</filter-class>
</filter>
<filter-mapping>
<filter-name>filter程序的简称,与上面的定义保持一致</filter-name>
<url-pattern> 需要被当前程序预处理的servlet的网名 /*所有请求</url-pattern>
</filter-mapping>
3) 部署到tomcat上
4. 过滤器执行先后顺序
当请求需要通过多个过滤器时,会按照配置文件中声明的先后顺序通过
5. 过滤请求的方向
1)filter默认只过滤来自于client端的请求,不考虑tomcat内部forward过来的
2)通过配置可以使得过滤器全方向过滤
~~~xml
xxxxxxxxxxxxx xxxxxxxxxxxxx REQUEST(默认值),FORWARD,INCLUDE 注意: 标签里的值必须大写,默认值只在不提供标签时生效,如果提供了标签,按照定义方向进行过 滤,全方向过滤需要通过三个定义 ~~~
6. 关于过滤器url-pattern的实战技巧
1)如果需要过滤少量的servlet请求 — 通过定义多个url-pattern进行网名的罗列
2)如果需要过滤所有的client端请求 — /* ( servlet html jsp image css )
3)如果需要过滤多数请求(不是全部)— 通过为程序的网名添加前缀的方式解决
4)如果需要过滤全部servlet请求(强调 区别请求类型,不包括html和其他请求)— 为网名添加后缀
四. 监听器Listener
1. 监听事件模型【重点】
1) 组成 : 事件源(source) 事件对象(event) 监听器(listener)
2)关系: 当事件源产生特定的事件对象时,会触发监听器代码的运行
3) 监听器代码是由事件触发运行,不需要client请求
2. servlet里的监听器
1)生命周期监听器【重点】 ---- 监听三大作用域的创建和销毁
ServletContextListener — 监听servletContext对象的创建和销毁
HttpSessionListener — 监听session对象创建和销毁
ServletRequestListener — 监听request对象的创建和销毁
2)命名属性监听器 ---- 监听命名属性的添加,移除和修改动作
ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener
3. 自定义监听器
1) 写程序 — 实现指定接口
所有event都有一个通用方法 getSource()
2)写配置文件
~~~xml
<listener>
<listener-class> 全类名 </listener-class>
</listener>
~~~