iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中的监听器和过滤器是什么
  • 324
分享到

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

2023-06-20 14:06:04 324人浏览 泡泡鱼
摘要

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

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

目录
  • 介绍:

  • 作用域对象:

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

    • 介绍:

    • 具体作用:

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

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

      • 重写doFilter接口中的doFilter()方法

      • WEB.xml文件中将过滤器接口实现类注册到Http服务器

    • OneServlet

      • TwoServlet

        • Filter拦截地址的格式

    1、介绍:

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

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

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

    2、作用域对象:

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

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

    ServletContext:全局作用域对象

    httpsession:会话作用域对象

    HttpServletRequest:请求作用域对象

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

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

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

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

    ServletContextListener

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

    被初始化时刻 被销毁时刻

    2)监听事件处理方法

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

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

    ServletContextAttributeListener接口:

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

    2)监听事件处理方法:

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

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

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

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

    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()方法
    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中的监听器和过滤器是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: java中的监听器和过滤器是什么

    本文链接: https://www.lsjlt.com/news/297713.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作