Servlet学习笔记——第五天

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>
       ~~~

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值