Servlet监听器和过滤器Filter

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>

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值