六祎: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 Cadillac-x
 * 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 Cadillac-x
 *
 *
 *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获取初始化参数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值