监听事件和过滤器

Posted yuyu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听事件和过滤器相关的知识,希望对你有一定的参考价值。

监听包括三种情况,分别是HttpRequest、Session、ServletContext监听。

常用的是implements servletContextListener(全局变量)两个方法


public void contextInitialized(ServletContextEvent arg0)

arg0.getServletContext()

Session监听事件所示:


import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

import com.kettas.upp02.util.Constant;

public class SessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent ent) {

        HttpSession session = ent.getSession();

        synchronized (this) {

            ServletContext ctx = session.getServletContext();

            Integer counter = (Integer) ctx.getAttribute("sessionCount");

            ctx.setAttribute("sessionCount", counter.intValue() + 1);

            System.out.println(Constant.LOGO + "SessionCount:"

                    + (counter.intValue() + 1));

        }}

    public void sessionDestroyed(HttpSessionEvent ent) {

        HttpSession session = ent.getSession();

        synchronized (this) {

            ServletContext ctx = session.getServletContext();

            Integer counter = (Integer) ctx.getAttribute("sessionCount");

            ctx.setAttribute("sessionCount", counter.intValue() - 1);

            System.out.println(Constant.LOGO + "SessionCount:"

                    + (counter.intValue() - 1));

        }

    }

}

在web.xml文件中配置如下:


<listener>

    <listener-class>shop. SessionListener </listener-class>

</listener>

其他两个监听事件的实现同上并无二致。

过滤器 // 实现Filter接口


import java.io.IOException;

import javax.servlet.*;

public class EncodingFilter implements Filter{

//销毁时执行,没必要覆盖

    public void destroy() {}

    //发送请求时执行

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

        //设置发送请求和接收请求时的编码方式,统一才能达到过滤作用

        request.setCharacterEncoding("UTF-8");

        response.setCharacterEncoding("UTF-8");

        try {

            chain.doFilter(request, response); 请求转发

        } catch (RuntimeException e) {

            e.printStackTrace();

        }}

    //加载时执行,也没必要执行

    public void init(FilterConfig arg0) throws ServletException {}

}

web.xml文件中:

//配置当发生什么要的请求时,让那个过滤流执行操作


 <filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>filter.EncodingFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>encodingFilter</filter-name>

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

</filter-mapping>

以上是关于监听事件和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb学习——监听器和过滤器

JavaFX窗口拖动

servlet,过滤器,监听器,拦截器的区别

过滤器拦截器 和 监听器 的区别!

c# 获取移动硬盘信息监听移动设备的弹出与插入事件

重学SpringBoot系列之生命周期内的拦截过滤与监听