servlet 之 过滤器,监听器

本文详细介绍了Servlet中的三大组件:servlet、过滤器(Filter)和监听器(Listener),并提供了具体的实现示例。通过本文,读者可以了解到这三种组件的主要功能、应用场景及如何在实际项目中配置使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤器:
servlet划分为3中类型
1、普通的servlet:用于处理http请求,响应http数据
2、过滤器:对我们的http请求数据进行优化的,过滤的 Filter
3、监听器:监控我们servlet的一些流程和对象的
过滤器Filter:

package com.xingxue.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("destory 销毁");

    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        //过滤操作
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;

        //处理乱码
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        //放行
        arg2.doFilter(request, response);
    }

    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init  初始化");

    }

}

监听器: 在我们servlet有一种servlet叫Listener,Listener提供了监听我们域对象的创建,销毁,插入,覆盖数据的操作。
监听器实现方式 举例一个
package com.xingxue.listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MySessionListener implements HttpSessionAttributeListener{

public void attributeAdded(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("session添加了数据");


}

public void attributeRemoved(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("session删除了数据");

}

public void attributeReplaced(HttpSessionBindingEvent arg0) {
    System.out.println("session修改了数据");
    // TODO Auto-generated method stub

}

}

此处注意,这些方法都是自动调用的。只要出发该操作,这里的方法就会自动调用

监听器主要是针对我们域对象:存东西
application、session、request
每一个创建、销毁监听器
添加、修改、删除数据的监听器

对于我们来说,
servlet中主要掌握的知识点为:
request对象的作用及概念,常用的方法
request.getRequestDispatcher(“FileListServlet”).forward(request, response);
request.getParameter(“”);
request.setAttribute(“”, “”);
request.getAttribute(“”)
request.setCharacterEncoding(“”);;

response对象的作用及概念,常用方法:

response.setCharacterEncoding("");
response.sendRedirect("");
response.getWriter();
response.getOutputStream()

域对象的概念: application、session、request 的方法及生命周期

过滤器和监听器的概念及作用

web.xml的配置方式
http请求流程

过滤器补充:
过滤器本身也是一个高级servlet,他也可以接收http请求和响应http数据, 但是filter不负责业务逻辑,只负责做一些servlet重复做的工作。
原来请求访问都是直接到servlet,当系统当中又了filter之后,请求会先到filter,然后filter放行了之后在到servlet,所以servlet和filter执行的顺序是先filter后servlet,
创建filter的步奏
1、实现自哦我们的Filter接口,重写3个方法
package com.xingxue.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain chain) throws IOException, ServletException {

        //验证用户是否登陆
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;


        HttpSession session = request.getSession();

        String flag = (String) session.getAttribute("flag");

        if("OK".equals(flag)) {
            //放行
            chain.doFilter(arg0, arg1);

        } else {
            response.sendRedirect("../login.html");
        }


    }

    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

核心方法是doFilter,当请求进入Filter,就调用该方法,

然后配置webxml

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.xingxue.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值