Servlet学习

Servlet

Servlet 是 JavaWeb 的三大核心组件之一,另外两个是 Filter(过滤器) 和 Listener(监听器)。它是 JavaWeb 开发中最基础的组件,必须熟练掌握。

Servlet 的作用

Servlet 的本质是"Server Let",即运行在服务器端的小型 Java 程序,用于处理客户端请求。当用户通过浏览器发起请求时,Tomcat 会根据请求路径找到对应的 Servlet 来处理该请求。

例如:

  • 用户请求 /login,由 LoginServlet 处理;
  • 用户请求 /register,由 RegisterServlet 处理。

初识 Servlet

所有 Servlet 都必须实现 javax.servlet.Servlet 接口,该接口包含以下核心方法:

  • init(ServletConfig config):Servlet 创建后调用,仅一次,用于初始化。
  • service(ServletRequest req, ServletResponse res):每次请求都会调用。
  • destroy():Servlet 销毁前调用,仅一次。
  • getServletConfig():返回 ServletConfig 对象。
  • getServletInfo():返回 Servlet 描述信息,基本不用。

创建步骤

实现 Servlet 接口:

java 复制代码
package cn.tx.servlet;

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

public class Servlet1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) {}

    @Override
    public ServletConfig getServletConfig() { return null; }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) {}

    @Override
    public String getServletInfo() { return null; }

    @Override
    public void destroy() {}
}

配置 web.xml:

XML 复制代码
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>cn.tx.servlet.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

JavaWeb 请求响应流程

浏览器发起请求(如:http://localhost:8080/demo/hello); Tomcat 根据请求路径查找 web.xml 中的 <url-pattern>; 找到对应的 <servlet-class>; 判断 Servlet 实例是否存在:

  • 存在则直接调用 service();
  • 不存在则通过反射创建实例,存入缓存,再调用 service()。

Servlet 生命周期

Servlet 的生命周期由 Tomcat 管理,主要包括三个阶段:

  • init():Servlet 实例创建后调用,仅一次;
  • service():每次请求调用;
  • destroy():Servlet 销毁前调用,仅一次。

默认情况下,Servlet 是在第一次访问时创建,但可通过 <load-on-startup> 配置为启动时创建:

XML 复制代码
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>cn.tx.servlet.Servlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

HttpServlet

HttpServlet 是 GenericServlet 的子类,专门用于处理基于 HTTP 协议的请求。它重写了 service() 方法,根据请求方式(GET、POST 等)分发到 doGet()、doPost() 等方法。

常见 HTTP 请求方法

  • GET:获取资源
  • POST:新增资源
  • PUT:修改资源
  • DELETE:删除资源
  • HEAD:获取响应头
  • OPTIONS:查询支持的方法

创建 HttpServlet

继承 HttpServlet:

java 复制代码
package cn.tx.servlet;

import javax.servlet.http.HttpServlet;

public class Servlet2 extends HttpServlet {
}

IDEA 快捷创建: 在 IDEA 中右键新建 → Servlet,填写名称后自动生成类,手动配置映射路径即可。

ServletConfig

每个 Servlet 都有一个对应的 ServletConfig 对象,用于获取该 Servlet 在 web.xml 中的配置信息。

配置初始化参数:

XML 复制代码
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>cn.tx.servlet.Servlet1</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </init-param>
</servlet>

获取参数:

java 复制代码
String username = getServletConfig().getInitParameter("username");

Servlet 路径映射

<url-pattern> 的三种配置方式:

  • 完全路径匹配:/hello、/user/login
  • 目录匹配:/admin/*
  • 扩展名匹配:.do、.action

优先级:完全匹配 > 目录匹配 > 扩展名匹配

注意:不能写成 /*.do,这是错误写法。

相对路径与绝对路径

  • 相对路径:依赖于当前路径,使用 . 和 .. 定位。
  • 绝对路径:以 / 开头,表示项目根路径。
  • 客户端路径:/day5/hello
  • 服务器内部路径:/hello(用于转发、包含)

ServletContext

每个 Web 应用只有一个 ServletContext 实例,代表整个应用。它可以在多个 Servlet 之间共享数据,也称为上下文域对象。

常用方法:

  • getAttribute() / setAttribute():读写共享数据
  • getInitParameter():获取全局初始化参数
  • getRealPath():获取虚拟路径对应的真实路径
  • getResourceAsStream():获取资源文件流
相关推荐
行思理3 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1145 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck6 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir6 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人6 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521597 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
楚山之石7 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
南归北隐8 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾8 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
Li_RuiQi8 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉