天天看点

第十七天:听课笔记

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=..." target="_blank" rel="external nofollow" >新闻</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.建立代码库,写好文档,为以后扒代码做准备

继续阅读