文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-20 14:40

关注

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

目录

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯