JvaWeb学习之Filter、Listener07

目录

1Filter

1.概念

2.快速入门:

3.过滤器细节:

1.web.xml配置

2.过滤器执行流程

​编辑3.过滤器生命周期方法

4.过滤器配置详解

5.过滤器链(配置多个过滤器)

综合案例

1.登录过滤器

2.敏感词

2Listner


1Filter

1.概念

*生活中的过滤器:净水器,空气净化器,土匪、
*web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
*过滤器的作用:
*一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤,·,

2.快速入门:

1.步骤:
1.定义一个类,实现接口Fi1ter
2.复写方法
3.配置拦截路径

    <filter>
         <filter-name>demo1</filter-name>
         <filter-class>com.hzw.web.filter.Filter01</filter-class>
     </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
package com.hzw.web.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class Filter01 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("do,,,,,,");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("destory。。。。。");
    }
}

3.过滤器细节:

1.web.xml配置

<filter>
<filter-name>demo1</filter-name>
<filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<!--拦截路径-->
<url-pattern>/*</url-pattern>
</filter-mapping>


2.过滤器执行流程

1.执行过滤器
2.执行放行后的资源
3.回来执行过滤器放行代码下边的代码


3.过滤器生命周期方法

1.init:

在服务器后动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
2.doFilter:

每一次请求被拦截资源时,会执行。执行多次
3.destroy:

在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy法。只执行一次。用于释放资源


4.过滤器配置详解

*拦截路径配置:
1.具体资源路径:/index.jsp只有访问index,jsp资源时,过滤器才会被执行
2.拦截目录:/user/*
访问/user下的所有资源时,过滤器都会被执行
3,后缀名拦截:*.jsp
访问所有后缀名为jsp资源时,过滤器都会被执行
4.拦截所有资源:/*
访问所有资源时,过滤器都会被执行
*拦截方式配置:资源被访问的方式
*注解配置:
*设置dispatcherTypesl属性
1.REQUEST:默认值。浏览器直接请求资源
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
*web.xml配置
*设置<dispatcher></dispatcher>标签即可

5.过滤器链(配置多个过滤器)

*执行顺序:如果有两个过滤器:过滤器1和过滤器2
1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2
5.过滤器1
*过滤器先后顺序问题:
1.注解配置:按照类名的字符串比较规则比较,值小的先执行
*如:AFilter和BFilter,AFi1ter就先执行了。
2.web.Xml配置:<filter-mapping>谁定义在上边,谁先执行

综合案例

1.登录过滤器

package cn.itcast.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter("/*")
public class LoginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        //强制转换
        HttpServletRequest request  =(HttpServletRequest) servletRequest;
       //1.获取请求路径
        String uri = request.getRequestURI();
        //2.判断是否有登录相关路径
        if (uri.contains("/login.jsp") ||uri.contains("loginServlet")|| uri.contains("/css") ||uri.contains("/js")||uri.contains("/checkCodeServlet")){
            //包含 放行
            chain.doFilter(servletRequest,servletResponse);
        }else {
            //不包含 需要验证用户是否登录
            //从session中获取user 如果有就登录了 无则跳转登录界面
            Object user = request.getSession().getAttribute("user");
            if (user!=null){
                chain.doFilter(servletRequest,servletResponse);
            }else {
                request.setAttribute("login_msg","您先登录!!");
                request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);
            }

        }

    }
}

2.敏感词

*增强对象的功能:
*设计模式:一些通用的解决固定问题的方式
1,装饰模式
2.代理模式
*概念:
1,真实对象:被代理的对象
2,代理对象:
3,代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
实现方式:
1,静态代理:有一个类文件描述代理模式
2,动态代理:在内存中形为成代理类
实现步骤:
1,代理对象和真实对象实现相同的接口
2.代理对象=Proxy,newProxyInstance();
3,使用代理对象调用方法。
4.增强方法
*增强方式
1,增强参数列表
2,增强返回值类型
3,增强方法体执行逻辑

2Listner

*概念:web的三大组件之一。
*事件监听机制
*事件:一件事情
*事件源:事件发生的地方
*监听器:一个对象
*注册监听:将事件、事件源、监听器绑定在一起。
当事件源上发生某个事件后,执行监听器代码
*ServletcontextListener:监听Servletcontext对象的创建和销毁
主要方法:
*void contextDestroyed(ServletcontextEvent sce):Servletcontext对象被销毁之前会调用该方法
*void contextInitialized(ServletcontextEvent sce):Servletcontext对象创建后会调用该方法
*步骤:
1,定义一个类,实现ServletcontextListener接口
2,复写方法
3,配置
1.web.xml
<listener>
<listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>

//加载外部资源

<!-·指定初始化参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>

2.注解

@WebListener

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值