对servletContext作用的总结

原文链接:https://blog.csdn.net/weixin_44665028/article/details/100800388

ServletContextServlet 程序用来与 Web 容器通信。

web容器在启动时,它会为每个web程序都创建一个对应的ServletContext对象,它代表当前的web应用。

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

servletContext的作用:

1.获取应用的全局配置参数
2.获取web应用下的资源
3.实现各个servlet之间的资源共享

1. 获取应用的初始配置参数

首先在servle的配置文档web.xml里面加入一些全局配置参数

<context-param>
    	<param-name>name</param-name>
    	<param-value>cyh</param-value>
</context-param>

在项目里面的任意servlet我们都可以通过servletContext这个对象来获取这些初始化参数,代码如下:

//1.获取对象
ServletContext context = getServletContext();
//2.获取全局参数
String name = context.getInitParameter("name");
System.out.println("naem="+name);

2.获取web应用下的资源

有三种方式区获取web应用中的资源

1.获取资源在tomcat里面的绝对路径,使用getRealPath()方法,先获取路径再获取流对象.
2. 使用getResourceAsStream(),根据相对路径直接获取流对象
3.通过classloader(类加载器JDBC)去获取web工程下的资源

假设我们要获取一个叫config.properties的资源,它放在file文件夹下

第一种方式:根据t绝对路径获取(先获取路径在获取流对象)

//获取servletContext对象
ServletContext context = getServletContext();

 String path= context.getRealPath("file/config.properties");
 System.out.println("path="+path);

//1.创建属性对象
Properties properties = new Properties();

//2.指定载入的数据源

/*
 * 如果想获取web工程下的资源,用普通的FileInputStream是行不通的。
 * 原因出在路径上。这里相对的路径其实是jre来确定的。但这里是一个web工程
 * jre后面会由tomcat来管理,所以真正的相对路径是tomcat里的bin目录。
 */
 
InputStream is = new FileInputStream(path);
properties.load(is);

//3.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name); 

第二种方式:根据相对路径直接获取流对象

//获取servletContext对象
ServletContext context = getServletContext();

//1.创建属性对象
Properties properties = new Properties();
//获取web工程下的资源,将其转换为流对象。前面隐藏着当前工程的根目录。
InputStream is = context.getResourceAsStream("file/config.properties");
properties.load(is);
 
//2.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name);

第三种方式:通过classloader去获取web工程下的资源(通过类加载器)

//获取servletContext对象
ServletContext context = getServletContext();

//1.创建属性对象
Properties properties = new Properties();

//默认的classloader的路径是下面这个路径,我们必须得回到这个项目的目录下,才能进入file目录
//D:\tomcat\apache-tomcat-7.0.57\wtpwebapps\servletContextDemo\WEB-INF\classes
InputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
properties.load(is);
 
//2.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name);

3.实现各个servlet之间的资源共享

//先利用servletContext存入数据

//获取ServletContext对象
ServletContext context = getServletContext ();

//存入共享数据
context.setAttribute("name", "cyh");

//然后我们在其他servlet上就可以通过servletContext这个对象来获取这些数据了
String name = context.getAttribute("name");

本文章转载自:https://blog.csdn.net/weixin_44665028/article/details/100800388

上一篇:我的Java学习笔记(九)——Servlet


下一篇:servletcontext总结