java总结 --4.过滤器
过滤器:
定义:是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤
工作原理:
生命周期:
实例化,通过配置web.xml,web容器启动的时候只会实例化一次
初始化,init(),加载初始化信息,只执行一次。
这个是过滤器的初始化方法,web容器创建过滤器实例后悔调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数
过滤,doFiter(),执行n次
这个方法完成实际的过滤操作,这个地方是过滤器的核心方法,当用户请求访问与过滤器关联的url时,web容器将先调用过滤器的doFilter方法。
FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器,或者目标资源,或利用转发,重定向将请求转发到其他资源。
销毁,destory(),web容器关闭的时候回销毁
web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源(大多数情况用不到)。
过滤器链:
用户请求先执行过滤器1的doFilter中的Code1方法(放行前的方法),再执行Chain.doFilter方法,再执行过滤器2中的doFilter中的Code1方法,再执行Chain.doFilter方法,到达web资源,也就是Servler的serbice方法。处理完响应后,把处理后的响应数据首先反馈给过滤器2的Code2(放行方法后的方法),再反馈给过滤器1的Code2方法,最后响应给用户。
过滤器分几种类型:
Servler2.5
REQUEST:
用户直接访问页面时,web容器将会调用过滤器
FORWARD:目标资源是通过requestDispatcher的forward方法访问时,该过滤器将会被调用
INCLUDE:目标资源是通过requestDispatcher的inclued方法访问时,该过滤
器将会被调用
ERROR:目标资源是通过声明式异常处理机制调用时,该过滤器将会被调用
Servler3.0 新增ASYNC:支持异步处理
@WebFilter
Springboot中配置过滤器步骤:
方法一:
1.新建myFilter类,实现Filter接口(javax.servler下的)
实现init(),doFilter(),desory()
2.在myFilter类上添加注解,@WebFilter, urlPatterns = {"/test/hello"}
注意:test是HelloController的映射路径,hello是HelloController下的一个测试方法。
package com.example.guoq.CommonUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "myFilter",urlPatterns = {"/test/hello"})
public class myFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(">>init>>>>>>>>>>>>");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(">>start>>>>>>>doFilter>>>>>");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println(">>end>>>>>>>doFilter>>>>>");
}
@Override
public void destroy() {
System.out.println(">>>>>destory>>>>>>>>>>>>>>>>");
}
}
3.在springboot启动类上添加@ServletComponentScan注解,启动
这个时候,控制台会打印init这个方法,然后执行test下的hello方法会打印doFilter中的代码。
注:如果没有在启动类上添加注解@ServletComponentScan,而是在myFiler添加注解Component,这个时候会过滤所有的路径(亲测)。
package com.example.guoq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
------------
package com.example.guoq.controller;
import com.example.guoq.CommonUtils.ShareRunable;
import com.example.guoq.CommonUtils.SimpleCached;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class HelloController {
SimpleCached simpleCached=new SimpleCached();
@RequestMapping("/hello")
public String index(){
return "hello world";
}
}
---------------
方法二:
1.新增一个FilterConfiger类,该类添加@Configuration和@Bean注解,如下,
addUrlPatterns添加过滤的路径,test是HelloController的映射
package com.example.guoq.config;
import com.example.guoq.CommonUtils.myFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
filterRegistrationBean.setFilter(new myFilter());
filterRegistrationBean.addUrlPatterns("/test/hello");
return filterRegistrationBean;
}
}
2.新增myFilter类,实现Filter,不添加任何注解
package com.example.guoq.CommonUtils;
import javax.servlet.*;
import java.io.IOException;
public class myFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(">>init>>>>>>>>>>>>");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(">>start>>>>>>>doFilter>>>>>");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println(">>end>>>>>>>doFilter>>>>>");
}
@Override
public void destroy() {
System.out.println(">>>>>destory>>>>>>>>>>>>>>>>");
}
}
3.启动,执行test下的hello方法
java总结 --4.过滤器相关推荐
- Java web—Servlet过滤器(Filter)
前言: 过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...
- java面包屑实现_在Java中实现过滤器和面包店锁
java面包屑实现 为了了解锁的工作原理,实现自定义锁是一种好方法. 这篇文章将展示如何在Java上实现Filter和Bakery锁(自旋锁),并将它们的性能与Java的ReentrantLock进行 ...
- 在Java中实现过滤器和面包店锁
为了了解锁的工作方式,实现自定义锁是一个好方法. 这篇文章将展示如何在Java上实现Filter和Bakery锁(自旋锁),并将它们的性能与Java的ReentrantLock进行比较. 过滤器锁和面 ...
- java nodefilter类,Java Servlet Filter过滤器概述
Java Servlet Filter过滤器概述 Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤.判断用户的登录状态等. ...
- java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...
JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...
- Java三大器之过滤器(Filter)的工作原理和代码演示
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- java filenamefilter_「创作开运礼」Java之FileNameFilter过滤器的使用
各位小伙伴们大家好,在之前的文章中小编介绍了Java之FileFilter过滤器的使用与及原理的简单介绍,这次小编要介绍的是ileNameFilter过滤器的使用. 在使用FileFilter过滤器的 ...
- [JAVA EE] Filter过滤器
Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...
- java web 开发应用 ----过滤器
过滤器的作用 1.当用户请求web资源时,如果没有过滤器,用户可以直接获取到这个web资源,当有了过滤器之后,当用户请求web资源时,web容器中的过滤器先会拦截到这个请求,然后根据这个请求 做相应的 ...
- java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件
搜索文件优化,使用文件过滤器来搜索文件 我们可以使用过滤器来实现在某一目录下指定文件格式的搜索 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 一.FileFilter ...
最新文章
- 神经网络 | 受限波尔兹曼机(附源代码)
- 解决谷歌浏览器F12打不开调试页面的问题。
- 这可能是你与 AI 大神们近距离接触的唯一机会……
- oracle怎么删除存储,删除Oracle分区存储是一个怎样的过程?
- sql判断基数_SQL Server中的基数估计框架版本控制
- 2017.3.11[bzoj2440][中山市选2011]完全平方数
- [20150610]使用物化视图同步数据.txt
- 通俗地告诉你:为什么Dijkstra算法是正确的?
- 视频教程-QT/C++从新手到老手系列之QT基础篇-其他
- 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
- <PCI-E> PCI-E的 x1/x4/x8/x16 四种插槽区别
- HCNE之RIP协议总结
- 数据分析实战项目2:优衣库销售数据分析
- win10怎么用计算机的搜索,win10搜索文件内容怎么操作_win10如何搜索文档内的内容...
- 微信小程序线上点餐问题及解决
- 一文看懂半监督学习(Semi-supervised Learning)和自监督学习(Self-Supervised Learning)
- Zotero中文文献管理
- 怎么搭建网校系统,培训机构搭建专属网校平台源码
- [bzoj3698]XWW的难题 有源汇的上下界最大流
- Linux和Windows误删文件恢复办法