六祎:ServletContext
一个项目只有一个ServletContext对象
我们可以在 N 多个Servlet 中来获取这个唯一的对象,使用它可以给多个Servlet传递数据!
课时13:https://edu.aliyun.com/lesson_1700_13650#_13650
1.ServeltContext概述
服务器为每个应用创建一个ServeltContext对象
1) ServletContext对象创建是在服务器启动时完成的
2) ServletContext对象的销毁实在服务器关闭时完成的
1.1 ServletContext 对象的作用时在整个web应用的动态资源之间共享数据
例如在Aservlet中向ServletContext对象中保存一个值,然后再BServlet中就可以获取这个值,这就是
共享数据
2. 获取ServletContext
在Servlet中获取ServletContext对象
1)在 void init( ServletConfig config)中:SerevletContext context = config.getServletContext();
--ServletConfig类的getServletContext()方法可以用来获取ServletContext对象
2)在GenericServlet或HttpServlet中获取Servlet对象
--GenericServlet类由getServletContext()方法,
所以可以直接使用 this.getServletContext()来获取
3.域对象的功能
域:对象就是用来在多个Servlet中传递数据的
必须有存储数据功能
必须要有取数据的功能
ServletContext时 javaweb四大域对象之一、
PageContext
ServletRequest
HttpSession;
ServletContext;
所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面时ServletContext对象
用来操作数据的方法
1) void setAttibute(String name,Object value) : 用来存储一个对象,也可以称之为存储一个域属性
例如: servletContext.setAttribute("xxx","XXX"),在ServletContext中保存了一个域属性
域属性名称为xxx,域属性的值为XXX
请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性和Map相同;
2)Oject getAttribute(String name) : 用来获取ServletContext中的数据,当前在获取之前需要先去存储
,例如:String vlaue=(String)serletContext.getAttribute("xxx");--->获取名为 xxx的域属性
3)void remoteAttribute(String name) : 用来以移除 ServletContext中的域属性,如果参数 name
指定的域属性不存在,那么本方法什么都不做
4)Enumeration getAttributeName():获取所有域属性的名称
3.1实操上代码:
新建一个Web项目,创建一个AServlet类,并继承HttpServlet,使用doGet()方法
* 演示ServletContext中保存数据
*
* @author 肖龙鸿
* 2019年9月28日
*
*/
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 1.获取ServletContext对象
* 2.调用setAttribute()方法保存数据
*/
ServletContext application =this.getServletContext();
application.setAttribute("name","张三");
}
}
3.2创建一个BSservlet类,
package cn.lystudio.Servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author 肖龙鸿
*
*
*2019年9月28日
*
*/
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 1.获取SerevletContext对象
* 2.调用getAttribute()方法完成获取数据
*/
ServletContext application = this.getServletContext();
String name = (String) application.getAttribute("name");
System.out.println(name);
}
}
-----------------------------------------------------------------------------------------
web.xml配置文件 :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>cn.lystudio.Servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
<!-- HttpServlet -->
<servlet>
<servlet-name>bservlet</servlet-name>
<servlet-class>cn.lystudio.Servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bservlet</servlet-name>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
</web-app>
浏览器先访问AServlet,后再访问BServlet,可在控制台查看获取数据成功!
恭喜你,已完成使用ServletContext获取数据!
下一步,4.获取应用初始化参数
新建一个CServlet类,继承HttpServlet类,doGet()方法
并配置web.xml
package cn.lystudio.Servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 演示ServletContext获取公共的初始化参数
* @author 肖龙鸿
*
*
*2019年9月28日
*
*/
public class CServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/**
* 1.得到ServletCo'n'text
* 2.调用它getInitParameter(String )得到参数
*/
ServletContext application = this.getServletContext();
String value = application.getInitParameter("context-param");
System.out.println(value);
}
}
-----------------------------------------------------------------------------------------
配置web.xml
<!-- HttpServlet CServlet-->
<servlet>
<servlet-name>cservlet</servlet-name>
<servlet-class>cn.lystudio.Servlet.CServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cservlet</servlet-name>
<url-pattern>/CServlet</url-pattern>
</servlet-mapping>
//这里配置获取初始化参数的配置
<context-param>
<param-name>context-param</param-name>
<param-value>context-value</param-value>
</context-param>
浏览器访问CServlet,然后再控制台输出context-param
恭喜,你已完成使用ServletContext获取初始化参数