1.监听器
servlet规范中定义的一个特殊的类,可以对容器当中的事件进行监听。
第一:与生命周期相关的事件
比如创建或者销毁了request/session/servletContext对象
第二:绑定事件
比如调用了request/session/servletContext对象的setAttribute()或者removeAttribute()方法。
如何定义一个监听器?
step1.定义Java类,实现特定的接口
step2.重写方法
step3.在web.xml文件中配置监听器
应用场景:在线人数统计
2.servletContext:上下文对象
容器会为每一个应用创建一个唯一的上下文对象,该对象一致存在,除非容器被关闭,或者应用被删除
request:一次请求,一次响应期间
session:一次会话期间
servletContext:一直存在,除非容器被关闭,或者应用被删除
获取上下文对象:
a.通过GenericServlet提供的getServletContext方法
b.通过HTTPSession提供的getServletContext方法
c..通过ServletConfig提供的getServletContext方法
常用方法:
a.绑定数据
setAttribute(String name,Object obj);
Object:getAttribute(String name);
b.获取全局初始化参数值
String:getInitParameter(String name);
c.根据逻辑路径获取物理地址
String:getRealPath(String url);
3.文件上传
step1.form表单的method必须设置成post,enctye必须设置成"multipart/form-data"
step2.不能再用request.getParameter获取参数,而应该用request.getInputStream获取流信息,再分析流。一般借助工具包分析流数据。
4.servlet线程安全问题
产生原因?
浏览器向服务器发请求时,服务器会启动一个线程处理该请求,当多个请求到达时,服务器会启动多个线程,而它们访问的是同一份servlet对象,当在servlet方法中需要修改成员变量值的时候,会有线程安全问题。
如何解决?
a.加锁 synchronized(response) (影响性能)
b.servlet组件实现SingleModel接口(占内存)
c.尽量避免在servlet中使用成员变量