ServletConfig与ServletContext对象详解

ServletConfig、ServletContext超详细讲解 ServletConfig接口代表了Servlet的配置信息,它允许Servlet获取初始化参数和Servlet容器提供的其他信息。而ServletContext接口则代表了整个Web应用的全局环境,提供了一种机制来存储和访问Web应用范围内的属性和资源。理解这两个接口的工作原理和使用场景,对于构建可维护、可扩展的Web应用程序至关重要。它们不仅关系到Servlet的初始化和配置,还涉及到Web应用的上下文管理和资源共享。 阅读详情

ServletConfig与ServletContext对象详解

一、ServletConfig对象
 
  在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)

   当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

首先,需要创建私有变量:private ServletConfig config = null;

其次,要重写init方法,传入config,令this.config = config;从而获得ServletConfig对象

最后,就可以获得<init-parm>中的配置信息了

//获取初始化参数
 
 String value1 =this.config.getInitParameter("x1");

//获得配置文档中<init-param>标签下name对应的value
 
 String vlaue2 =this.config.getInitParameter("x2");
 
 
 
 //2.获取所有的初始化参数(用Enumeration接收)
 
 Enumeration e =this.config.getInitParameterNames();
 
 while(e.hasMoreElements()){
 
  String name =(String) e.nextElement();
 
  String value= this.config.getInitParameter(name);
 
  System.out.println(name+ "=" + value);
 
 }

   在开发中ServletConfig的作用有如下三个:

1)获得字符集编码

  String charset =this.config.getInitParameter("charset");
2)获得数据库连接信息

  String url =this.config.getInitParameter("url");
 
 String username =this.config.getInitParameter("username");
 
 String password =this.config.getInitParameter("password");
3)获得配置文件

  String configFile =this.config.getInitParameter("config");


二、ServletContext对象

 WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

 1)ServletContext对象应用1:多个web组件之间使用它实现数据共享

 ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

在serlvet中,可以使用如下语句来设置数据共享

  ServletContext context =this.getServletContext(); //servletContext域对象
 
 context.setAttribute("data","共享数据"); //向域中存了一个data属性

在另一个servlet中,可以使用如下语句来获取域中的data属性

  ServletContext context =this.getServletContext();
 
 String value = (String)context.getAttribute("data");  //获取域中的data属性
 
 System.out.println(value);

  2)通过servletContext对象获取到整个web应用的配置信息

  String url =this.getServletContext().getInitParameter("url");

  String username =this.getServletContext().getInitParameter("username");
 
String password =this.getServletContext().getInitParameter("password");

  3)通过servletContext对象实现servlet转发

由于servlet中的java数据不易设置样式,所以serlvet可以将java数据转发到JSP页面中进行处理

 this.getServletContext().setAttribute("data","serlvet数据转发");
 
 RequestDispatcher rd =this.getServletContext().getRequestDispatcher("/viewdata.jsp");
 
 rd.forward(request,response);

 4)通过servletContext对象读取资源文件

 在实际开发中,用作资源文件的文件类型,通常是:xml、properties,而读取xml文件必然要进行xml文档的解析,所以以下例子只对properties文件进行读取(在一个web工程中,只要涉及到写地址,建议最好以/开头)

 在web工程中,我们一般来说,是不能采用传统方式读取配置文件的,因为相对的是jvm的启动目录(tomcat的bin目录),所以我们要使用web绝对目录来获取配置文件的地址

  读取资源文件的三种方式:

 第一种:使用ServletContext的getResourceAsStream方法:返回资源文件的读取字节流

  InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
 
 Properties prop = newProperties();  

  prop.load(in);
 
 String url =prop.getProperty("url");

 第二种:使用ServletContext的getRealPath方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件

  String path =this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
 
 String filename =path.substring(path.lastIndexOf("\\")+1); 

  //相比第一种方法的好处是:除了可以获取数据,还可以获取资源文件的名称
 
 FileInputStream in = newFileInputStream(path);
 
 Properties prop = newProperties();
 
 prop.load(in);
 
 String url =prop.getProperty("url");

 第三种:使用ServletContext的getResource方法,获得一个url对象,调用该类的openStream方法返回一个字节流,读取数据

  URL url =this.getServletContext().getResource("/WEB-INF/classes/db.properties");
 
 InputStream in =url.openStream();
 
 Properties prop = newProperties();
 
 prop.load(in);
 
 String url1 =prop.getProperty("url");

  5)web工程中,不同位置的资源文件的读取方式

  一、当资源文件在包下面时
 
 InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
 
 System.out.println(in);
 
 
 
二、资源文件在web-inf下
 
 in =this.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
 
 System.out.println(in);
 
 
 
 三、资源文件在web工程中
 
 in =this.getServletContext().getResourceAsStream("/db.properties");
 
 System.out.println(in);

  6)在非servlet程序中如何读取配置文件:用类装载器

1)用类装载方式读取 

 in =StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/context/db.properties");
2)用类装载方式读取,把资源当作url对待

 URL url =StudentDao.class.getClassLoader().getResource("db.properties");

 这样可以获得资源文件名称:String path = url.getPath();

3)注意:在线程休眠过程中,即使改动了资源文件,获取到的还是原始内容

解决方案:

  URL url =StudentDao.class.getClassLoader().getResource("db.properties");
 
 String path =url.getPath();
 
 
 
 FileInputStream in = newFileInputStream(path);
 
 Properties prop = newProperties();
 
 prop.load(in);
 
 System.out.println(prop.getProperty("url"));
 
 
 
 try {
 
  Thread.sleep(1000*15);
 
 } catch (InterruptedExceptione) {
 
   e.printStackTrace();
 
 }
 
 in = newFileInputStream(path);
 
 prop = new Properties();
 
 prop.load(in);
 
 System.out.println(prop.getProperty("url"));

 

4)注意:用类装载器读取资源文件时,千万要注意,资源文件绝对不能太大,否则极易导致内存溢出

3D点云修复实战:用PCN网络快速补全缺失的激光雷达数据(附代码) 本文详细介绍了PCN(Point Completion Network)网络在3D点云修复领域的实战应用。针对激光雷达数据常见的缺失问题,PCN通过端到端的深度学习架构,直接处理原始点云,实现由粗到精的快速补全。文章深入解析了其核心思想与编码器-解码器架构,并提供了完整的环境搭建、数据准备、模型实现、训练评估及在真实场景下的优化策略与代码示例,为自动驾驶、机器人等领域的开发者提供了高效的数据修复解决方案。 阅读详情

相关推荐

这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一

文章篇幅较长,耐心看完你一定有所收获。

最铁头的网工博客 2万+

Servlet介绍以及servetConfig和servletContext的区别

1.servlet介绍 2.servletConfig介绍 3.servletContext介绍 4.servletConfig和servletContext的区别

宏微的博客 927

YOLOv8缺陷检测可视化界面实战:PyQt5布局设计与代码实现

本文详细介绍了如何利用PyQt5为YOLOv8缺陷检测模型构建一个专业、易用的可视化界面。通过实战讲解PyQt5的布局管理器设计、信号槽机制与YOLOv8核心的集成,帮助开发者快速将AI模型部署为直观的桌面应用,提升工业质检等场景的落地效率。

redis7keeper的博客 758

【Java 进阶篇】在Java Web应用中获取ServletContext对象详解

对象是Java Web应用程序中的全局对象,它代表整个Web应用程序,而不是单个用户的请求。每个Web应用程序都有一个对应的对象,它在Web应用启动时创建,而在Web应用停止时销毁。对象的生命周期与Web应用程序的生命周期相同。对象是接口的实例,它提供了一种在Web应用程序中存储和共享数据的机制。通常情况下,对象用于存储全局配置信息、共享的资源和其他在整个应用程序中需要访问的数据。对象是Java Web应用中非常重要的全局对象,它用于存储和共享全局信息、配置数据和资源。通过了解如何获取和使用。

繁依Fanyi的博客 1672

ABAP BOM展开避坑指南:CS_BOM_EXPL_MAT_V2函数参数配置详解

本文深入解析了SAP ABAP开发中用于物料清单展开的核心函数CS_BOM_EXPL_MAT_V2。针对其复杂的参数配置,如CAPID、STLAN、DATUV和MEHRS,提供了详细的避坑指南和最佳实践,帮助开发者避免数据错误与性能陷阱,实现高效、准确的BOM多层展开。

pea55的博客 854

别再拿空气标定法糊弄了!手把手教你搞定水下相机标定(附Python代码)

本文详细解析水下相机标定的关键技术,揭示传统空气标定法失效原因,并提供基于单视点模型(SVP)的完整Python解决方案。通过折射效应分析、标定板设计优化和代码实战演示,帮助读者掌握水下标定核心方法,有效提升水下视觉系统测量精度。

weixin_30530939的博客 208

web学习笔记-servlet入门、ServletConfig、ServletContext

一、servlet入门servlet的创建 sun公司提供了一个servlet接口,这个接口有一个默认实现类:GenericServlet类,而这个类又有一个实现类:HttpServlet类。 在创建servlet时,可以选择的继承一个类。因为我们使用servlet经常是用来处理http请求的,所以一般就会继承HttpServlet类。选择继承GenericServlet类也是可以的。 在继承

醉耕的博客 442

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

Java EE - Servlet 小结

Table of Contents 前言 Servlet 的生命周期 Servlet 的初始化 ServletContext & ServletConfig 请求的处理 HttpServletRequest 请求分派 属性 HttpServletResponse Servlet 的销毁 监听者和过滤器 完整生命周期和默认 Servlet 结语 前言 最近在看《Spring i...

weixin_30294709的博客 185

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 258

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

(转)ServletConfig与ServletContext对象详解

ServletConfig与ServletContext对象详解 一、ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下) 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到Servlet...

aidixi8066的博客 195

【SAP HANA 24】HANA与Oracle SQL语法对照表

HANA SQL参考及Oracle 语法对照

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1422

Intouch间接变量原理与工程实践指南

间接变量是工业HMI中实现动态地址映射的核心机制,其本质是在变量定义层完成运行时地址解析,而非脚本层的临时计算。它基于字符串拼接与实时变量联动,遵循严格的地址语法、三层嵌套限制和类型安全约束,支撑CALL指令、Quick Function等高级功能的精准执行。技术价值在于提升系统可维护性与产线柔性——设备命名变更、产线拆分或控制源切换时,仅需调整基础变量,无需批量修改画面逻辑。典型应用场景包括多工位设备统一控制、DCS联锁逻辑复用及制药灌装头动态校准。本文深入剖析其底层原理、硬性边界与典型报错(如canno

weixin_34133829的博客 391

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ServletContext与ServletConfig对象详解

一、ServletContext对象详解 ServletContext代表当前web应用 当服务器启动,web应用加载完成后,立即创建一个ServletContext对象代表当前web应用。从此驻留在内存中唯一的代表当前web应用。直到服务器关闭或web应用移除出容器时,随着web应用的销毁而销毁。 1.获取ServletContext servletConfig.getServl...

weixin_30925411的博客 143

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: ASP.NET 用FileLoad上传文件
下一篇: 常用汉字的unicode 编码
JustForSS
博客等级 码龄13年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值