java的三大组件指Servlet、Filter、Listener。八大监听器指八个接口。前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置,
Listener监听那些事件。
java web的cookie和session机制有篇博客讲的很好,有兴趣的博友可以去看看。地址:https://www.cnblogs.com/whgk/p/6422391.html
一:Filter
1.基本概念
Filter称之为过滤器,是用来做一些拦截的任务, 在Servlet接受请求之前,做一些事情,如果不满足限定,可以拒绝进入Servlet。
一个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)和面向切面 ...