首页 > 其他分享 >学习笔记——过滤器、过滤器的HelloWord、过滤器生命周期

学习笔记——过滤器、过滤器的HelloWord、过滤器生命周期

时间:2023-01-06 11:44:07浏览次数:41  
标签:HelloWord 生命周期 HelloFilter web 创建 过滤器 servlet HelloServlet

2023-01-06

一、过滤器(Filter)

1、概念:Filter是一个实现了特殊接口(Filter)的java类,实现对请求资源(jsp,servlet,html)的过滤的功能。过滤器是一个运行在服务器的程序,优先于请求资源(Servlet或者jsp、html)之前执行。过滤器是Javaweb技术中最为实用的技术之一。

2、功能:拦截请求,检查,之后选择放行或者是禁止放行。

3、应用场景:登陆权限检查、解决网站乱码、过滤敏感字符等等。

二、过滤器的HelloWord

(1)首先,先创建一个module,选择“web Application”,写入项目名,完成创建。

(2)准备一个请求

①将“index.jsp”删除,在web文件夹下创建index.html,创建一个超链接

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="hello">点击访问HelloServlet</a>
</body>
</html>

②在src文件夹中创建一个Servlet包,在该包下创建一个名为“HelloServlet”的Servlet,去掉注解。

③在“web.xml”中创建访问路径

  <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.hh.Servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

④设置“HelloServlet”中的代码

package com.hh.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("访问到了HelloServlet");
    }
}

⑤将服务器进行简单修改,将Name可以设置为“filter_listener”,使用“Chrome”,使用“Redeploy”.

⑥为这次请求创建一个过滤器,创建过滤器的步骤:

a.新建一个类,“com.hh.filter.HelloFilter”,使这个类实现一个接口“Filter”,该接口的包是“javax.servlet”

b.实现一个类

c.实现接口中的所有抽象方法,使用快捷键“ctrl+o”。有“init”、“doFilter”、“destroy”

 @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //当前过滤器的核心方法
        System.out.println("访问到了HelloFilter");
        //放行代码
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("这是过滤器放行后的代码");
    }

d.配置过滤器的过滤路径,在“web.xml”中设置

    <filter>
        <filter-name>HelloFilter</filter-name>
        <filter-class>com.hh.filter.HelloFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HelloFilter</filter-name>
        <url-pattern>/hello</url-pattern>
    </filter-mapping>

刷新服务器后,在弹出的超链接页面中点击超链接,在后台的运行顺序为:

 

 (3)结论:请求发出,如果符合过滤器的过滤要求,执行放行前代码;放行,执行目标资源;目标资源执行完毕,会执行放行后的代码;

三、过滤器生命周期

需要了解:filter对象什么时候创建、对象类的方法什么时候执行、对象什么时候销毁

(1)在“HelloFilter”中创建一个构造器,使用快捷键“Alt+Insert”,点击“Constructor”

public HelloFilter() {
        System.out.println("HelloFilter的构造器被执行了");
}

(2)在“HelloFilter”中的“init”、“destroy”中添加输出语句

     @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("HelloFilter在进行初始化");
    }
    @Override
    public void destroy() {
        System.out.println("HelloFilter被销毁了");
    }

(3)filter对象是在特定情况下被创建,filter对象是在特定情况下被执行。

即“在web项目被加载的时候,过滤器对象被创建”,之后立刻执行初始化方法;n次发送符合过滤器路径的请求时,直接执行n次“doFilter”方法;web项目被卸载的时候(服务器关闭),对象被销毁,销毁之前,执行destroy方法。

(4)验证结论:

 

将服务器关闭后,过滤器被销毁

 

标签:HelloWord,生命周期,HelloFilter,web,创建,过滤器,servlet,HelloServlet
From: https://www.cnblogs.com/isDaHua/p/17029571.html

相关文章

  • SpringBoot过滤器/拦截器
    不同点项过滤器拦截器使用场景对请求/响应进行修改、判断等。一般用于过滤参数、登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换。在service或者一个方法前......
  • 002es生命周期之索引别名的使⽤
    简介:es之索引别名的使⽤别名有什么用在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了适应新的业务逻辑,可能就要对原有的索引做⼀些修......
  • Android四大基本组件介绍与生命周期
    ​​Android四大基本组件介绍与生命周期​​Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。一:了解四大......
  • 虹科分享 | 网络流量监控 | 构建大型捕获文件(Ⅰ)——Wireshark过滤器和其他Allegro网络
    数据包分析是一个复杂的话题。如果在没有设置参数的情况下启动Wireshark,就会开始实时捕获或打开一个预先录制的pcap文件。在很短的时间内,可能有成千上万的数据包等待分析。......
  • spring中Bean生命周期
    1.普通java对象创建过程举例:BusinessServicebusinessService=newBusinessService();编译:将.java文件编译成class文件加载:等到类需要被初始化时(比如new)class文件被虚......
  • Vue的生命周期
    1.beforeCreate:无法通过vm,访问data,和methods。2.created:可以通vm,访问data和methods的方法。3.beforeMount:(1).生成未经vue编译的DOM结构,        ......
  • 53、过滤器filters
    1、局部过滤器filters<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metanam......
  • Java线程生命周期
    java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态之一:NEW–一个新创建的线程,尚未开始执行RUNNABLE–正在运行......
  • Pod生命周期
    PodphasePod的status字段是一个PodStatus对象,PodStatus中有一个phase字段。Pod的相位(phase)是Pod在其生命周期中的简单宏观概述。该字段并不是对容器或Pod......
  • 20230102用户生命周期模型
    一、目的用户生命周期本质是管理用户价值,基于用户生命周期制定策略提升用户在平台贡献的价值,价值主要体现:让新用户成长为成长用户,成长用户成长为成熟用户,不断提升每个......