Servelt监听
一、作用域:1、对于WEB应用只有一个ServletContext,由容器创建并实例化,初始化参数可以在web.xml中<context-param>标签设置(无法设置一个对象)。
2、每个Servlet都可以通过调用父类接口的getServletContext()方法来获得ServletContext,调用getInitParameter()方法获得<context-param>中的字符串,调用setAttribute()向ServletContext中添加(或覆盖已有的)所有类型(如对象)属性,以键值对存在(键不能重复),调用getAttribute()方法获得上下文对象中属性。3、同一个WEB应用中任何一个单独的线程都可访问修改ServletContext属性,故ServletContext是线程不安全的。
4、HttpSession:会话,作用域范围为一个会话交互过程
5、会话被销毁,其属性也被销毁。
6、每次会话只能访问单签会话作用域中的属性,但可以使用相同的Session来访问属性(如IE的Ctrl-N)。故HttpSession是线程不安全的。
7、HttpRequest:请求,作用域范围为一次请求过程
8、可理解为N个WEB请求之间传输对象的方法,在这个对象之外的对象会被垃圾回收。
9、仅作用在与一个请求相关的两个资源之间(请求转发),是线程安全的。
二、监听器:1、ServletContext:2.1.1ServletContextListener:监听生命周期
2、ServletContextAttributeListener:监听属性改变
3、HttpSession:2.2.1HttpSessionListener:监听生命周期
4、HttpSessionActivationListener:监听钝化迁移
5、HttpSessionAttributeListener:监听属性改变
6、HttpSessionBindingListener:监听对象绑定
7、ServletRequest:2.3.1ServletRequestListener:监听生命周期 8、ServletRequestAttributeListener:监听属性改变
servlet过滤
过滤器(Filter)的概念
- 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。
- 在请求到达Servlet/JSP之前,过滤器截获请求。
- 在响应送给客户端之前,过滤器截获响应。
- 多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射<filter-mapping>的顺序决定。
- 最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。
Filter接口
public void init(FilterConfig config)
web容器调用本方法,说明过滤器正被加载到web容器中去。容器只有在实例化过滤器时才会调用该方法一次。容器为这个方法传递一个FilterConfig对象,其中包含与Filter相关的配置信息。
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
每当请求和响应经过过滤器链时,容器都要调用一次该方法。需要注意的是过滤器的一个实例可以同时服务于多个请求,特别需要注意线程同步问题,尽量不用或少用实例变量。 在过滤器的doFilter()方法实现中,任何出现在FilterChain的doFilter方法之前地方,request是可用的;在doFilter()方法之后response是可用的。
public void destroy()
容器调用destroy()方法指出将从服务中删除该过滤器。如果过滤器使用了其他资源,需要在这个方法中释放这些资源。
实现过滤器
在Web应用中使用过滤器需要实现javax.servlet.Filter接口,实现Filter接口中所定义的方法,并在web.xml中部署过滤器。
public class MyFilter implements Filter {
public void init(FilterConfig fc) {
//过滤器初始化代码
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
//在这里可以对客户端请求进行检查
//沿过滤器链将请求传递到下一个过滤器。
chain.doFilter(request, response);
//在这里可以对响应进行处理
}
public void destroy( ) {
//过滤器被销毁时执行的代码
}
}