前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java-Filter过滤器

Java-Filter过滤器

作者头像
白衣少年
发布2022-12-26 13:39:23
7000
发布2022-12-26 13:39:23
举报

Filter 什么是过滤器

  1. Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Filter 过滤器它是 JavaEE 的规范。也就是接口
  3. Filter 过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
  1. 权限检查
  2. 日记操作
  3. 事务管理 ……等等

Filter 的初体验 要求:

在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必 须是用户登录之后才允许访问。


思考 :根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到 Session 域中。所以要检查用户是否 登录,可以判断 Session 中否包含有用户登录的信息即可!!!

{collapse-item label="问题答案"}

代码语言:javascript
复制
<% Object user = session.getAttribute("user"); 
// 如果等于 null,说明还没有登录 
if (user == null) { request.getRequestDispatcher("/login.jsp").forward(request,response); return; } 
%>

{/collapse-item}

Filter开发步骤

导包

代码语言:javascript
复制
4.0.0
org.example
javaWeb-filter
1.0-SNAPSHOT

    13
    13


    
        javax.servlet
        javax.servlet-api
        4.0.1
    
    
        javax.servlet.jsp
        jsp-api
        2.1
    
    
    
    
        javax.servlet.jsp.jstl
        jstl-api
        1.2
    
    
    
    
        taglibs
        standard
        1.1.2
    
    
    
        mysql
        mysql-connector-java
        5.1.47

注意 :导入jar包时,一定要导入servlet下面的Filter

过滤器filter的使用.png
过滤器filter的使用.png

编写过滤器

代码语言:javascript
复制
package com.yu.filter;
 import javax.servlet.*;
 import java.io.IOException;
 public class CharacterEncodingFilter implements Filter {
@Override
//web服务器启动,就已经初始化了
public void init(FilterConfig filterConfig) throws ServletException {
    System.out.println("初始化...");
    ServletContext context = filterConfig.getServletContext();
}
@Override
//chain 过滤链
/*
    过滤器中的所有代码,在过滤特定请求的时候,都会执行
    必须要让过滤器继续通行(把请求向后转交
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=UTF-8");
    System.out.println("执行前...");
    chain.doFilter(request,response);
}
@Override
//web服务器关闭时,过滤器会销毁
public void destroy() {
    System.out.println("已销毁");
}
 }

在web.xml中配置过滤器

代码语言:javascript
复制
    show
    com.yu.servlet.ShowServlet


    show
    /servlet/show


    show
    /show


    charsetFilter
    com.yu.filter.CharacterEncodingFilter


    charsetFilter
    /servlet/*
    show
    show

在 filter-mapping 中,可以配置多条 servlet-name,实现对servlet的精确过滤 群体过滤用 url-pattern,可以过目某个目录的所有 servlet 文件,星号是通配符

Listener: 监听器

编写一个监听器 实现一个监听器的接口 覆盖重写方法

代码语言:javascript
复制
package com.yu.listener;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 //统计网站在线人数
 public class OnlineCountListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
    ServletContext context = se.getSession().getServletContext();
    System.out.println(se.getSession().getId());
    Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
    if (onlineCount==null){
        onlineCount=1;
    }else {
        int count=onlineCount.intValue();
        onlineCount=count+1;
    }
    context.setAttribute("OnlineCount",onlineCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
    ServletContext context = se.getSession().getServletContext();
    Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
    if (onlineCount==null){
        onlineCount=1;
    }else {
        int count=onlineCount.intValue();
        onlineCount=count-1;
    }
    context.setAttribute("OnlineCount",onlineCount);
}
 }

配置监听器 在web.xml中对监听器进行配置

代码语言:javascript
复制
com.yu.listener.OnlineCountListener
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Filter 什么是过滤器
  • Filter 的初体验 要求:
  • Filter开发步骤
  • Listener: 监听器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档