Servlet监听器
有8个监听器接口
1、ServletContextListener (contextDestroyed,contextInitialized)
Servlet上下文在初始化或者注销时会调用。须在部署描述符中配置
2、ServletContextAttributeListener (attributeAdded,attributeRomved,attributeReplaced)
Servlet上下文属性列表改变时调用。须在部署描述符中配置
3、HttpSessionListener(sessionCreated,sessionDestroyed)
HttpSession创建或者注销时调用,须在部署描述符中配置
4、httpSessionActivationListener(sessionDidActivate,sessionWillPassivate)
如果绑定到Session中,当Session被钝化或者激活时,Servlet通知该对象
5、HttpSessionAttributeListener(attributeAdded,attributeRomved,attributeReplaced)
Session中的属性列表发生表示是调用
6、HttpSessionBindingListener(valueBound,valueUnbound)
实现该接口的对象被绑定到session或者被从session中删除时调用
7、ServletRequestListener(requestDestroyed,requestCreated)
请求对象在创建或者注销时被调用
8、ServletRequestAttributeListener(attributeAdded,attributeRomved,attributeReplaced)
请求对象的属性列表在发生变化时调用
用使用ServletContextListener接口,须在web.xml中使用<listener>元素来配置监听器类
<listener>
<listenre-class>
package.class
</listenre-class>
</listener>
Filter
过滤器在web开发中的应用:
对用户请求进行统一认证;
对用户的访问请求进行记录和审核;
对用户发送的数据进行过滤和替换;
转换图像格式;
对相应内容进行压缩,减少传输量;
对请求和相应进行加密和解密处理;
触发资源访问时间;
对xml的输出应用XSLT。
Filter API
接口
javax.servlet.Filter;
javax.servlet.FilterConfig;
javax.servlet.FilterChain;
类
javax.servlet.ServletRequestWrapper
javax.servlet.ServletResponseWrapper
javax.servlet.http.HttpServletRequestWrapper
javax.servlet.http.HttpServletReponseWrapper
Filter接口
init(FilterConfig config)throws ServletException
FilterConfig可以得到ServletContext。
doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
操作完成后,可以调用chain.doFilter(request,response)将请求传给下一个过滤器,也可以直接向
客户端返回响应信息,或者利用RequestDispatcher的forword(),include(),以及HttpServletRequest
的sendRedirect()将请求转向其他资源。过滤器并不依赖具体的协议。
destroy();
Filter没有响应的实现类可以供继承,要开发过滤器,只能实现Filter接口
FilterConfig接口
String getFilterName()
String getInitParameter(String name)
返回不是描述中指定的名字为name的测试参数值,不存在则返回null
Enumeration getInitParameterNames()
返回过滤器的所有测试参数的名字的枚举集合
ServletContext getServletContext()
FilterChain接口
由容器实现
doFilter(Servletrequest request,ServletResponse response)
使过滤器中的下一个过滤器被调用,如果已经是最后一个过滤器,那么目标资源将被调用
过滤器的部署
通过<filter>和<fiter-mapping>完成
<filter>用于指定一个过滤器,<filter-name>为过滤器指定一个名字,<filter-class>指定过滤器的完整限定类名
<init-param>为过滤器指定初始化参数,子元素<param-name>指定参数的名称,<param-value>指定参数的值
<filter>
<filter-name>bookFilter</filter-name>
<filter-class>org.sun.Book.filter</filter-class>
<init-param>
<param-name>word</param-name>
<param-value>vord.txt</param-value>
</filter>
部署描述中声明的每一个过滤器只创建一个实例,所以应该注意线程安全问题。
如果部署时声明了两次,则创建两个实例。
<filter-mapping>指定过滤器关联的URL样式或者Servlet
包含:<filter-name> ,<url-pattern>or<servlet-name> 可以多个,0~4 dispatcher
dipatcher: REQUEST,INCLUDE,FORWARD,ERROR,默认是REQUEST
<filter-mapping>
<filter-name>bookFilter</filter-name>
<url-pattern>/foo/*</url-pattern>
<servlet-name>servlet</servlet-name>
<dispatcher>FORWARD</dispathcer>
<dispatcher>REQUEST</dispathcer>
</filter-mapping>