第十七天:听课笔记

1.Servlet监听器
J2SE中的事件监听

f.addWindowListener(new WindowListener()        // WindowAdapter
{
 XXX(Event event){
  f = event.getSource();
  f.YYY                           //具体的动作,这些是事件源调用的
 }
});

事件源调用监听器中XXX方法,将事件封装成对象传入这个方法中

事件监听器是由事件源暴露的接口

2.对三个域监听
ServletContext
HttpSession
ServletRequest

3.Servlet监听器的注册由web容器完成

4.ServletContext域对象创建和销毁
ServletContextListener

<listener>
 <listener-class>包.类名</listener-class>
</listener>

ServletContext:
在Tomcat启动时,有多少个web应用就创建多少个ServletContext
服务器关闭前,先关闭代表每个web应用的ServletContext
Sprint容器,ServletContext

5.HttpSession:
Session是通过Cookie来实现的,我给你打一个id,通过Cookie传递过去,
你再来的时候就通过Cookie把id带过来,我就知道你是谁了

禁用Cookie URL重写 ---> 
浏览器访问服务器 服务器创建一个id , 浏览器访问服务器肯定是要访问一个页面
服务器就在页面的超链接<a href="XXX?jssessionid=...">新闻</a>

response.encodeRedirectURL
response.encodeURL

如果Cookie禁用了,别人访问你,每访问页面就创建一个session,对服务器的压力大
因此要URL重写

巴巴运动网:
它是通过Cookie,而不是Session,Session耗服务器资源
要是Cookie禁用,用URL重写

JSP 禁用Session
JSP Session内置对象,一打开JSP就创建了Session对象,
Session失效,XXX时间内用户没有使用

Servlet的话 要request.getSession才会创建Session对象

6.ServletRequest域:
创建:用户每一次访问,都会创建一个request
销毁:当前访问结束

7.案例:统计当前在线人数列表
计数器思想,将计数器放入到ServletContext
有event-->getSession--->getServletContext
计数器加一:判断是否有,有则加一,无则创建为零

定时器
java.util.Timer
schedule(TimerTask, long, long)
任务,延时多久,每多久

TimerTask run() abstract 自己写的类继承它,run 方法中写具体的代码

new TimeTask 的时候传入List<HttpSession>

服务器一启动就创建定时器

8.网站后台 无人化  通过定时器

9.监听三个域对象属性变化
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener

增加 删除   替换
add  remove replace

打印一句话,和Head First remove不一样,敲、想

HttpSessionBindingEvent getName getValue

10.感知Session绑定的事件监听器
绑定到
解除绑定
随Session对象持久化到一个存储设备
随Session对象从一个存储设备中恢复

我不想监听在Session中的所有对象
我只想监听特定的某个对象,我想监听谁,谁就实现那个接口

HttpSessionBindingListener:    

valueBound
valueUnbound

不用在web.xml中注册
它加到Session相当于注册了

监听对象自己保存到Session中,或从 Session中移出


11.Session长久没活动
服务器为了缓解压力,它就让它失效,把它保存到硬盘中

HttpSessionActivationListener
钝化:内存---->硬盘
活化:硬盘---->内存

XXX     web应用
WebRoot web应用的根目录
   META-INF  -->  context.xml 配置开关
  
对象持久化:这个对象要实现Serializable

12.案例:显示在线用户列表,踢人


13.回顾:Servlet
Servlet
 request 用request对象封装请求信息
   要想得到客户端传递过来的信息,通过request
  如:上传文件,session, 参数
  多数是get方法, set()域
  乱码:乱码的原因 form 查看编码 ---> ISO8859-1 --->编码 解码
        request.setCharacterEncoidng 只对消息头 post
 response 用response对象封装响应信息
  输出数据
  乱码:这两句都要写
        response.setCharacterEncoding  //通过UTF-8写出去
        response.setContentType      //告诉浏览器以UTF-8方式打开
     ServletConfig
 ServletContext
  getRealPath
  三种方式:
   a.FileOutputStream 绝对路径
  b.放到web应用 getRealPath
  c.放到classes 反射
 HttpSession
  session是如何设计,以至于它能做到位一个用户的多次请求服务(被一个用户的多次请求所共享)Cookie
 Cookie          
 文件上传
  DiskFileFactory ServletFileUpload FileItem 上传文件的处理技巧:(保存安全,打散,唯一)

Filter
 客户端找服务器要一个文件,在服务器找文件的过程中拦截
 案例:乱码,权限,HTML,包装,压缩
 if(request.getHead("accpect-encoding")).contains("gzip"))


Listener
 三种类型的监听:对象的创建和销毁,对象属性的增加和删除,绑定到域对象时的对象监听器

14.建立代码库,写好文档,为以后扒代码做准备

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值