FilterAndListener 朴灿烈づ我的快乐病毒、 2021-07-24 15:41 95阅读 0赞 ### 文章目录 ### * Filter:过滤器 * * 概念 * 作用 * 快速入门 * * 步骤: * 过滤器细节: * * 1.使用web.xml配置拦截路径 * 2.过滤器执行过程 * 3.过滤器生命周期方法 * 4.过滤器配置详解 * * 4.1拦截路径的配置 * 4.2拦截方式的配置 * * 4.2.1注解方式配置拦截方式 * 4.2.2web.xml方式配置拦截方式 * 5.过滤器链(配置多个过滤器) * 案例:登录验证: * * 需求: * Listener监听器 * * 事件监听机制: * servletContextListener:监听servletContext对象的创建和销毁 * 实现监听器的步骤: # Filter:过滤器 # ## 概念 ## * 生活中的过滤器:净水器,空气净化器 * web中的过滤器,当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能 ## 作用 ## * 一般用来拦截一些通用的操作.如:登录验证,统一编码设置,敏感字符过滤… ## 快速入门 ## ### 步骤: ### 1. 定义一个类,实现Filter接口 2. 复写方法 3. 配置(配置拦截路径) 1. web.xml配置 2. 注解配置 package per.leiyu.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author 雷雨 * @date 2020/5/17 9:26 * * 过滤器的快速入门 * 1.创建一个类实心Filter接口(注意导入的包是javax.servlet.Filter) * 2.复写方法 * 3,配置拦截路径 */ @WebFilter("/*") public class FilterDemo1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("filterDemo1被执行了...."); filterChain.doFilter(servletRequest,servletResponse);//拦截放行 } @Override public void destroy() { } } ## 过滤器细节: ## ### 1.使用web.xml配置拦截路径 ### 和注解方法的配置的作用是一样的 <filter> <filter-name>demo1</filter-name> <filter-class>per.leiyu.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!--表示的是拦截路径 --> <url-pattern>/*</url-pattern> </filter-mapping> ### 2.过滤器执行过程 ### 拦截前对request资源进行增强------>执行要拦截的资源------->拦截之后对于response资源进行增强 ### 3.过滤器生命周期方法 ### package per.leiyu.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author 雷雨 * @date 2020/5/17 10:36 */ @WebFilter(filterName = "FilterDemo3") public class FilterDemo3 implements Filter { public void destroy() { //在服务器启动后自动执行,只执行一次,一般用于资源的加载 System.out.println("filter拦截器执行之前"); } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //我们需要拦截器执行的业务逻辑方法写在这里 System.out.println("filter拦截器执行"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { //在服务器关闭时执行,只执行一次,一般用于资源的释放 System.out.println("filter拦截器执行后"); } } ### 4.过滤器配置详解 ### #### 4.1拦截路径的配置 #### 1. 具体的资源路径: 例如/index.jsp 只有访问index.jsp资源时过滤器才会执行 2. 目录拦截: /user/\* 访问/user下的所有资源时,过滤器都会执行 3. 后缀名拦截: \*.jsp 访问所有后缀名为jsp的资源时,过滤器都会被执行 4. 拦截所有资源: /\* 访问所有资源时,过滤器都会被执行 package per.leiyu.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author 雷雨 * @date 2020/5/17 10:46 * *拦截路径的配置方式 * 1:具体的路径拦截 */ //@WebFilter("/index.jsp") //具体的路径拦截 //@WebFilter("/user/*") //目录拦截方式 //@WebFilter(".jsp") //后缀名拦截方式 @WebFilter("/*") //拦截所有的资源 public class FilterDemo4 implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("filterDemo4..."); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } } #### 4.2拦截方式的配置 #### * 拦截方式:资源被访问的方式 我们之前的资源的访问方式可以是: 1.发送请求,即直接浏览器向服务器发送请求, 2.请求转发,正在访问浏览器的资源,在浏览器中进行请求转发,直接访问服务器中的资源 而现在用Filter也可以来配置资源被访问的方式(拦截方式),有两种方式 ##### 4.2.1注解方式配置拦截方式 ##### * 设置dispatcherTypes属性: 1. REQUEST:默认值.浏览器直接请求资源 2. FORWARD:转发访问资源 3. INCLUDE:包含访问资源 4. ERROR:错误跳转资源 5. ASYNC:异步访问资源 ##### 4.2.2web.xml方式配置拦截方式 ##### 设置dispatherTypes标签 <filter> <filter-name>demo1</filter-name> <filter-class>per.leiyu.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!--表示的是拦截路径 --> <url-pattern>/*</url-pattern> <!--dispatherTypes还是5个取值和在注解中的取值是一样的 --> <dispatherTypes>REQUEST</dispatherTypes> </filter-mapping> ### 5.过滤器链(配置多个过滤器) ### * 执行顺序的问题: 如果有两个过滤器,分别为过滤器1和过滤器2 执行顺序: 过滤器1---->过滤器2---->资源执行----->过滤器2----->过滤器1 * 过滤器先后顺序问题: 1. 注解配置:按照类名的字符串比较规则比较,值小的先执行 如:AFilter 和BFilter ,那么肯定是AFilter过滤器先执行 2. web.xml:谁定义在上面,谁先执行 ## 案例:登录验证: ## ### 需求: ### 1. 访问case\_filter案例的资源.验证其是否登录 2. 如果登录了,则直接放行 3. 如果没有登录,则跳转带登录页面,提示"您尚未登录,请先登录" # Listener监听器 # * web的三大组件之一. ## 事件监听机制: ## * 事件: 一件事情 * 事件源 事件发生的地方 * 监听器: 一个对象 * 注册监听: 将事件.事件源,监听器绑定在一起.当事件源上发生某个事件后,执行监听器代码 ## servletContextListener:监听servletContext对象的创建和销毁 ## * void contextDestroyed(ServletContextEvent sce):servletContext对象在销毁之前会调用这个方法 * void contextInitialized(ServletContextEvent sce):servletContext对象在创建后悔调用该方法 * 一般用于加载资源 * 步骤: 1. 获取servletContext对象:servletContext servletcontext = servletContextEvent.getservletContext(); 2. 加载资源文件 String contextfigLocation = servletContext.getInitParameter(“contextfigLocation.xml”); 3. 获取真实路径 Sting realPath = servletContext.getReaPath(contextfigLocation ) 4. 用一个流对象关联(加载进内存 FileInputStream fis = new FileInputStream(realpath); ## 实现监听器的步骤: ## 1. 定义一个类,实现servletContextListener接口 2. 复写方法 3. 配置 1. web.xml 2. 注解的配置方式
相关 FilterAndListener 文章目录 Filter:过滤器 概念 作用 快速入门 步骤: 过滤器细节: 朴灿烈づ我的快乐病毒、/ 2021年07月24日 15:41/ 0 赞/ 96 阅读
还没有评论,来说两句吧...