java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器

java的三大组件指Servlet、Filter、Listener。八大监听器指八个接口。前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置,

Listener监听那些事件。

java web的cookie和session机制有篇博客讲的很好,有兴趣的博友可以去看看。地址:https://www.cnblogs.com/whgk/p/6422391.html

一:Filter

1.基本概念

Filter称之为过滤器,是用来做一些拦截的任务, 在Servlet接受请求之前,做一些事情,如果不满足限定,可以拒绝进入Servlet。

6acc82d67c57bb8c738600c094f00f40.png

一个web项目中可以配置多个filter过滤器,浏览器访问静态资源如html、jsp、css或者访问动态资源servlet都会经过filter过滤器,满足条件,过滤器放行,否则直接返回。

2.使用

filter有很多用处,网上一搜,在filter层,来获取用户的身份,可以考虑在filter层做一些常规的校验(如参数校验,referer校验等),可以在filter层做

稳定性相关的工作(如全链路打点,可以在filter层分配一个traceId;也可以在这一层做限流等)。我最常见的是spring中的编码过滤器。我们通过编码过滤器认识filter。

代码:

package com.briup.servlet.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

/**

* Servlet Filter implementation class EncodingFilter

* 编码过滤器

*/

public class EncodingFilter implements Filter {

private String encoding;

public EncodingFilter() {}

public void destroy() {}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

//设置编码格式【只对post方式有效】;

request.setCharacterEncoding(encoding);

response.setCharacterEncoding(encoding);

//放行;

chain.doFilter(request, response);

System.out.println("servlet执行完毕,返回到filter");

}

public void init(FilterConfig fConfig) throws ServletException {

//我们把编码设置在web.xml中,如果需要改编码在配置文件中更改而不需要更改代码

encoding = fConfig.getInitParameter("encoding");

}

}

web.xml:

EncodingFilter

EncodingFilter

com.briup.servlet.filter.EncodingFilter

encoding

utf-8

EncodingFilter

/*

访问:http://127.0.0.1:7778/StudyServlet/HelloWorld或者http://127.0.0.1:7778/StudyServlet/success.html,控制台都会输出一句:"servlet执行完毕,返回到filter"。

3.拦截地址的配置

filter我主要想说的就是拦截地址如何配置了。

第一种 【匹配任意】

/*

第二种 【精确匹配】

/test_servlet

表示此拦截器只会拦截/test_servlet这一个路径

第三种 【扩展名匹配】

*.html

表示此拦截器只会拦截后缀名是.html的路径

第四种 【路径匹配】

/test/*

表示此拦截器拦截/test路径下的所有资源

注意:服务器内部跳转不会拦截,只会拦截浏览器发送的地址。

二:监听器

Servlet监听器的作用是监听Web容器的有效期事件,可以监听由于Web应用中状态改变而引起的Servlet容器产生的相应事件,然后接受并处理这些事件。

下面简单介绍这8个接口和其中的方法。

监听ServletContent(应用上下文)

1.ServletContentListener接口

Servlet的上下文监听,它主要实现监听ServletContext的创建和删除

(1)contextInitialized(ServletContextEvent event); //通知正在收听的对象,应用程序已经被加载和初始化。

(2)contextDestroyed(ServletCotextEvent event);  // 通知正在收听的对象,应用程序已经被载出,即关闭。

2.ServletContextAttributeListener接口

应用上下文存、移除、更改数据进行监听。

(1)attributeAdded(ServletContextAttributeEvent event); //应用上下文存数据的时候触发【调用setAttribute方法】

(2)attributeRemoved(ServletContextAttributeEvent event); //ServletContent对象调用removeAttribute方法触发。

(3)attributeReplaced(ServletContextAttributeEvent event);  //当存数据的时候,key值已经存在,value值被替换的时候触发。

监听session接口

3.HttpSessionListener接口

(1)sessionCreated(HttpSessionEvent even); //session被创建的时候触发。

(2)sessionDestroyed(HttpSessionEvent event); //session过期失效触发

4.HttpSessionAttributeListener

用法和ServletContextAttributeListener接口类似。

监听request接口

5.ServletRequestListener

6.ServletRequestAttributeListener

用法和上面类似。

7.HttpSessionActivationListener;

该接口实现监听HTTP会话active和passivate。

(1)attributeAdded(HttpSessionBindingEvent event); // 当有对象加入session的范围时,通知正在收听的对象

(2)attributeReplaced(HttpSessionBindingEvent event); //当在session的范围有对象取代另一个对象时,通知正在收听的对象。

(3)attributeRemoved(HttpSessionBindingEvent event);  //当有对象从session的范围有对象取代另一个对象时,通知正在收听的对象 。

其中HttpSessionBindingEvent类主要有三个方法:getName()、getSession()和getValue()

8.HttpBindingListener;

接口实现监听HTTP会话中对象的绑定信息。

(1)alueBound(HttpSessionBindingEvent event);   //当有对象加入session的范围时会被自动调用

(2)valueUnBound(HttpSessionBindingEvent event);  //当有对象从session的范围内移除时会被自动调用

注:本文一部分是参考网上资料的。

java基础 五 java注释 关键字 标识符

一:java有三大注释: 1:当行注释: 使用://开始进行注释. 2:多行注释: /**/  在/*和*/之间的内容 会被编译器忽略. 3:文档注释: /***/  /**注释信息*/和多行注释是一 ...

Java基础(五)-Java序列化与反序列化

.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

java web 三大组件

JavaWeb三大组件 Servlet,Filter,Listener. Servlet Servlet的作用 在Java web b/s架构中,servlet扮演了重要的角色,作为一个中转处理的容器 ...

java Web三大组件--过滤器

参考博客:http://www.cnblogs.com/coderland/p/5902878.html https://www.cnblogs.com/HigginCui/p/5772514.htm ...

JAVA首选五款开源Web开发框架

Spring Spring是一个开源的Java/Java EE全功能栈应用程序框架,在JavaEE社区中非常受欢迎,以Apache许可证形式发布,也有.NET平台上的移植版本. Struts2 Str ...

Java Web(五) JSP详解(四大作用域九大内置对象等)

前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

Java Web之Servlet的三大作用域对象

Servlet的作用域是干嘛的?答案就是共享数据而存在的,如图: 下面通过代码演示来具体讲解一下三大作用域 我们新建两个类 package main.com.vae.scope; import jav ...

用 Java 技术创建 RESTful Web 服务--转载

简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...

Java和PHP在Web开发方面的比较

比较 PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发.以下是我就几个主要方面进行的比较: 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容 ...

随机推荐

完美解决,浏览器下拉显示网址问题 | 完美解决,使用原生 scroll 写下拉刷新

在 web 开发过程中我们经常遇到,不想让用户下拉看到我的地址,也有时候在 div 中没有惯性滚动,就此也出了 iScroll 这种关于滚动条的框架,但是就为了一个体验去使用一个框架好像又不值得,今天 ...

iOS进阶篇索引,标记和自定义的table

一.带索引目录的表视图 ①效果图 图1 带索引的列表 ② 数据源 本想获取通讯录中得名字,但为了用模拟器调试方便,就写死了数据,所以也只写了部分字母,总之有那么点意思就成 @interface Vie ...

zabbix监控模式、分布式、自动化

适用场景: 1.监控主机多,性能瓶颈 2.多机房,防火墙 zabbix监控模式 针对agent来说 - 被动模式 - 主动模式(主动汇报服务端) 1)当监控主机超过300台,建议使用主动模式 2)当队 ...

整除的尾数[HDU2099]

整除的尾数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表

在上一边博客中已经讲过如何读取rss订阅文件了.这次就把订阅的文件读取到页面上,使用树形结构进行加载显示. 不打算使用 ...

poj 2828 线段树

http://poj.org/problem?id=2828 学到的思维: 1.变化的或者后来的优先影响前面的,那么从最后一个往前看,最后一个就成了 确定的, 而且后来的也能够确定----假设从前往后 ...

杂记-python

1.在cmd输入python -V显示当前python的版本信息,一定是大写的V 2.输入python,进入python解释器里面 3.在解释器中,输入exit()或者quit()会退出,一定要加括号 ...

linux 时间和时区设置

在linux中与时间相关的文件有 /etc/localtime /etc/timezone 其中,/etc/localtime是用来描述本机时间,而 /etc/timezone是用来描述本机所属的时区 ...

Spring的IOC/DI使用到的技术

一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值