温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中的监听器和过滤器是什么

发布时间:2021-07-09 18:30:08 来源:亿速云 阅读:141 作者:chen 栏目:开发技术

本篇内容介绍了“java中的监听器和过滤器是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 1、介绍:

  • 2、作用域对象:

  • Servt规范扩展-----------过滤器接口

    • 1、介绍:

    • 2、具体作用:

    • 3、Filter接口实现类的开发步骤:三步

      • 第一步:创建一个java类实现Filter接口

      • 第二步:重写doFilter接口中的doFilter()方法

      • 第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器

    • OneServlet

      • TwoServlet

        • 4、Filter拦截地址的格式


    1、介绍:

    1)一组来自于Servlet规范下的接口,共有8个接口。在Tomcat中存在于Servlet-api.jar

    2)监听器接口需要由开发人员亲自实现,Http服务器提供的jar中并没有对应的实现类

    3)监听器接口用于监控【作用域对象生命周期的变化时刻】以及【作用域对象共享数据的变化时刻】

    2、作用域对象:

    1)在Servlet规范中,认为在服务端内存中可以在某些条件下为两个Servlet之间提供数据共享方案的对象,被称为【作用域对象】

    2)在Servlet规范下的作用域对象:

    ServletContext:全局作用域对象

    HttpSession:会话作用域对象

    HttpServletRequest:请求作用域对象

    3、监听器接口实现类开发规范:三步

    1)根据监听的实际情况,选择对应的监听器接口进行实现

    2)重写监听器接口中声明的【监听事件处理方法】

    3)在web.xml文件中将监听器接口实现类注册到Http服务器中

    4、ServletContextListener

    1)作用:通过这个接口合法的检测全局作用域对象的两个时刻

    被初始化时刻 被销毁时刻

    2)监听事件处理方法

    public void contextInitialized():在全局作用域对象被Http服务器初始化是调用

    public void contextDestroyed():在全局作用域对象被Http服务器销毁时调用

    5、ServletContextAttributeListener接口:

    1)作用:通过这个接口合法的检测全局作用域对象共享数据变化的时刻

    2)监听事件处理方法:

    public void contextAdded():在全局作用域对象添加共享数据时调用

    public void contextReplaced():在全局作用域对象更新共享数据时调用

    public void contextRemoved():在全局作用域对象删除共享数据时调用

    6、全局作用域对象共享数据变化时刻

    ServletContext application=request.getServletContext();

    application.setAttribute("key1",100); //新增共享数据

    application.setAttribute("key1",200); //更新共享数据

    application.removeAttribute("key1"); //删除共享数据

    代码实现

    以下就以ServletContextListener接口和ServletContextAttributeListener接口

    第一步:选择ServletContextListener接口进行实现

    第二步:重写监听器接口声明的【监听事件处理方法】

    public class OneListener implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("Initialized............");
        }
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("Destroyed.............");
        }
    }

    第三步:在web.xml中将监听器接口实现类注册到Http服务器中

    <listener>
        <listener-class>school.xauat.listener.OneListener</listener-class>
    </listener>

    由于ServletContext【全局作用对象的生命周期】贯穿网站的整个运行期间

    Servlet之间数据共享中有具体的ServletContext生命周期

    因此在Tomcat服务器启动过程时,执行contextInitialize()方法

    Initialized............

    在Tomcat服务器准备关闭时,执行contextDestroyed()方法

    Destroyed.............

    第一步:选择ServletContextAttributeListener接口进行实现

    第二步:重写监听器接口声明的【监听事件处理方法】

    public class OneListener implements ServletContextAttributeListener {
        @Override
        public void attributeAdded(ServletContextAttributeEvent scae) {
            System.out.println("ServletContextAttribute is added......");
        }
        @Override
        public void attributeRemoved(ServletContextAttributeEvent scae){
            System.out.println("ServletContextAttribute is removed......");
        }
        @Override
        public void attributeReplaced(ServletContextAttributeEvent scae){
            System.out.println("ServletContextAttribute is replaced......");
        }
    }

    第三步:在web.xml文件中将监听器接口实现类注册到Tomcat服务器中

    <servlet>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>school.xauat.controller.OneServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/one</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>school.xauat.listener.OneListener</listener-class>
    </listener>

    监听事件

    public class OneServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //通过请求对象获取全局作用域对象
            ServletContext application=request.getServletContext();
            //向全局作用域对象中添加共享数据
            application.setAttribute("key",100);
            //更改全局作用域对象中的共享数据
            application.setAttribute("key",500);
            //删除全局作用域对象中的共享数据
            application.removeAttribute("key");
        }
    }

    运行结果

    java中的监听器和过滤器是什么

    Servt规范扩展-----------过滤器接口

    1、介绍:

    1)来自于Servlet规范下的接口,在Tomcat中存在于servlet-api.jar包中

    2)Filter接口实现类由开发人员负责提供的,Http服务器不负责提供

    3)Filter接口会在Http服务器调用资源文件之前,对Http服务器进行拦截

    2、具体作用:

    1)拦截Http服务器,帮助Http服务器去检测当前请求的合法性

    2)拦截Http服务器,对当前请求进行增强操作

    3、Filter接口实现类的开发步骤:三步

    1)创建一个java类实现Filter接口

    2)重写Filter接口中的doFilter方法

    3)在web.xml文件中将过滤器接口实现类注册到Http服务器

    过滤器检测请求合法性

    第一步:创建一个java类实现Filter接口
    第二步:重写doFilter接口中的doFilter()方法
    /**
     * http://localhost:8080/myWeb/mm.jpg?age=89
     */
    public class OneFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //通过拦截的请求对象来得到请求包中的参数信息,从而得到来访用户的真实年龄
            String age=servletRequest.getParameter("age");
            //根据这个年龄帮助我们的Http服务器判断本次请求的合法性
            if(Integer.valueOf(age)<70){
                //将拦截请求对象和相应对象交换给Tomcat,由Tomcat继续调用资源文件
                filterChain.doFilter(servletRequest,servletResponse);
            }else{
                //过滤器代替Http服务器拒绝本次请求
                servletResponse.setContentType("text/html;charset=utf-8");
                PrintWriter out=servletResponse.getWriter();
                out.print("<center><font style='color:red;font-size:40px'>不合适!!!!</font></center>");
            }
        }
    }
    第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器
    <!--将过滤器类文件交给Tomcat-->
    <filter>
        <filter-name>OneFilter</filter-name>
        <filter-class>school.xauat.filter.OneFilter</filter-class>
    </filter>
    <!--通知Tomcat在调用何种资源文件是需要被当前过滤器拦截-->
    <filter-mapping>
        <filter-name>OneFilter</filter-name>
        <url-pattern>/mm.jpg</url-pattern>
    </filter-mapping>

    过滤器对请求对象进行增强服务

    当有多个以post的请求访问服务器时,需要对每个Servlet接口实现类中doPost()方法进行以下操作,增加的开发的难度。

    response. setCharacterEncoding("utf-8")

    以下展示过滤器的作用:

    第一步:创建java实现Filter接口

    第二步:重写Filter接口下的doFilter()方法

    public class OneFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            servletRequest.setCharacterEncoding("utf-8");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

    第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器

    <servlet>
            <servlet-name>OneServlet</servlet-name>
            <servlet-class>school.xauat.controller.OneServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>OneServlet</servlet-name>
            <url-pattern>/one</url-pattern>
        </servlet-mapping>
        <servlet>
            <servlet-name>TwoServlet</servlet-name>
            <servlet-class>school.xauat.controller.TwoServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>TwoServlet</servlet-name>
            <url-pattern>/two</url-pattern>
        </servlet-mapping>
        <!--注册Filter类-->
        <filter>
            <filter-name>OneFilter</filter-name>
            <filter-class>school.xauat.filter.OneFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>OneFilter</filter-name>
            <!--通知Tomcat在调用所有资源文件之前都需要调用OneFilter进行拦截-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    OneServlet

    public class OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //通过请求对象获取请求体中的请求参数
            String userName=request.getParameter("userName");
            System.out.println("OneServlet----->"+userName);
        }
    }

    TwoServlet

    public class TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //通过请求对象获取请求体中的请求参数
            String userName=request.getParameter("userName");
            System.out.println("TwoServlet---->"+userName);
        }
    }
    4、Filter拦截地址的格式

    1)命令格式:

    <filter-mapping>

    <filter-name><OneFilter/filter-name>

    <url-pattern>拦截地址</url-pattern>

    </filter-mapping>

    2)命令作用:

    拦截地址通知Tomcat在调用和何种资源文件之前需要调用OneFilter过滤进行拦截

    3)要求Tomcat在调用某一个具体文件之前,来调用OneFilter进行拦截

    <url-pattern>/目录/文件名</url-pattern>

    4)要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用OneFilter进行拦截

    <url-pattern>/目录/*</url-pattern>

    5)要求Tomcat在调用任意文件夹下的某种类型文件之前,来调用OneFilter拦截

    <url-pattern>*.jpg</url-pattern>

    6)要求Tomcat在调用网站中任意文件时,来调用OneFilter拦截

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

    “java中的监听器和过滤器是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI