一、简介
ServletContext对象代表了我们的项目,名字就暗示出该对象的范围,一个web项目中只存在一个ServletContext对象,该对象的启动是随着项目的启动而启动,项目的停止而销毁。
二、创建
Servlet的创建有通常有四种方式:
1.ServletConfig类的getServletContext()方法
2.GenericServlet类的getServletContext()方法
3.HttpSession类的getServletContext()
4.ServletContextEvent类的getServletContext()方法
三、功能
1.获得全局配置参数
比如在web.xml的第一目录下有这么一段代码:
图1 web.xml中的<context-param>标签
那么就可以通过ServletContext对象读取到相应的参数,代码如下:
import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 获得servletContext对象 ServletContext sc = getServletContext(); //2 获得配置中的信息 String name = sc.getInitParameter("name"); Enumeration<String> en = sc.getInitParameterNames(); while(en.hasMoreElements()){ String key = en.nextElement(); System.out.println(key+"==>"+sc.getInitParameter(key)); } } }
2.Servlet之间就可以通信
①要通信的内容
import java.util.HashMap; import java.util.Map; //要通信的内容实体 public class Constant { public static String word; public static Object obj; public static Map<String,Object> map = new HashMap<String,Object>(); }
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; public class FServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 写一句话 ,让GServlet知道 Constant.word = "i love so so much!"; //送给FServlet东西 Constant.obj = "BMW"; //送女神一堆货 Constant.map.put("car", "QQ"); Constant.map.put("bag", "七匹狼"); //使用servletContext //1 获得servletContext对象 ServletContext sc = getServletContext(); //2操作sc对象中的map,存入键值对 sc.setAttribute("car", "mashaladi"); sc.setAttribute("bag", "coach"); } }
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //FServlet向我表白了. 我要看看说了什么. System.out.println("FServlet对我说"+Constant.word); System.out.println("FServlet送给我:"+Constant.obj); //从集合取 System.out.println(Constant.map.get("car")); System.out.println(Constant.map.get("bag")); //GServlet从servletContext中 取出FServlet送的礼物 //1 获得servletContext ServletContext sc = getServletContext(); //2根据键取出值 System.out.println("使用sc对象获得的值:"+sc.getAttribute("car")); } }
//获得servletcontext ServletContext sc = getServletContext(); //1>根据一个相对路径,获得 资源的流. 相对路径: 相对于项目根下. InputStream is = sc.getResourceAsStream("/WEB-INF/stu.xml"); System.out.println(is); //2>根据一个相对路径获得一个绝对路径. 相对路径: 同上 String path = sc.getRealPath("/WEB-INF/stu.xml"); System.out.println("绝对路径:"+path);<span style="white-space:pre"> </span> //3>获得当前servlet 所在目录下的stu.xml this.getClass().getResourceAsStream("stu.xml");
学习ServletContext的过程中,联想到学习MVC的时候不同Controller之间进行数据通信的TempData,都是对同一类性质的不同对象进行通信的,所以了解起来并不困难。在学习java的开始阶段,几个servlet相关的类很容易混淆,但是重复还是真理,遇见的多了,熟悉了,自然也就了解了。
原文:http://blog.csdn.net/zjx86320/article/details/44757705