当前位置: 首页 > news >正文

JavaWeb——ServletConfig

一、什么是 ServletConfig?

   ServletConfig 是 Servlet 规范中定义的一个接口,它的对象由 Servlet 容器(如 Tomcat)在初始化一个 Servlet 时创建,并传递给该 Servlet 的 init(ServletConfig config) 方法。

        简单来说,ServletConfig 是 Servlet 的“个人助理”或“配置说明书”。 它代表了一个特定 Servlet 的配置信息。每个 Servlet 都有自己独有的 ServletConfig 对象。

二、ServletConfig 的核心作用

        它的主要作用是向 Servlet 提供初始化的配置参数。这些参数不是在代码中写死的,而是配置在 Web 应用程序的 web.xml 文件(或通过注解)中。这样做的好处是,当需要修改配置时(比如数据库连接、文件路径等),你无需重新编译 Java 代码,只需修改配置文件即可。

三、如何配置初始化参数?

有两种主要方式为 Servlet 配置初始化参数:

方式一:在 web.xml 中配置(传统方式)

在 web.xml 中,使用 <init-param> 标签在 Servlet 声明内部进行配置。

<?xml version="1.0" encoding="UTF-8"?>
<web-app ...><!-- 1. 声明一个Servlet --><servlet><!-- Servlet的名称 --><servlet-name>MyTestServlet</servlet-name><!-- Servlet的完整类名 --><servlet-class>com.example.MyTestServlet</servlet-class><!-- !!!配置该Servlet的初始化参数!!! --><init-param><param-name>jdbcUrl</param-name><param-value>jdbc:mysql://localhost:3306/mydb</param-value></init-param><init-param><param-name>username</param-name><param-value>admin</param-value></init-param><init-param><param-name>cacheSize</param-name><param-value>100</param-value></init-param></servlet><!-- 2. 将Servlet映射到一个URL模式 --><servlet-mapping><servlet-name>MyTestServlet</servlet-name><url-pattern>/test</url-pattern></servlet-mapping>
</web-app>
方式二:使用 @WebInitParam 注解(现代方式)

在 Servlet 类上使用 @WebServlet 注解时,可以同时使用 initParams 属性来配置。

@WebServlet(name = "MyTestServlet",urlPatterns = {"/test"},initParams = {@WebInitParam(name = "jdbcUrl", value = "jdbc:mysql://localhost:3306/mydb"),@WebInitParam(name = "username", value = "admin"),@WebInitParam(name = "cacheSize", value = "100")}
)
public class MyTestServlet extends HttpServlet {// ... Servlet 代码
}

四、在 Servlet 中如何使用?

在 Servlet 的 init() 方法或 service()/doGet()/doPost() 等方法中,你可以通过 this.getServletConfig() 来获取到当前 Servlet 的 ServletConfig 对象。

最佳实践:通常我们会在 init() 方法中读取这些一次性配置,并将其保存为 Servlet 的实例变量,以便在后续的请求处理中重复使用。

public class MyTestServlet extends HttpServlet {private String jdbcUrl;private String username;private int cacheSize;@Overridepublic void init(ServletConfig config) throws ServletException {// 必须首先调用父类的init(config)super.init(config);// 1. 通过 config 对象获取参数jdbcUrl = config.getInitParameter("jdbcUrl");username = config.getInitParameter("username");String cacheSizeStr = config.getInitParameter("cacheSize");try {cacheSize = Integer.parseInt(cacheSizeStr);} catch (NumberFormatException e) {cacheSize = 50; // 默认值}// 2. 也可以直接使用 this.getServletConfig()// String jdbcUrl = this.getServletConfig().getInitParameter("jdbcUrl");System.out.println("Servlet初始化完成,配置参数已加载。");System.out.println("JDBC URL: " + jdbcUrl);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/plain");PrintWriter out = resp.getWriter();// 使用在init中加载的配置out.println("连接到数据库: " + jdbcUrl);out.println("缓存大小是: " + cacheSize);// 如果需要,也可以在这里临时读取某个参数String username = getServletConfig().getInitParameter("username");out.println("用户名是: " + username);// 遍历所有初始化参数 (演示 getInitParameterNames)out.println("\n所有配置参数:");Enumeration<String> paramNames = getServletConfig().getInitParameterNames();while (paramNames.hasMoreElements()) {String name = paramNames.nextElement();String value = getServletConfig().getInitParameter(name);out.println("- " + name + " = " + value);}}
}

http://www.dtcms.com/a/469678.html

相关文章:

  • QwenVL - 202310版-论文阅读
  • 如何从 FastReport .NET 将报表导出为 JPEG / PNG / BMP / GIF / TIFF / EMF
  • .NET MCP Server 开发教程
  • LeetCode 124. 二叉树中的最大路径和(困难)
  • 建设南大街小学网站wordpress首页调用指定文章列表
  • 大型语言模型(LLM)基础:从原理到核心概念详解(GPT-4 / 文心一言 / 通义千问)
  • python高级03——多任务编程
  • 树模型优劣大比拼xgboost/lightgbm/RF/catboost,股价预测怎么选模型
  • 哈尔滨快速建站公司推荐营销型网站建设实战》
  • 4.3-中间件之Kafka
  • 方寸之间见天地:新兴高端印章的当代破局与价值重构
  • 如何改善基于深度学习的场重构
  • Maven 进行项目构建settings.xml 配置教程
  • 磁力搜索网站怎么做的网站和app设计区别
  • 西安网站建设公司都有哪些网站设计开发文档模板下载
  • C++设计模式_结构型模式_桥接模式Bridge
  • 关于flutter插件的存储位置问题
  • 把“Mixed Content”吃干抹净——一次 https→http 踩坑实录
  • 中山大学联合项目 论文解读 | iManip:面向机器人操作的技能增量学习
  • Unity:Json笔记——Json文件格式、JsonUtlity序列化和反序列化
  • 第八章 惊喜15 小萍收获初会
  • RabbitMQ基础知识与Spring Boot 3.x集成案例
  • 租房网站建设多少钱网站域名怎么改
  • Redis CPU高负载案例分析
  • ARMv9 CCA机密计算架构演进技术解析:重塑云原生时代的数据安全基石
  • 湖州网站设计浙北数据最新发布的手机有哪些
  • AD加域账号权限设置
  • 解决idea报错:Error running TrustApexCrmApplication. Command line is too long
  • 网站开发淄博进口商品代理平台
  • systme V共享内存(version1)