Servlet第三篇【ServletConfig、ServletContext】

一、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新手,若有错误,欢迎指正!

posted @ 2020-04-18 10:52  跑调大叔!  阅读(193)  评论(0编辑  收藏  举报