一、ServletConfig概述
● ServletConfig是一个接口
● 当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet,ServletConfig的生命周期与Servlet一样
● ServletConfig封装的配置信息是键值对的形式
常用方法
方法 | 说明 |
String getInitParameter(String name) |
根据参数名返回对应的参数值 |
Enumeration getInitParameterNames() |
返回一个Enumeration对象,其中包含了所有的参数名 |
ServletContext getServletContext() | 返回代表当前web应用的ServletContext对象 |
String getServletName() | 返回Servlet的名称 |
二、ServletConfig配置
● 配置ServletConfig也是在web.xml文件中的 <servlet></servlet> 标签下进行的,需要使用<init-param></init-param> 标签将参数名和参数值包住,表示一个键值对,其中使用 <param-name></para-name> 表示参数名, <param-value></param-value> 表示参数值
● 一个 <init-param></init-param> 只能表示一个键值对
范例:
<servlet-class>com.liaoxiangqian.ServletConfigDemo</servlet-class> <!--配置encoding参数,使用一个init-param标签--> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!--配置desc参数,使用一个init-param标签--> <init-param> <param-name>desc</param-name> <param-value>this is ServletConfigDemo</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletConfigDemo</servlet-name> <url-pattern>/ServletConfigDemo</url-pattern> </servlet-mapping>
三、ServletContext概述
● Servlet容器启动时会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,ServletContext对象封装了当前Web应用的所有信息
● ServletContext可以配置和获得应用的全局初始化参数,可以实现多个Servlet之间的数据共享
● 生命周期:应用加载则创建,应用停止则销毁
四、ServletContext配置
● 在web.xml文件的 <web-app> 标签中,通过 <context-param> 标签来配置,其中他有两个子标签
● 子标签 <param-name> 表示全局初始化参数的key
● 子标签 <param-value> 表示全局初始化参数的value
范例:
<context-param> <param-name>globalEncoding</param-name> <param-value>UTF-8</param-value> </context-param> <context-param> <param-name>globaleDesc</param-name> <param-value>This is SevletContext</param-value> </context-param>
五、ServletContext的三个作用
获取Web应用程序的初始化参数:
1、Enumeration getInitParameterName() 方法用于返回包含所有参数名的Enumeration对象
2、String getInitParameter(String name) 方法用于根据参数名获取参数值
实现多个Servlet之间的数据共享:
方法名 | 说明 |
Enumeration getAttributeNames() |
返回包含所有域属性名的Enumeration对象 |
Object getAttribute(String name) |
根据域属性名返回域属性值 |
void removeAttribute(String name) |
根据域属性名从ServletContext中删除对应的域属性 |
void setAttribute(String name,Object obj) |
设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
注意:域属性指的是可以共享的数据,即可以被多个Servlet访问到
读取Web应用下的资源文件:
实际开发中有时会需要读取Web应用中的一些资源文件,为此ServletContext接口定义了一些
读取Web资源的方法,这些方法由依靠Servlet容器实现,可以根据资源文件相对Web应用的
路径,返回关联资源文件的IO流、资源文件的绝对路径等
相关方法:
方法名 | 说明 |
Set getResourcePaths(String path) |
返回一个Set集合,集合包含path指定路径下的子目录名称和文件名称但是不包含子目录下的文件名称,path以斜杠/开头表示Web应用的根目录 |
String getRealPath(String path) |
返回资源文件在服务器文件系统上的真实路径,参数path表示资源文件相对Web应用的路径,以斜杠/开头表示Web应用的根目录,如果不能将虚拟路径转为真实路径则返回null |
URL getResource(String path) |
返回映射到某个资源文件的URL对象,参数必须以斜杠/开头表示Web应用的根目录 |
InputStream getResourceAsStream(String path) |
返回映射到某个资源文件的InputStream输入流对象,参数path的传递规则与getResource()一致 |
总结:这四个方法中的path其实就是相对于Web应用的路径,以斜杆/开头