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.建立代码库,写好文档,为以后扒代码做准备