Java Web 之 Servlet 100问

Filter 是什么?

在Java Web开发中,Filter(过滤器)是一种用于在请求到达目标资源(如Servlet、JSP)之前或响应返回客户端之前进行预处理和后处理的组件。Filter可以拦截请求和响应,执行特定的操作,如日志记录、字符编码设置、身份验证、权限检查、数据压缩等。Filter 可以将完成这些通用的操作,避免在多个 Servlet 中编写重复代码

Filter 中,什么是链式处理?

链式处理:多个Filter可以串联,形成一个处理链,每个Filter依次处理请求和响应。

Filter 常见的应用场景有哪些?

常见应用场景:日志记录、字符编码设置、权限检查、身份验证等。

Filter 的工作原理是什么?

客户端请求到达 → Filter 拦截并预处理 → 请求到达 Servlet ,Servlet 生成响应 → Filter 后处理 → 返回响应。

Filter 的生命周期分为哪些阶段?

init()doFilter()destroy()

Filter 的生命周期离不开以上三个方法,它们分别代表 Filter 的初始化 → 执行过滤操作 → 销毁 三个生命阶段。

如何实现一个 Filter?

实现javax.servlet.Filter接口,并重写init()doFilter()destroy()方法:

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

@WebFilter("/*") // 拦截所有请求
public class ExampleFilter implements Filter {
   
   

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
   
        // 初始化操作
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
   
   
        // 请求预处理
        System.out.println("Before processing request");

        // 传递给下一个Filter或目标资源
        chain.doFilter(request, response);

        // 响应后处理
        System.out.println("After processing response");
    }

    @Override
    public void destroy() {
   
   
        // 销毁操作
    }
}

如何配置 Filter ?

可以通过注解(如@WebFilter)或在web.xml中配置Filter:

<filter>
    <filter-name>ExampleFilter</filter-name>
    <filter-class>com.example.ExampleFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExampleFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

@WebFilter("/api/*")会拦截哪些资源?

api/路径下的所有资源都会被拦截。

@WebFilter("*.do")会拦截哪些资源?

.do结尾的所有资源都会被拦截。

Listener 是什么?

在Java Web开发中,Listener(监听器)是一种用于监听Web应用中特定事件(如ServletContext、HttpSession、ServletRequest的创建、销毁或属性修改)的组件。Listener可以在这些事件发生时执行自定义逻辑,常用于初始化资源、统计在线用户、清理资源等场景。

Listener 的作用有哪些?

  1. 事件监听:监听Web应用中的各种事件,如应用启动、会话创建、请求到达等。
  2. 资源管理:在应用启动时初始化资源,在应用关闭时释放资源(如数据库连接等)。
  3. 日志记录:记录应用的关键事件,用于监控和调试。
  4. 初始化全局资源:在应用启动时初始化数据库连接池、缓存等。
  5. 统计在线用户数:跟踪用户会话状态,通过监听会话的创建和销毁,统计在线用户数。

Listener 常见的类型有哪些?

Java Web提供了多种Listener接口,用于监听不同的事件:

  1. ServletContextListener
    • 监听ServletContext的创建和销毁。
    • 常用方法:contextInitialized()contextDestroyed()
    • 应用场景:在应用启动时初始化全局资源(如数据库连接池),在应用关闭时释放资源。
  2. HttpSessionListener
    • 监听HttpSession的创建和销毁。
    • 常用方法:sessionCreated()sessionDestroyed()
    • 应用场景:统计在线用户数、跟踪用户会话状态。
  3. ServletRequestListener
    • 监听ServletRequest的创建和销毁。
    • 常用方法:requestInitialized()requestDestroyed()
    • 应用场景:记录请求日志、统计请求处理时间。
  4. ServletContextAttributeListener
    • 监听ServletContext中属性的添加、修改和删除。
    • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
    • 应用场景:跟踪全局属性的变化。
  5. HttpSessionAttributeListener
    • 监听HttpSession中属性的添加、修改和删除。
    • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
    • 应用场景:跟踪用户会话中属性的变化。
  6. ServletRequestAttributeListener
    • 监听ServletRequest中属性的添加、修改和删除。
    • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
    • 应用场景:跟踪请求中属性的变化。

Session 相关的监听器有哪些?

和Session相关的监听器有两种:

HttpSessionListener

  • 监听HttpSession的创建和销毁。
  • 常用方法:sessionCreated()sessionDestroyed()
  • 应用场景:统计在线用户数、跟踪用户会话状态。

HttpSessionAttributeListener

  • 监听HttpSession中属性的添加、修改和删除。
  • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
  • 应用场景:跟踪用户会话中属性的变化。

Request 相关的监听器有哪些?

Request相关的监听器有两种:

ServletRequestListener

  • 监听ServletRequest的创建和销毁。
  • 常用方法:requestInitialized()requestDestroyed()
  • 应用场景:记录请求日志、统计请求处理时间。

ServletRequestAttributeListener

  • 监听ServletRequest中属性的添加、修改和删除。
  • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
  • 应用场景:跟踪请求中属性的变化。

ServletContext 相关的监听器有哪些?

ServletContext相关的监听器有两种:

ServletContextListener

  • 监听ServletContext的创建和销毁。
  • 常用方法:contextInitialized()contextDestroyed()
  • 应用场景:在应用启动时初始化全局资源(如数据库连接池),在应用关闭时释放资源。

ServletContextAttributeListener

  • 监听ServletContext中属性的添加、修改和删除。
  • 常用方法:attributeAdded()attributeRemoved()attributeReplaced()
  • 应用场景:跟踪全局属性的变化。

Listener 如何实现?

要实现一个Listener,需要实现相应的接口,并重写其方法。例如,实现ServletContextListener

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ExampleContextListener implements ServletContextListener {
   
   

    @Override
    public void contextInitialized(ServletContextEvent sce) {
   
   
        // 应用启动时执行
        System.out.println("Web应用初始化");
        // 初始化全局资源,如数据库连接池
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
   
   
        // 应用关闭时执行
        System.out.println("Web应用销毁");
        // 释放全局资源
    }
}

如何配置 Listener?

可以通过注解(如@WebListener)或在web.xml中配置Listener:

<listener>
    <listener-class>com.example.ExampleContextListener</listener-class>
</listener>

Servlet 是什么?

Java Servlet
运行位置 Web 服务器或应用服务器,如 Tomcat 等。
主要功能 处理请求 处理客户端(一般是浏览器)发送的 HTTP 请求。
生成响应 生成动态Web内容,如 HTML、JSON 等。
业务逻辑 在服务器端执行业务逻辑,如访问数据库、调用其他服务等。
会话管理 管理客户端与服务器之间的会话,如使用Session、Cookie。
本质 Java程序

Servlet 的作用有哪些

作用
生成动态 HTML 页面 生成动态的 HTML 页面。
提供 Web 服务 提供 RESTful API 或 SOAP 服务。
文件上传和下载 处理文件上传和下载请求。
表单处理 处理用户提交的表单数据。

Servlet 的工作流程是什么?

流程 备注
Servlet 容器(例如Tomcat)产生一个 Servlet 实例。 在一个应用程序中,每种Servlet类型只能有一个实例。同时产生一个 ServletContext 对象、一个 ServletConfig 对象。
用户发送 HTTP 请求。
Servlet容器调用 Servlet 实例的service方法。 service方法的参数 ServletRequest 对象和 ServletResponse 对象都是由 Servlet 容器封装好的,程序员可以直接使用这两个对象。
通过ServletRequest获取 HTTP 请求。 ServletRequest 中封装了当前的 HTTP 请求。
通过ServletResponse返回响应内容。 ServletResponse 表示当前用户的 HTTP 响应。

Servlet 的生命周期有哪些阶段

阶段 生命周期 备注
阶段一 加载和实例化 Web 容器加载 Servlet 类并创建其实例。
通常是在第一次收到请求时加载,但也可以通过配置在启动时加载。
阶段二 初始化 调用 init() 方法,完成 Servlet 的初始化工作。
开发者可以重写此方法,执行自定义的初始化逻辑(如加载配置文件、初始化数据库连接等)。
阶段三 处理请求 调用 service() 方法,处理客户端请求。
对于 HTTP 请求,通常会使用 HttpServlet 的子类,并重写 doGet()doPost() 等方法。
阶段四 销毁 调用 destroy() 方法,释放资源(如关闭数据库连接、清理缓存等)。
通常是在 Web 应用关闭或 Servlet 被移除时调用。
补充 Servlet 的生命周期由 Web 容器(如 Tomcat)管理。

Servlet 的核心接口和类有哪些

13个核心接口和类 类型 所在 java 包 简介
Servlet 接口 javax.servlet 定义了 Servlet 的生命周期方法
void init(ServletConfig config):初始化 Servlet。
void service(ServletRequest req, ServletResponse res):处理请求。
void destroy():销毁 Servlet。
ServletConfig getServletConfig():获取 Servlet 配置信息。
String getServletInfo():获取 Servlet 的描述信息。
GenericServlet 抽象类 javax.servlet 提供了 Servlet 接口的基本实现,简化了 Servlet 的开发。
开发者可以继承此类,并重写 service() 方法。
HttpServlet javax.servlet.http 继承自 GenericServlet,专门用于处理 HTTP 请求。
提供了对 HTTP 方法的支持(如 doGet()doPost()doPut()doDelete() 等)。
开发者通常继承此类,并重写相应的方法。
ServletRequest 接口 javax.servlet
HttpServletRequest 接口 javax.servlet.http
ServletResponse 接口 javax.servlet
HttpServletResponse 接口 javax.servlet.http
ServletConfig 接口 封装 Servlet 配置。
Ser
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值