Servlet过滤器,监听器
过滤器
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)
上一篇: 爆冷恶搞,笑果强大
下一篇: 爆冷的内涵段子,无法直视