Filter 过滤器、监听器

Filter:过滤器 ,用来过滤网站的数据;

  • 处理中文乱码
  • 登录验证…
Filter 过滤器、监听器_初始化

开发步骤:

  1. 导包 pom.xml

    <!--Servlet依赖-->
        <dependency>
          <groupid>javax.servlet</groupid>
          <artifactid>javax.servlet-api</artifactid>
          <version>3.1.0</version>
        </dependency>
    <!--JSP依赖-->
        <dependency>
        <groupid>javax.servlet.jsp</groupid>
        <artifactid>javax.servlet.jsp-api</artifactid>
        <version>2.3.3</version>
        </dependency>
    <!--JSTL表达式的依赖-->
        <dependency>
          <groupid>javax.servlet.jsp.jstl</groupid>
          <artifactid>jstl-api</artifactid>
          <version>1.2</version>
        </dependency>
    <!--standard标签库-->
        <dependency>
          <groupid>taglibs</groupid>
          <artifactid>standard</artifactid>
          <version>1.1.2</version>
        </dependency>
    <!--链接数据库-->
        <dependency>
          <groupid>mysql</groupid>
          <artifactid>mysql-connector-java</artifactid>
          <version>5.1.47</version>
        </dependency>
    
  2. 编写过滤器

  3. 导包不要错(javax.servlet)

  4. 实现Filer接口,重写对应方法即可

    public class Filer implements Filter {
        //初始化
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("初始化成功~~~~!");
        }
        //初始化: web服务器启动时就初始化,随时等待过滤器对象的出现
        //Chain 链
        //1.过滤器中的所有代码,在过滤特定请求时都会执行
        //2.必须要让过滤器继续执行
        //chain.doFilter(servletRequest, servletResponse)
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
            servletRequest.setCharacterEncoding("utf-8");
            servletResponse.setCharacterEncoding("utf-8");
            servletResponse.setContentType("text/html; charset=UTF-8");
            System.out.println("执行前...");
            chain.doFilter(servletRequest, servletResponse);//让请求继续走,如果不写拦截停止
            System.out.println("执行后....");
        }
        //销毁 web服务器关闭的时候才会被销毁
        public void destroy() {
            System.out.println("已被销毁~~~~!");
        }
    }
    

    在web.xml中配置Filter映射

    	<filter>
            <filter-name>filer</filter-name>
            <filter-class>com.zhu.Filer.Filer</filter-class>
        </filter>
        <filter-mapping>
            <!-- /*会过滤所有的请求-->
            <!--servlet/*会过滤所有servlet下的所有请求-->
            <filter-name>filer</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    监听器

监测网站在线人数(基于session)

1、编写一个监听器,实现HttpSessionListener

//统计网站在线人数,统计session
public class OnlineListen implements HttpSessionListener{
    /**     
    * 监听session新创建时执行的方法     * 
    @param se     
    */
    //创建session监听
    //一旦创建session就会触发一次这个事件
    @Override
    public void sessionCreated(HttpSessionEvent se){
     	ServletContext sc = se.getSession().getServletContext();
        System.out.println("sessionId:"+ se.getSession().getId());
        Integer onlineCount =(Integer)sc.getAttribute("onlineCount");
        if(onlineCount ==null){            
            onlineCount =1;
        }else{
            onlineCount++;
        }        
        sc.setAttribute("onlineCount",onlineCount);
    }
    /**  
    * 监听session销毁时执行方法     *
    @param se    
    */
    @Override 
    public void sessionDestroyed(HttpSessionEvent se){
        ServletContext sc = se.getSession().getServletContext();
        Integer onlineCount =(Integer)sc.getAttribute("onlineCount");
        if(onlineCount ==null){        
            onlineCount =0;
        }else{  
            onlineCount--;}
        System.out.println("销毁session了--监听到");        
        sc.setAttribute("onlineCount",onlineCount);
    } 
}

web.xml中注册监听器

<!--监听器-->
<listener>
    <listener-class>com.bug.listener.OnlineListen</listener-class>
</listener>

jsp页面

<h1>当前有<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCout")%></span>人在线</h1>

session销毁方法

  • 手动销毁 getSession().invalidate();
  • 自动销毁 在web.xml中设置超时时间
<session-config>
    <session-timeout>1</session-timeout>
</session-config>