Servlet第三篇ServletConfigServletContext
Posted Java_biao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet第三篇ServletConfigServletContext相关的知识,希望对你有一定的参考价值。
一、ServletConfig对象
ServletConfig是一个接口,它的对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它。
该接口中有4个方法:
String getInitParameter(String name):通过参数名获取在web.xml中配置的初始化参数的值;
Enumeration getInitParameterNames():获取所有初始化参数的名称。返回一个迭代器(或者说集合)
String getServletName():获取Servlet在web.xml文件中的配置名称,即<servlet-name>指定的名称;
ServletContext getServletContext():获取ServletContext对象
ServletConfig对象对应web.xml文件中的<servlet>
元素。例如你想获取当前Servlet在web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取!
<servlet>
<servlet-name>One</servlet-name>
<servlet-class>cn.itcast.servlet.OneServlet</servlet-class>
<init-param>
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</init-param>
<init-param>
<param-name>paramName2</param-name>
<param-value>paramValue2</param-value>
</init-param>
</servlet>
在OneServlet中,可以使用ServletConfig对象的getInitParameter()方法来获取初始化参数,例如:
String value1 = servletConfig.getInitParameter(“paramName1”);//获取到paramValue1
二、ServletContext对象
(一)ServletContext概述
ServletContext也是一个接口,服务器会为每个应用创建一个ServletContext对象:
1、ServletContext对象的创建是在服务器启动时完成的;
2、ServletContext对象的销毁是在服务器关闭时完成的。
ervletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。
(二)获取ServletContext
-- ServletConfig 中的 getServletContext();
-- GenericServlet 中的 getServletContext();
-- HttpSession 中的 getServletContext();
-- ServletContextEvent 中的 getServletContext();
(三)ServletContext的作用
1、ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯(存取数据)。
2、ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息
3、利用ServletContext读取web站点的资源文件
4、实现Servlet的转发【用ServletContext转发不多,主要用request转发】
(四)作用的详细介绍
实现通讯(存取数据)
域对象的功能
ServletContext是Servlet三大域对象之一:
1、ServletContext;
2、ServletRequest;
3、Session
所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:
1、void setAttribute(String name, Object value):来存储一个对象,也可以称之为存储一个域属性,
2、Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,
3、void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;
4、Enumeration getAttributeNames():获取所有域属性的名称;
配置整个web站点的参数信息
1、Servlet可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!
2、ServletContext可以配置公共的初始化参数,为所有Servlet而用!
3、还可以使用ServletContext来获取在web.xml文件中配置的整个应用的初始化参数!
注意:应用初始化参数与Servlet初始化参数不同:
如下,就为整个应用配置了两个初始化参数:
<context-param>
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</context-param>
<context-param>
<param-name>paramName2</param-name>
<param-value>paramValue2</param-value>
</context-param>
ServletContext context = this.getServletContext();
String value1 = context.getInitParameter("paramName1");
String value2 = context.getInitParameter("paramName2");
System.out.println(value1 + ", " + value2);
Enumeration names = context.getInitParameterNames();
while(names.hasMoreElements()) {
System.out.println(names.nextElement());
}
读取web站点的资源文件
1、获取真实路径 : servletContext.getRealPath(String path)
2、获取资源类 : servletContext.getResourceAsStream(String path)
3、获取指定目录下所有资源路径 : servletContext.getResourcePaths(String path)
-- 本方法的路径必须以“/”开头
-- 本方法返回一个Set集合
补充:
获取类路径下资源
类路径:对一个JavaWeb项目而言,就是/WEB-INF/classes和/WEB-INF/lib/每个jar包!
方法一:
Class类的getResourceAsStream(String path):
-- 路径以“/”开头,相对classes路径;
-- 路径不以“/”开头,相对当前class文件所在路径,例如在cn.itcast.servlet.MyServlet中执行, 那么相对/classes/cn/itcast/servlet/路径;
方法二:
ClassLoader类的getResourceAsStream(String path):
-- 相对classes路径;
Java新手,若有错误,欢迎指正!
以上是关于Servlet第三篇ServletConfigServletContext的主要内容,如果未能解决你的问题,请参考以下文章