Java-servlet(六)详细讲解Servlet-Web.xml标签知识

Java-servlet(六)详细讲解Servlet-Web.xml标签知识


前言

  • 在上一节博客中,我们详细讲解了如何配置 HTML - servlet环境。
  • 然而,在配置过程中,我们使用到的一些代码,尤其是 web.xml 文件里的代码,大家可能还不太理解。例如:
xml 复制代码
<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.niit.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

在这一节中,我们将深入剖析 web.xml 中的这些代码,详细讲解其中各个标签的含义和用法。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

一、servlet标签

标签概念

<servlet> 标签是 web.xml 中非常重要的一个标签,它的主要作用是对 Servlet 进行注册和描述,就像是给 Servlet 办理了一张"身份证",让服务器能够识别和找到这个 Servlet。

标签结构及示例

xml 复制代码
<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.niit.LoginServlet</servlet-class>
</servlet>

子标签含义

  • <servlet-name> :为 Servlet 起一个简短、易记的名称,类似于人的小名。这个名称在整个 web.xml 文件中必须是唯一的,它主要用于在其他标签中引用该 Servlet。例如,在上面的代码中,我们给 Servlet 起名为 login
  • <servlet-class> :指定 Servlet 类的完整包名和类名,告诉服务器这个 Servlet 在项目中的具体位置。服务器会根据这个信息来加载和实例化 Servlet。比如 com.niit.LoginServlet 表示 LoginServlet 类位于 com.niit 包下。

更多用法示例

xml 复制代码
<servlet>
    <servlet-name>register</servlet-name>
    <servlet-class>com.example.RegisterServlet</servlet-class>
</servlet>

在这个例子中,我们注册了一个名为 register 的 Servlet,它对应的类是 com.example.RegisterServlet

二、servlet-mapping标签

标签概念

<servlet-mapping> 标签用于建立 URL 与 Servlet 之间的映射关系,就像是给 URL 和 Servlet 之间设置了一个"暗号",当用户在浏览器中输入特定的 URL 时,服务器能够根据这个映射关系找到对应的 Servlet 并执行。

URL(Uniform Resource Locator)是统一资源定位符的英文缩写,它是一种用于标识互联网上资源位置的标准化字符串。简单来说,URL就是用来告诉计算机网络中的设备(如浏览器、服务器等)如何找到某个资源(如网页、图片、文件等)的地址

标签结构及示例

xml 复制代码
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

子标签含义

  • <servlet-name> :这个子标签的值必须与前面 <servlet> 标签中 <servlet-name> 的值相对应,用于指定该映射关系所对应的 Servlet。例如,这里的 login 就对应了前面注册的 login Servlet。
  • <url-pattern> :指定用户在浏览器中输入的 URL 模式。当用户访问的 URL 与这个模式匹配时,服务器就会将请求转发给对应的 Servlet 进行处理。例如,/login 表示当用户访问 http://localhost:8080/login 时,服务器会将请求交给 login Servlet 处理。

更多用法示例

xml 复制代码
<servlet-mapping>
    <servlet-name>register</servlet-name>
    <url-pattern>/register</url-pattern>
</servlet-mapping>

在这个例子中,当用户访问 http://localhost:8080/register 时,服务器会将请求转发给 register Servlet 进行处理。

URL 模式匹配规则

  • 精确匹配 :如 /login,只有当用户输入的 URL 完全与之匹配时,才会转发请求。
  • 路径匹配 :以 / 开头,以 /* 结尾,例如 /user/*,表示所有以 /user/ 开头的 URL 都会匹配该映射。
  • 扩展名匹配 :以 *. 开头,例如 *.do,表示所有以 .do 结尾的 URL 都会匹配该映射。

三、init-param标签

标签概念

<init-param> 标签用于为 Servlet 提供初始化参数,这些参数可以在 Servlet 初始化时被读取和使用,方便我们对 Servlet 进行配置。

标签结构及示例

xml 复制代码
<servlet>
    <servlet-name>configServlet</servlet-name>
    <servlet-class>com.example.ConfigServlet</servlet-class>
    <init-param>
        <param-name>databaseURL</param-name>
        <param-value>jdbc:mysql://localhost:3306/mydb</param-value>
    </init-param>
    <init-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </init-param>
</servlet>

子标签含义

  • <param-name>:指定参数的名称,用于在 Servlet 中引用该参数。
  • <param-value>:指定参数的值。

在 Servlet 中获取初始化参数

ConfigServlet 中,我们可以通过以下代码获取初始化参数:

java 复制代码
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 ConfigServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        String databaseURL = getInitParameter("databaseURL");
        String username = getInitParameter("username");
        System.out.println("Database URL: " + databaseURL);
        System.out.println("Username: " + username);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 处理 GET 请求
    }
}

四、load-on-startup标签

标签概念

<load-on-startup> 标签用于指定 Servlet 在服务器启动时是否立即加载和初始化。该标签的值是一个整数,服务器会根据这个整数的大小来决定 Servlet 的加载顺序,数值越小,加载越早。

标签结构及示例

xml 复制代码
<servlet>
    <servlet-name>preloadServlet</servlet-name>
    <servlet-class>com.example.PreloadServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

标签含义

在这个例子中,preloadServlet 会在服务器启动时立即加载和初始化,因为 <load-on-startup> 的值为 1。如果有多个 Servlet 都设置了 <load-on-startup> 标签,服务器会按照数值从小到大的顺序依次加载这些 Servlet。

总结(核心概念速记):

核心概念速记
Servlet 配置 = 理解 web.xml 标签体系,掌握 Servlet 注册、映射、参数与生命周期控制

  • 核心标签及作用

    • <servlet>:注册 Servlet,定义名称和类路径,如同 Servlet 的"身份证"。
    • <servlet-mapping>:建立 URL 与 Servlet 的映射关系,通过"暗号"实现请求转发。
    • <init-param>:为 Servlet 提供初始化参数,支持动态配置。
    • <load-on-startup>:控制 Servlet 的加载时机与顺序,优化服务器启动性能。
  • 各标签关键特点对比

    标签名称 主要作用 关键子标签 示例场景
    <servlet> 注册 Servlet <servlet-name><servlet-class> 定义 login Servlet 的类路径
    <servlet-mapping> URL 与 Servlet 绑定 <servlet-name><url-pattern> /login 请求映射到 login Servlet
    <init-param> 初始化参数配置 <param-name><param-value> 设置数据库连接参数
    <load-on-startup> 控制加载顺序与时机 <load-on-startup> 服务器启动时加载关键 Servlet
  • 发展脉络总结

    • 基础配置 :通过 <servlet><servlet-mapping> 实现 Servlet 的基本注册与 URL 映射。
    • 增强功能 :利用 <init-param> 实现参数化配置,通过 <load-on-startup> 优化 Servlet 生命周期。
    • 应用场景 :从简单的 Web 应用到复杂的企业级系统,web.xml 标签体系提供了灵活的配置方案。

知识图谱

复制代码
Java Servlet(六) Web.xml 标签体系
├─ <servlet> 标签
│  ├─ 注册 Servlet
│  ├─ 子标签:<servlet-name>、<servlet-class>
│  └─ 示例:注册 `login` Servlet
├─ <servlet-mapping> 标签
│  ├─ URL 映射关系
│  ├─ 子标签:<servlet-name>、<url-pattern>
│  ├─ 匹配规则:精确、路径、扩展名
│  └─ 示例:映射 `/login` 到 `login` Servlet
├─ <init-param> 标签
│  ├─ 初始化参数
│  ├─ 子标签:<param-name>、<param-value>
│  └─ 示例:配置数据库连接参数
└─ <load-on-startup> 标签
   ├─ 控制加载顺序
   ├─ 数值越小优先级越高
   └─ 示例:服务器启动时加载核心 Servlet

关键知识点对比

标签 作用维度 典型使用场景 配置效果
<servlet> 注册与定位 定义 Servlet 类路径 服务器识别 Servlet 类
<servlet-mapping> 请求路由 定义 URL 到 Servlet 的映射 用户访问 /login 触发对应 Servlet
<init-param> 参数化配置 数据库连接、系统参数 Servlet 初始化时读取配置
<load-on-startup> 生命周期管理 预加载关键 Servlet 减少首次请求延迟,优化性能

以上就是这篇博客的全部内容,下一篇我们将继续探索 Java-servlet 的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

|--------------------|
| 非常感谢您的阅读,喜欢的话记得三连哦 |

相关推荐
雨中飘荡的记忆2 分钟前
Java + Groovy计费引擎详解
java·groovy
嘟嘟w2 分钟前
JVM(Java 虚拟机):核心原理、内存模型与调优实践
java·开发语言·jvm
合作小小程序员小小店2 分钟前
web开发,在线%药店管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·jdk·html·intellij-idea
ZHE|张恒3 分钟前
设计模式(八)组合模式 — 以树结构统一管理对象层级
java·设计模式·组合模式
ClassOps3 分钟前
Chrome 插件记录
前端·chrome
TDengine (老段)5 分钟前
TDengine 转换函数 CAST 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ10 分钟前
java实现校验sql中,表字段在表里是否都存在,不存在的给删除掉
java·sql
编程火箭车17 分钟前
【Java SE 基础学习打卡】15 分隔符、标识符与关键字
java·java入门·标识符·关键字·编程基础·分隔符·语法规则
灰色人生qwer18 分钟前
idea teminal和 window cmd 输出java version不一致
java·ide·intellij-idea
笙年23 分钟前
Vue 作用域插槽
前端·javascript·vue.js