欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet过滤器,监听器

程序员文章站 2022-05-17 11:40:15
...

过滤器

JSP完成的功能Servlet都能完成,但是Servlet具备很多JSP所不具有的,从使用上看可以分为三种:简单Servlet、过滤Servlet和监听Servlet

 

1.过滤器:是以一种组件的形式绑定在web应用程序当中的,与其他的Web应用程序组件不同的是,过滤器是采用链的方式进行处理的。

一旦加入过滤器,所有的请求先交给过滤器处理,然后再访问相应的web资源的访问限制。

 

(1)实现过滤器:如果定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口即可。

 

Public void init(FilterConfig filterConfig)Throws ServletException

 

public void doFilter(ServletRequest request,Servlet response,FilterChain chain)

 

实现具体的过滤操作,然后通过FilterChain让请求继续向下传递。

chain.doFilter(request,response);

 

过滤器的销毁 public void destroy()

 

2.过滤器的应用:

 

实例一:编码过滤器EncodingFilter.java

 

为所有页面设置统一的编码:如果按照之前的做法,在每一个JSP或者Servlet中都重复编写request.setCharacterEncoding("GBK")的语句肯定是不可取的,会造成大量的代码重复。

 

<!-- 编码过滤 -->

 

方法1

在web.xml中配置:

<filter>

 

<filter-name>encoding</filter-name> <filter-class>org.ecjtu.lp.EncodingFilter</filter-class>

 

</filter>

 

<filter-mapping>

 

<filter-name>encoding</filter-name>

 

<url-pattern>/*</url-pattern>

 

</filter-mapping>


在servlet中写:

 

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding("GB18030");

response.setCharacterEncoding("GB18030");

chain.doFilter(request, response);

}

 

 

方法2

<!-- 编码过滤 -->

<filter>

<filter-name>encoding</filter-name>

<filter-class>org.ecjtu.lp.EncodingFilter </filter-class>

<init-param>

<param-name>charset</param-name>

<param-value>GB18030</param-value>

</init-param>

</filter>

public void init(FilterConfig config) throws ServletException {

// TODO Auto-generated method stub

this.charSet=config.getInitParameter("charset");//取得初始化参数

}

 

(2)登陆验证:最早的做法是通过session的方式完成,但是每个页面都这样的话,则肯定造成大量代码的重复,而通过过滤器的方法即可避免这种重复操作。

 

注意:向下转型:将ServletRequest转为HttpServletRequest

 

总结:过滤器属于自动执行的一种servlet过滤器依然需要在web.xml文件中进行配置。

过滤器常用的功能是可以完成常用的编码过滤,及登录验证。

 

监听器

1.第三种servlet程序称为监听servlet,主要功能负责Web的各种操作,当相关的事件触发后将产生事件并对此事和request三种操作进行监听。

 

2.实例:监听器:在线人员统计

 

Session销毁的操作:

当一个新用户打开一个动态页时,服务器会为新用户分配session,并触发HttpsessionLisener接口中的sessionCreate()事件,但是在用户销毁时时却有两种不同的方式触发sessionDestroy()事件。

 

方式一:调用HttpSession接口中的invalidate()方法,让一个session失效。

 

方式二:超过了配置session的超时时间,session超时时间可以直接在项目中的web.xml中配置。

 

<session-config>

 

<session-timeout>5</session-timeout>

 

<session_config>

 

默认的超时时间为30分钟。

(本文转载 : http://www.cnblogs.com/200911/archive/2012/05/02/2479880.html