ServletContext对象的使用以及其解决的问题

package com.cheng.servlet;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * ServletContext对象的学习
 * 1、问题:
 * 	不同用户的数据共享问题;
 * 解决:
 * 	ServletContext
 * 特点:
 * 	服务器创建
 * 	用户共享
 * 作用域:
 * 	整个项目内
 * 生命周期:
 * 	服务器启动到关闭
 * 使用:
 * 	获取ServletContext对象
 * //获取ServletContext对象
 * 第一种
 * 	ServletContext sc=this.getServletContext();	
 * 第二种
 * 	ServletContext sc1=this.getServletConfig().getServletContext();
 * 第三种方法
 * 	ServletContext sc2=req.getSession().getServletContext();
 * 使用SevletContext完成数据共享
 *	数据存储
 *		sc.setAttribute(String name,Object value);
 *	数据获取
 *		sc.getAttribute(String name);
 *	注意:
 *	不同的用户都可以对同一个ServletContext对象进行数据的存取;
 *	获取的数据不存在返回null。
 * 
 * 2、ServletContext还有其他的作用:
 * 	获取全局数据
 * 	sc.getInitParameter(String name);根据键的名字返回web.xml中配置的全局数据,返回String类型;如果数据不存在,返回null;
 * 	sc.getInitPatameterNames();返回键名的枚举;
 * 
 * 配置方式:
 * 注意,一组标签下只能存储一组键值对数据,多组数据可以声明多个进行存储;
 * 作用:将静态数据和代码进行解耦;
 * 
 * 3、获取项目webroot下的资源的绝对路径
 * 	String path=sc.getRealPath(String path);
 * 获取的路径为项目的根路径,path参数为项目根目录中的路径
 * 
 * 4、获取webroot下的资源的流对象;
 * 		InputStream is=sc.getResourceAsStream(path);
 * 注意:
 * 	此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用到类加载器
 * 
 * 
 * 
 * 
 * @author dell
 *
 */


public class ServletContextServlet extends HttpServlet {
	@SuppressWarnings("deprecation")
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		
		//获取ServletContext对象
		
		ServletContext sc=this.getServletContext();
		
		//第二种
		ServletContext sc1=this.getServletConfig().getServletContext();
		
		//第三种方法
		ServletContext sc2=req.getSession().getServletContext();
		
		System.out.println(sc==sc1);
		System.out.println(sc2==sc1);
		
		//使用ServletContext对象完成数据共享
		//数据存储
		sc.setAttribute("str", "ServletContext对象共享数据。");
		//获取项目web.xml的全局配置数据
		System.out.println(sc.getInitParameter("url"));
		System.out.println(sc.getInitParameter("port"));
		
		//获取webroot下的资源的绝对路径
		String path=req.getRealPath("/index.jsp");
		System.out.println(path);
		
		InputStream is=sc.getResourceAsStream("/index.jsp");
		
	}

}

 

你可能感兴趣的:(ServletContext对象的使用以及其解决的问题)