我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么应用JavaEE的过滤器、监听、拦截技术

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么应用JavaEE的过滤器、监听、拦截技术

这篇文章主要讲解了“怎么应用JavaEE的过滤器、监听、拦截技术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么应用JavaEE的过滤器、监听、拦截技术”吧!

一、Listener监听器

1、概念简介

JavaWeb三大组件:Servlet,Listener,Filter。监听器就是指在应用程序中监听相关对象状态变化的组件。

2、事件源对象

指被监听对象。

  • ServletContext

ServletContextListener生命周期监听,它有两个方法,出生时调用contextInitialized(),销毁时调用contextDestroyed();

ServletContextAttributeListener属性监听,它有三个方法,添加属性attributeAdded(),替换属性attributeReplaced(),移除属性时attributeRemoved()

  • HttpSession

HttpSessionListener生命周期监听:它有两个方法,出生时调用sessionCreated(),销毁时调用sessionDestroyed()

HttpSessioniAttributeListener属性监听:它有三个方法,添加属性attributeAdded(),替换属性attributeReplaced(),移除属性attributeRemoved()

  • ServletRequest

ServletRequestListener生命周期监听:它有两个方法,出生时调用requestInitialized(),销毁时调用requestDestroyed()

ServletRequestAttributeListener属性监听:它有三个方法,添加属性attributeAdded(),替换属性attributeReplaced(),移除属性attributeRemoved()

3、编码案例

  • 相关监听器

TheContextListener

public class TheContextListener implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {        System.out.println("初始化:TheContextListener");        ServletContext servletContext = servletContextEvent.getServletContext() ;        servletContext.setAttribute("author","cicada");    }    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {        System.out.println("销毁:TheContextListener");    }}

TheRequestListener

public class TheRequestListener implements ServletRequestListener {    @Override    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {        System.out.println("初始化:TheRequestListener");    }    @Override    public void requestInitialized(ServletRequestEvent servletRequestEvent) {        System.out.println("销毁:TheRequestListener");    }}

TheSessionListener

public class TheSessionListener implements HttpSessionListener {    @Override    public void sessionCreated(HttpSessionEvent httpSessionEvent) {        System.out.println("初始化:TheSessionListener");    }    @Override    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {        System.out.println("销毁:TheSessionListener");    }}

RequestAttributeListener

public class RequestAttributeListener implements ServletRequestAttributeListener {    @Override    public void attributeAdded(ServletRequestAttributeEvent evt) {        System.out.println("Request添加属性:"+evt.getName()+";"+evt.getValue());    }    @Override    public void attributeRemoved(ServletRequestAttributeEvent evt) {        System.out.println("Request移除属性:"+evt.getName()+";"+evt.getValue());    }    @Override    public void attributeReplaced(ServletRequestAttributeEvent evt) {        System.out.println("Request替换属性:"+evt.getName()+";"+evt.getValue());    }}
  • web.xml配置文件

<!-- 监听器相关配置 --><listener>    <listener-class>com.node05.servlet.listener.TheContextListener</listener-class></listener><listener>    <listener-class>com.node05.servlet.listener.TheSessionListener</listener-class></listener><listener>    <listener-class>com.node05.servlet.listener.TheRequestListener</listener-class></listener><listener>    <listener-class>com.node05.servlet.listener.RequestAttributeListener</listener-class></listener><session-config>    <!-- 设置session失效时间为1分钟 -->    <session-timeout>1</session-timeout></session-config>
  • 测试接口

public class ListenerServletImpl extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        // 1、获取TheContextListener初始化数据        ServletContext servletContext = this.getServletContext() ;        String author = String.valueOf(servletContext.getAttribute("author")) ;        System.out.println("TheContextListener Author:"+author);        // 2、Request属性设置        request.setAttribute("mood","smile");        request.setAttribute("mood","agitated");        // 3、Session创建,1分钟失效,调用销毁        HttpSession session = request.getSession(true) ;        session.setAttribute("casually","casually");        response.getWriter().print("Hello:Listener");    }}

二、Filter过滤器

1、过滤器简介

客户端请求Servlet时,先执行相关Filter,如果Filter通过,则继承执行请求的Servlet;如果Filter不通过,则不会执行用户请求的Servlet。过滤器可以动态地拦截请求和响应。

2、Filter接口

Filter接口定义了三个核心方法。

  • init()

应用程序启动时,服务器实例化Filter对象,并调用其init方法,读取web.xml配置,完成对象的初始化加载。

  • doFilter()

实际的过滤操作,请求达到服务器时,Servlet容器将先调用过滤器的doFilter方法。

  • destroy()

容器在销毁过滤器前调用该方法,释放过滤器占用的资源。

3、编码案例

  • 编写过滤器

public class ThePrintLogFilter implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {        String myName = filterConfig.getInitParameter("myName") ;        System.out.println("myName:"+myName);    }    @Override    public void doFilter(ServletRequest servletRequest,                         ServletResponse servletResponse,                         FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest)servletRequest ;        HttpServletResponse response = (HttpServletResponse)servletResponse ;        String name = request.getParameter("name") ;        if (!name.equals("cicada")){            response.getWriter().print("User Error !");            return ;        }        chain.doFilter(servletRequest,servletResponse);    }    @Override    public void destroy() {        System.out.println("ThePrintLogFilter destroy()");    }}
  • web.xml配置文件

<!-- 过滤器相关配置 --><filter>    <filter-name>thePrintLogFilter</filter-name>    <filter-class>com.node05.servlet.filter.ThePrintLogFilter</filter-class>    <init-param>        <param-name>myName</param-name>        <param-value>cicada</param-value>    </init-param></filter><filter-mapping>    <filter-name>thePrintLogFilter</filter-name>    <url-pattern>/filterServletImpl</url-pattern></filter-mapping>
  • 测试接口

public class FilterServletImpl extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        response.getWriter().print("Hello:Filter");    }}

三、Interceptor拦截器

Spring框架中的拦截器Interceptor类似于Servlet中的过滤器Filter,主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。请求转发不执行拦截、过滤;重定向执行拦截和过滤。

感谢各位的阅读,以上就是“怎么应用JavaEE的过滤器、监听、拦截技术”的内容了,经过本文的学习后,相信大家对怎么应用JavaEE的过滤器、监听、拦截技术这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

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

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

怎么应用JavaEE的过滤器、监听、拦截技术

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

下载Word文档

猜你喜欢

怎么应用JavaEE的过滤器、监听、拦截技术

这篇文章主要讲解了“怎么应用JavaEE的过滤器、监听、拦截技术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么应用JavaEE的过滤器、监听、拦截技术”吧!一、Listener监听器1、
2023-06-02

SpringBoot使用过滤器、拦截器和监听器的案例代码(Springboot搭建java项目)

这篇文章主要介绍了SpringBoot使用过滤器、拦截器和监听器(Springboot搭建java项目),本文是基于Springboot搭建java项目,结合案例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-02

Java中的过滤器Filter和监听器Listener怎么使用

本文小编为大家详细介绍“Java中的过滤器Filter和监听器Listener怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的过滤器Filter和监听器Listener怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录