ServletContext

本文深入探讨了ServletContext对象在Java Web开发中的角色、获取方式、如何读取web应用初始化参数、作为域对象使用及读取web资源的方法。重点讲解了如何利用ServletContext对象解决路径难题,并提供了类加载器读取资源的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. ServletContext对象

1.1. ServletContext对象概述

ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁。

 

1.2. 获取ServletContext对象

ServletConfig对象身上提供了getServletContext()方法可以用来获取ServletContext对象。

而在GenericServlet中提供了便捷的getServletContext(),我们编写的servlet继承自GenericServlet,所以可以直接调用此方法,便捷的获取ServletContext

1.3. ServletContext对象读取web应用初始化参数

我们可以在web.xml中利用<context-param>标签为整个web应用配置初始化信息

<context-param>

<param-name>encode</param-name>

<param-value>utf-8</param-value>

</context-param>

可以利用ServletContext对象的如下方法获取初始化信息:

ServletContext.getInitParameter();

ServletContext.getInitParameterNames();

之前我们在学习Servlet时,知道Servletweb.xml配置中可以配置初始化参数,但是这种初始化参数只能在该Servlet内部获取。而为整个web应用配置的初始化参数,通过ServletContext可在整个web应用中使用。

一般来说,整个站点的编码应该是一致的,所以我们可以修改之前的代码,将配给servlet的编码集改为整个站点配置,通过ServletContext获取。

 

1.3.1. ServletContext对象作为域对象使用

域:一个对象具有了可以被看见的范围,利用这个对象身上的Map,在这个范围内共享数据,这样的对象叫做域对象

javaweb开发中一共有4大域对象

ServletContext域:

作用范围:

整个web应用

生命周期:

当服务器启动web应用加载后立即创建代表这个web应用的ServletContext对象,一直驻留在内存中,唯一的代表这个web应用,直到服务器关闭或web应用被移除出容器时,随着web应用的销毁,ServletContext对象销毁

操作域的方法:

setAttribute(String name,Object obj);//向域中设置数据

Object getAttribute(String name);//从域中获取数据

removeAttribute(String name);//从域中移除数据

1.4. ServletContext对象读取web资源

1.4.1. 路径难题

web环境中读取资源时,如果写的是相对路径,则在tomcat/bin目录下寻找资源。如果写的是绝对路径,则在tomcat所在目录的根目录下寻找资源。如果写的是盘符开始的绝对路径可以正确找到资源,但是一旦改变了发布环境路径很可能是错的。我们发现无论怎么写路径都有问题。

1.4.2. ServletContext读取资源

面对路径难题,ServletContext为我们提供管理解决方法。

servletContext.getRealPath("xxxx");--这个方法会在传入的路径前拼接当前web应用的硬盘路径,从而拼接出资源的硬盘路径,从而可以找到资源。

这种方式没有将web应用的硬盘路径写死,所以即使换了一个发布环境,路径也是正确的

1.4.3. 类加载器读取资源

如果当前程序中没有ServletContext可以用,此时可以拜托类加载器帮我们加载资源:

类加载器可以加载.class文件,同样也可以加载其他类型的资源文件

ClassLoader上提供了getResource("相对于类加载目录的路径")可以加载资源,但是要求这个路径给一个相对于类加载器加载类的目录的路径(WEB-INF/classes

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值