Java学习之Filter与Listener
0x00前言
web中的Filiter:当客户端访问服务端资源的时候,过率器可以把请求拦截下来,完成一些特殊的功能
完成的操作一般都是通用的作用:列如登录验证。
web中的Listener一般用于加载一些初始化的内容。它们两加上一个Servlet是web最重要的三个组件。
0x01Filiter快速入门
0x1注解配置:
定义一个类,实现Fillter接口
通过注解的方式去配置注解中的括号中的内容是你需要过滤的内容
@WebFilter(value = "*")//访问什么资源的时候就填谁的
public class Filterdemo1 implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
System.out.println("doFilter被执行了");
chain.doFilter(request,response);//放行操作
}
}
0x2web.xml配置
创建两个标签一个是和和Servlet类似
<filter>
<filter-name>demo100</filter-name>
<filter-class>Filterdemo.Filterdemo1</filter-class>
</filter>
<filter>
<filter-name>demo100</filter-name>
<url-pattern>/*</url-pattern>
<!-- 这里要主要你拦截的路径要主要你的拦截器里面是否已经配置了注解-->
</filter-mapping>
</web-app>
0x3其他方法
public void init(FilterConfig config) throws ServletException {
//在服务器创建的时候会加载Filter它会被正常执行
}
public void destroy() {
//服务器正常关闭的时候它会被执行
}
0x4过滤器配置详解
具体的拦截路径配置:
1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
具体拦截方式的配置
具体资源被访问的方式:直接访问,重定向,转发
如果我们需要使用转发访问资源不被拦截器拦截,可以在注解中配置dispatcherTypes属性的值。
dispatcherTypes 五种属性:
1. REQUEST:默认值。浏览器直接请求资源
2. FORWARD:转发访问资源
3. INCLUDE:包含访问资源
4. ERROR:错误跳转资源
5. ASYNC:异步访问资源
看一下demo
@WebFilter(value = "index2.jsp",dispatcherTypes = DispatcherType.REQUEST)
public class Filterdemo2 implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
System.out.println("过滤器被执行了");
chain.doFilter(request, response);
}
}
0x5过滤器链
1.执行顺序(两个过滤器为例子
过滤器1-->过滤器2-->资源执行-->过滤器2-->过滤器1
两种方式
注解配置:类名字符串比较规则
xml配置:顺序执行
0x02Filter案例
登录案例
@WebFilter(filterName = "Filterdemo3")
public class Filterdemo3 implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.contains("/login.jsp")||requestURI.contains("ServletLogin")){
chain.doFilter(req,response);
}else {
Object user = request.getSession().getAttribute("user");
if (user!=null){
chain.doFilter(req,response);
}else {
request.setAttribute("long_msg","fail");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
//chain.doFilter(request, response);
}
}
0x03Listener
1.概念:
事件:一件事情
事件源:事件发生的地方
监听器:一个对象
注册监听:将事件源,事件,监听器,绑定在一起。当事件源上发生某件事情的时候,执行监听器代码
0x1方法
定义一个类:实现ServletContextListener接口
@Override
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is initialized(when the Web application is deployed). */
//ServletContext被创建后会执行方法(服务器)
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
/* This method is called when the servlet Context is undeployed or Application Server shuts down. */
//ServletContext被销毁之前会执行方法(服务器)
}
在xml中配置
<listener>
<listener-class>Lister.Listenerdemo1</listener-class>
</listener>
0x2看一个xml的案例
@WebListener
public class Listenerdemo1 implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {
public Listenerdemo1() {
}
@Override
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is initialized(when the Web application is deployed). */
ServletContext servletContext = sce.getServletContext();
String initParameter = servletContext.getInitParameter("web.xml");//通过键值对的方式获取的
String realPath = servletContext.getRealPath(initParameter);
try {
FileInputStream fileInputStream = new FileInputStream(realPath);
System.out.println("执行了");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
0x3通过注解来配置
很简单就是在前面加一个@WebListener,一般监听器在框架中我们只需要配置一下就可以了。
@WebListener
public class Listenerdemo1 implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener
0x4结尾
web三大组件基本上学完了Servlet Filiter Listener,这三大插件在后面的框架学习的时候还会接触,后面还有一些零散的内容过后就要进入到框架的学习了。
Java学习之Filter与Listener的更多相关文章
- 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener
[Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...
- Filter、Listener 学习总结
今天我们来介绍 Filter.Listener 这两个模块一些简单的知识和应用,接下来我们开始我们的正题 ! 1. Filter(过滤器) 1.1 对 Servlet 容器调用 Servlet 的过程 ...
- Spring Boot 学习系列(08)—自定义servlet、filter及listener
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...
- Java学习资源
Java技术路线图 指路明灯 一位资深程序员大牛给予Java初学者的学习路线建议 Java源码阅读的真实体会 概要 JDK发展历程 Java项目经验 基于java平台的常用资源 官方文档 Java™ ...
- java学习路线(好资源大家分享)
对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...
- 转:Java学习路线图
作者: nuanyangyang 标 题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内 [以下肯定是不完整的列表, ...
- 最新java学习路线:含阶段性java视频教程完整版
最新java学习路线:带阶段性java视频教程版本 第一阶段:Java基础 学习目标: 掌握基本语法.面向对象.常用类.正则.集合.Io流.多线程.Nio.网络编程.JDK新特性.函数式编程 知识点细 ...
- Java Servlet (1) —— Filter过滤请求与响应
Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...
- Java学习路线图(如何快速学Java)
不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议.可能总结的不是很详细,但给出了一个大概的学习路线.希望对大家有帮助哈~ 如何快速学Java 这里我以Java E ...
随机推荐
- ubuntu20.4 sgx环境配置
一.driver安装 1.在该下载地址将3个.bin文件下载下来,下载地址:https://download.01.org/intel-sgx/latest/linux-latest/distro/u ...
- Linux虚拟机 RHEL8.0安装步骤
一. 创建空白虚拟机 1.打开 VMware 虚拟机软件依次选择新建虚拟机并选择选择"自定义" 自定义功能更加全面,典型就是比较简单的配置 2.选择对应的 VMware 版本,此则 ...
- mysql杂记漫谈
Hello,大家好,我是烤鸭,这几天消失了一下,主要是线上系统出了点小bug和sql性能问题,在努力搬砖,就把之前的设计模式系列放了一下下,正好趁这个复习巩固了一下sql执行计划和sql优化等相关的东 ...
- python 作用域与命名空间
作用域 作用域分为: 全局作用域 局部作用域 在函数内部的作用域叫做局部作用域,局部作用域中的变量叫做局部变量 非函数内部的作用域叫做全局作用域,全局作用域中的变量叫做全局变量 局部作用域可以使用全局 ...
- Windows SMTP服务器的中继列表
今天在一台Windows 2019的SMTP服务器上想增加一个匿名中继的客户端地址.登录到服务器后发现原来的设置丢失了,而且原来的允许列表也不见了.界面变成了这样. https://www.cnblo ...
- 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(二)
品优购项目(二) 1. 品优购首页布局 命名集合: 名称 说明 快捷导航栏 shortcut 头部 header 标志 logo 购物车 shopcar 搜索 search 热点词 hotwrods ...
- Elasticsearch:使用 IP 过滤器限制连接
文章转载自:https://elasticstack.blog.csdn.net/article/details/107154165
- MySQL8更改数据存储目录
- 创建Grafana Dashboard
输入表达式,获取数据 但是考虑到多台主机,需要添加变量来选择不同主机,从而出现相应的图表 点击右上角齿轮一样的图标,这个是设置 通过在prometheus界面查询可知,可以设置的变量有两个 考虑到这俩 ...
- (五)JPA - 原生SQL实现增删改查
6.原生SQL JPA除了对JPQL提供支持外,还对原生SQL语句也提供了支持.下面小节一起来看看吧. 6.1 查询单个 示例代码: @Test public void getSingle() { E ...