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 ...
随机推荐
- 座位安排(欧拉回路,高斯消元,bitset)
题面 由于旋转大师 F r e n c h \rm French French 的离去, A r e x t r e \rm Arextre Arextre 光荣地承担了给全班换座位的重任. 由于这是 ...
- Math_Music
查看代码 #REmoo的优化任务 #1.公式写在<formula_set>类中,统一管理 --- Finished 2022.8.15 12:39 #2.建立<sample_set& ...
- Python自学笔记11-函数的定义和调用
函数是组织代码的非常有效的方式,有了函数,我们就可以编写大规模的项目.可以说,函数是组织代码的最小单元. Python函数的定义 函数是代码封装的一种手段,函数中包含一段可以重复执行的代码,在需要用到 ...
- 微服务网关Gateway实践总结
有多少请求,被网关截胡: 一.Gateway简介 微服务架构中,网关服务通常提供动态路由,以及流量控制与请求识别等核心能力,在之前的篇幅中有说过Zuul组件的使用流程,但是当下Gateway组件是更常 ...
- 03 最小CMake项目
03 最小CMake项目 所有CMake项目都从一个CMakeLists.txt文件开始,此文件应该放在源代码树的最顶层目录下.可以将CMakeLists.txt想象成CMake项目文件,定义了从源和 ...
- Golang实现set
背景 Golang语言本身未实现set,但是实现了map golang的map是一种无序的键值对的集合,其中键是唯一的 而set是键的不重复的集合,因此可以用map来实现set Empty 由于map ...
- H5页面调用admob激励视频,用户获取奖励
应用前提条件 使用 Android Studio 3.2 或更高版本 确保您应用的 build 文件使用以下值: minSdkVersion 为 16 或更高版本 compileSdkVersion ...
- Django 简介和版本介绍
一.简介 官方地址:https://www.djangoproject.com Django 是一个由Python 编写的具有完整架站能力的开源Web框架.使用 Django,只要很少的代码,开发人员 ...
- Elasticsearch:Dynamic mapping
Elasticsearch最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据. 要索引文档,您不必首先创建索引,定义映射类型和定义字段 - 您只需索引文档,那么index,type和fie ...
- 第六章:Django 综合篇 - 1:配置 Django
Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...