ServletContext
什么是ServletContext
当服务器启动时,服务器会为每一个Web应用创建一个唯一的ServletContext对象代表当前Web应用。每个Web应用中的Servlet共享一个ServletContext,所以Servlet之间就可以通过该对象来实现数据通信。ServletContext对象的生命周期是最长的,当服务器启动时被创建,服务器关闭或web应用被移出服务器时被销毁。
怎样获取ServletContext
通过ServletConfig的getServletContext()方法,我们可以获取一个ServletContext对象。
共有如下四种方式:
(1)调用ServletConfig类的getServletContext()方法
在init(ServletConfigconfig)方法中,使用ServletContext context=config.getServletContext();
(2)调用GenericServlet类的getServletContext()方法
其实这种方式也是调用ServletConfig类的getServletContext()方法,因为GenericServlet类实现了ServletConfig接口;
(3)调用HttpSession类的getServletContext()方法:
HttpSession也是一个接口,它有一个方法可以获取到ServletContext对象;
(4)调用ServletContextEvent类的getServletContext()方法
ServletContextEvent类只有一个方法,就是getServletContext(),
ServletContext功能详解
ServletContext是javaweb的四大域对象之一。
(javaweb的四大域对象:ServletContext、Request、Session、PageContext)
所有域对象都有存取数据的能力,是因为在域中存在一个map,数据是以key-value的形式存放在域中。以下是ServletContext存取域中数据的相关方法:
|
方法名 |
方法描述 |
|
void setAttribute(String name ,Object value) |
向域中存放数据,也称为域属性,例如:setAttribute(“pw”,”123”),表示向域中存放了一个域属性,属性名为”pw”,属性值为”123”,如果再次调用该方法,并向域中存放了同名的域属性,最后存的会覆盖以前存的。 |
|
Object getAttribute(String name) |
根据属性名称获取域中的属性值,使用该方法之前,一定要向域中存放数据,这样才能取出来。 |
|
void removeAttribut(String name) |
从域中移出指定属性名的域属性,包括属性名和属性值,如果参数name指定的域属性不存在,则本方法什么都不做。 |
|
Enumeration getAttributeNames() |
获得域中所有的域属性的名称,返回值类型是Enumeration |
示例如下:
(1)新建一个Servlet类,向ServletContext域中存放数据:
public class TestServlet extends HttpServlet{
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//向ServletContext域中存放域属性
ServletContext servletContext=getServletContext();
servletContext.setAttribute("name","chenfeng");
}
}
(2)再次新建一个Servlet类,根据属性名称获取ServletContext域中的属性值。
public class TestServlet2 extends HttpServlet{
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//从ServletContext域中获取域属性
ServletContext servletContext=getServletContext();
String value=(String)servletContext.getAttribute("name");
System.out.println(value);
}
}
ServletContext获取初始化参数
在web.xml文件中,不仅可以配置Servlet的初始化信息,还可以配置整个web应用的初始化信息。web应用初始化参数的配置方式具体如下所示:
<context-param>
<param-name>name</param-name>
<param-value>chenfeng</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>22</param-value>
</context-param>
<context-param>元素位于根元素<web-app>元素中,它的子元素<param-name>与<param-value>分别用来指定参数的名字与参数值。
要获取这些参数信息,可以使用ServletContext接口的getInitParameterNames()和getInitParameter(Stringname),它们分别是用来获取参数名和参数值。
示例如下:
(1)web.xml文件中整个web应用的初始化信息。
<context-param>
<param-name>name</param-name>
<param-value>chenfeng</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>22</param-value>
(2)新建一个Servlet类,通过ServletContext获取全局初始化参数。
public class ParamServlet extends HttpServlet{
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
ServletContext context=this.getServletContext();
String name=context.getInitParameter("name");
int age=Integer.parseInt(context.getInitParameter("age"));
System.out.println("name="+name+",age="+age); }
}
本文详细介绍了ServletContext的概念及其作用,包括如何获取ServletContext对象、其生命周期特点及如何使用相关方法进行数据的存储和检索。此外还介绍了如何利用ServletContext获取web应用的初始化参数。
1573

被折叠的 条评论
为什么被折叠?



