小仙女—过滤器(filter)、监听器(listener)

xiaoxiao2021-02-27  226

过滤器(filter)、监听器(listener)

---------------------------------------------------------------------------------------------------------------------------

SessionID原理概述:

浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器浏览器与该服务器开始建立会话服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里

-----------------------------------------------------------------------------

filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter。

作用:

过滤非法文字和信息。设置统一字符编码。对用户进行登录验证 。改变图片文件格式。对相应内容做压缩处理。对XML的输出使用XSLT来进行转换。

步骤:

第一步:通过在web.xml中的元素和元素来配置filter,以决定用户请求的URL应被哪些filter类来处理一次。 <!--web.xml配置过滤器--> <filter> <filter-name>FirstFilter</filter-name> <!--配置FirstFilter过滤器类--> <filter-class>com.yy.servlet.web.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <!--(代表整个web项目都要过滤,如果指定某个url就只过滤这个url)--> <url-pattern>/*</url-pattern> </filter-mapping> 1234567891011 1234567891011 步骤二:编写filter的Servlet类。  我们的filter类需要实现父接口javax.servlet.Filter。实现父接口的各个方法。包括init(),doFilter(),destroy(),这3个方法。  init()方法和destroy()方法分别用来初始化和销毁时调用。init()方法在 Filter 生命周期中仅执行一次。服务器启动时就会执行。destory()方法在Filter的生命周期中仅执行一次,即Web容器卸载Filter对象之前调用它。主要做释放资源的操作。 对doFilter(req,resp,chain)方法操作。chain.doFilter(request,response)。

注意:chain参数则通过调用自己的doFilter方法来将请求向下传递,如果没有调用doFilter()方法,则相当于阻止了本次请求。  创建如下:

/*这个是FirstFilter过滤器类*/ package com.yy.servlet.web.filter; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class FirstFilter implements javax.servlet.Filter{ public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException { /*如果没有调用doFilter()方法,则相当于阻止了本次请求。*/ filter.doFilter(request, response); System.out.println("filter is ok"); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }

 什么是监听器

servlet规范当中定义的一种特殊的组件,用来监听servlet容器产生的事件并进行响应的处理。

2.1.2. 生命周期相关的事件

容器创建或者销毁request,session,ServletContext(上下文/环境)时产生的事件(统计在线人数)。

2.1.3. 绑定数据相关的事件

调用了以上三个对象(request,response,ServletContext)的setAttribute,removeAttribute方法时产生的事件。

2.1.4. 如何编写监听器

step1,写一个java类,实现相应的监听器接口(共有8个接口)。要依据监听的事件类型来选择相应的监听器接口,比如要监听session对象的创建和销毁,要实现HttpSessionListener。

step2,在监听器接口方法中,实现相应的监听处理逻辑。比如,session对象被删除了,将人数减1。

step3,注册(在web.xml文件中配置即可)。

2.1.5. 编写Java类

copytextpop-up public class CountListener implements HttpSessionListener{ private int count = 0; public void sessionCreated(HttpSessionEvent arg0){System.out.println("sessionCreated…");count ++;} public sessionDestroyed(HttpSessionEvent arg0){System.out.println("session destroyed…");count--;}} public class CountListener implements HttpSessionListener{   private int count = 0;   public void sessionCreated(HttpSessionEvent arg0){ System.out.println("sessionCreated…"); count ++; }   public sessionDestroyed(HttpSessionEvent arg0){ System.out.println("session destroyed…"); count--; } }
转载请注明原文地址: https://www.6miu.com/read-10026.html

最新回复(0)