Javaweb-过滤器和监听器

过滤器

过滤器就是在服务器请求servlet的过程中过滤掉不合理的请求
过滤器开发步骤

  • 导包

  • 导包千万不要导错

  • 要对所有方法重写

*实现Filter接口,重写方法

package com.wang.fiter;

import javax.servlet.*;
import java.io.IOException;

public class chfiter implements Filter {
    @Override
    //在web服务器启动时初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("生成");
    }

    @Override
//过滤器中的代码在过滤特定请求时执行
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
               servletRequest.setCharacterEncoding("utf-8");
               servletResponse.setCharacterEncoding("utf-8");
               servletResponse.setContentType("text/html;charset=UTF-8");
               filterChain.doFilter(servletRequest,servletResponse);//过滤器实现过滤
    }

    @Override
    //在web服务器关闭时销毁
    public void destroy() {
        System.out.println("销毁");
    }
}
  • 我们在web.xml中编写Filter,实现过滤作用
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>com.wang.servlet.showservlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/servlet/show</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/show</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>fiter</filter-name>
        <filter-class>com.wang.fiter.chfiter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>fiter</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>
</web-app>

过滤器是一个在web服务器和servlet间的中间商

filterChain.doFilter(servletRequest,servletResponse);

这行代码使请求响应同步继续走下去

监听器

创建和销毁

package com.wang.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class onlinelistener implements HttpSessionListener {
    @Override
    //创建session的监听
    //一旦有一个session创建就会发生这个事情
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer oline =(Integer) context.getAttribute("olinecount");
        if(oline==null)
        {
            oline = new Integer(1);
        }
        else
        {
            int count=oline.intValue();
            oline= new Integer(count+1);
        }
        context.setAttribute("olinecount",oline);
    }

    @Override
    //销毁
    public void sessionDestroyed(HttpSessionEvent se) {
            ServletContext context = se.getSession().getServletContext();
            Integer oline =(Integer) context.getAttribute("olinecount");
            if(oline==null)
            {
                oline = new Integer(1);
            }
            else
            {
                int count=oline.intValue();
                oline= new Integer(count-1);
            }
            context.setAttribute("olinecount",oline);
    }
}

在web.xml中配置

<listener>
        <listener-class>com.wang.listener.onlinelistener</listener-class>
    </listener>
posted @   jinnice  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示