详细了解java监听器和过滤器

下面小编就为大家带来一篇基于java servlet过滤器和监听器(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

详细了解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>

      总结

      本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注趣讯吧的更多内容!

      版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/2111.html

      (0)
      nan
      上一篇 2021-07-10
      下一篇 2021-07-10

      相关推荐

      • 赵术秦王政首发小说-大秦摄政王免费阅读

        新的开石工具。”“很容易将石料弄平整。”赵术手中木棍划动:“若是我们从采石场,到石料区修一条路,用边料整理出来,铺平。”“从石料区到存放区修一条,然后从存放地,到采石场修一条,到时候,我们完全可以从采…

        2023-08-21
        0
      • 火日立念什么怎么读,你一定不知道的正确读法

        作为一个中国人,我们经常会遇到一些生僻的汉字,其中就包括了“火日立”。这个汉字组合并不常见,但是很多人都会遇到这个字,而且很多人都不知道该怎么正确地念这个字。今天,我就来给大家介绍一下正确的念法和一些有趣的知识。一、火日立的正确读法火日立,

        2024-04-14
        0
      • 俄语怎么入门入门,俄语怎么学简单快

        本文目录1.俄语怎么学简单快2.学俄语怎么入门3.俄语怎么入门?4.初学者怎么学好正畸俄语怎么学简单快如果初学者从零开始学习俄语,那么循环记忆学习方法是很重要的 ,必须要多读俄语单词这样可以达到深度记忆俄语单词的效果。学习俄语可以用下面的方法:1、准备好一些卡片需要多记录俄语单词,这样可以方便记忆。2、卡片上一面写俄文,另一面写汉字单词,开始可以是一个单词,以后可以到一句话,以后还可以写出派生的词

        2023-11-27 知识
        0
      • 威海自驾旅游攻略大连(威海自驾游路线图)

        本文目录一览:1、威海去大连大连冰峪省级旅游度假区优选线路推荐2、大连到威海自驾游费用大揭秘,预算控制在多少钱最合适?3、大连到威海自驾游费用详解,不到元全搞定!4、打算去大连、威海旅行,有什么游玩路线可以分享?5、大连和威海有哪些风景很

        2024-04-23
        0
      • 怎么做杏鲍菇炒肉

        杏鲍菇炒肉做法制作杏鲍菇炒肉其实非常简单,按照以下小白做法即可,先将杏鲍菇,姜蒜,五花肉改刀切片备用,然后准备青红椒丝,生抽,料酒即可,首先将五花肉放入碗中,加入姜丝,适量的生抽以及料酒腌制十分钟。在腌制的过程

        生活百科 2023-06-03
        0
      • 焉来意顾淮在线阅读小说全文无删减,焉来意顾淮大结局

        她想上前帮忙,可是妈妈说过,她跟其他男人在一起的时候,她是不能上去的。她只能眼睁睁地看着妈妈与那女人厮打,之后,妈妈慌不择路地冲向小区外面。女人紧随其后:“你跑什么贱货!”她吭哧吭哧地拎着三鲜伊面跟在后面,“妈妈!妈妈!!”妈妈没有回头。

        网络资讯 2023-06-16
        0

      发表回复

      登录后才能评论