web知识4(filter+listener)

一:filter(过滤器)
1.概念:过滤器(Filter)是一个能够拦截客户端与服务端请求和响应的web组件
2.web组件:servlet,filter,listener
3.作用:
①:拦截请求:在请求到达客户端要访问的web资源前拦截请求;
②:拦截响应:在响应到达客户端之前拦截响应;
4.应用场景:
①:过滤论坛中的非法字符
②:登录权限检查
③:统一处理项目中的中文乱码
5.过滤器开发入门
第一步:编写一个普通java类,实现Filter接口,重写doFilter方法;
第二步:在doFilter方法中处理被拦截的请求;
第三步:如果不进行拦截–在doFilter方法中调用chain.doFilter(request,response)即可;
第四步:①:在web.xml文件中配置Filter的类路径:

HelloFilter
com.heima.filter.HelloFilter

②:配置HelloFilter拦截的Servlet的映射路径:

HelloFilter
/helloServlet

6.Filter的生命周期
①:创建
②:执行过滤
③:销毁
7.Filter的映射路径
在这里插入图片描述
8.Filter的注解开发
第一步:创建一个普通的java类实现Filter接口,重写抽象方法;
第二步:在这个类上面使用@WebFilter注解进行映射路径的配置,如:@WebFilter(urlPatterns = “/demo”);
第三步:重写doFilter方法,进行具体的业务逻辑处理;
9.多个过滤器时,执行难顺序
①. xml配置方式的Filter,执行顺序按照在web.xml中配置的顺序,从上到下执行;
②.注解开发的Filter,执行的顺序是按照实现类的字母表顺序依次执行!
10.Filter应用案例
①:Filter统一解决post请求乱码问题

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

/**
 * 处理所有请求乱码和响应乱码
 */
@WebFilter(urlPatterns = "/*")
public class AEncodingFilter implements Filter {

    public void init(FilterConfig config) throws ServletException {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //处理请求乱码
        HttpServletRequest request = (HttpServletRequest) req;
        String method = request.getMethod();
        if ("post".equalsIgnoreCase(method)) {
            request.setCharacterEncoding("UTF-8");
        }
        //处理响应乱码
        resp.setContentType("text/html;charset=utf-8");
        //放行
        chain.doFilter(request, resp);
    }


    public void destroy() {
    }
}

②:过滤器案例–登录权限校验

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

@WebFilter(urlPatterns = "/success.jsp")
public class LoginFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //判断用户是否登录  获取session中的用户数据
        HttpServletRequest request = (HttpServletRequest) req;
        HttpSession session = request.getSession();

        User user = (User) session.getAttribute("loginUser");
        if (null == user) {
            //未登录    跳转到登录页面,并给出登录的提示信息
            request.setAttribute("loginError", "请先登录!");
            request.getRequestDispatcher("/login.jsp").forward(request, resp);
          return;
        }

        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

二:listener(监听器)
1.概念:监听器用于监听对象的上的事件发生,在Servlet中监听器主要监听**请求对象(HttpServletRequest)、会话对象(Session)、上下文对象(ServletContext)**以及监听这些对象的作用域操作。
2.分类:(按照监听的内容)
①:监听域对象的:创建与销毁的;
②:监听域对象的:属性变化的。
3.ServletContextListener(创建和销毁)

  • 编写一个监听器类去实现监听器接口
  • 重写监听器的方法
  • 需要在web.xml中进行配置(注册)–类路径
    可以监听到创建和销毁的信息
    4.HttpSessionListener
    同上
    5.ServletRequestListener
    同上
    =========================================
    6.ServletContextAttibuteListener(属性变化)
  • 编写一个监听器类去实现监听器接口
  • 重写监听器的方法
  • 需要在web.xml中进行配置(注册)–类路径
  • 可以监听到存值,设置值,删除值操作
    7.HttpSessionAttributeListener监听器(同上)
    ServletRequestAriibuteListenr监听器(同上)
    8.应用场景
    ①:初始化的工作:初始化对象;初始化数据。比如加载数据库驱动,对连接池的初始化。
    ②:加载一些初始化的配置文件;比如spring的配置文件。
    ③:任务调度(定时器Timer/TimerTask)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值