ServletContext应用

  • WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
  • ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
  • 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象

ServletContext应用


1. 多个Servlet通过ServletContext对象实现数据共享

1)在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据

		// 获取Servlet通过ServletContex对象实现数据共享
		ServletContext context = this.getServletContext();
		// 存入共享的数据
		conext.setAttribute("name", "ssss");

2)在其他的Sevlet中利用ServletContext对象获取共享的数据

		// 获取ServletContext对象
		ServletContext context = this.getServletContext();
		// 获取共享的数据
		String name = (String)context.getAttribute("name");
		System.out.println("共享的数据的值是" + name);


2. 获取WEB应用的初始化参数

1) 在web.xml文件中配置需要的初始化的参数信息

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<context-param>
		<param-name>url</param-name>
		<param-value>jdbc:mysql://localhost:3306/3g</param-value>
	</context-param>
	<context-param>
		<param-name>user</param-name>
		<param-value>root</param-value>
	</context-param>
	<context-param>
		<param-name>password</param-name>
		<param-value>chizhidan</param-value>
	</context-param>
......
</web-app>

2) 在doPost中测试获取初始化参数的步骤

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

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

		/* 获取初始化参数 */

		// 获取指定名称的初始化参数
		String url = context.getInitParameter("url");

		// 获取web.xml文件中所有的初始化应用参数
		Enumeration<String> enumer = context.getInitParameterNames();
		while (enumer.hasMoreElements()) {

			String name = enumer.nextElement();

			String value = context.getInitParameter(name);

			System.out.println(name + "----" + value);

		}
......
	}




3. 实现Servlet的转发

		/* 要利用ServletContext对象实现转发获取对象 */
		ServletContext context = this.getServletContext();

		// 在request对象中存入name属性
		request.setAttribute("name", "redarmy");

		/* 根据转发的地址获取 RequestDispatcher对象 */
		REquesDspatcher rd = contex.getRequestDispatcher("/index.jsp");

		// 调用转发方法 以下采用任意方法即可
		rd.forward(request, response);



4. 利用ServletContext对象读取资源文件

A、利用ServletContext对象读取资源文件

		

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


// 方式一
URL url = context.getResource("WEB-INF/classes/db.properties");
InputStream is = url.openStream();




// 方式二
String path = context.getRealPath("WEB-INF/classes/db.properties");
// 根据文件的路径构建文件对象
File file = new File(path);
// 根据file文件对象创建输入流
InputStream is = new FileInputStream(file);



// 方式三
InputStream is = context.getResourceAsStream("WEB-INF/classes/db.properties ");



B、如果在非Servlet环境下要读取资源文件时可以采用类加载器加载文件的方式读取资源

		String path = Account.class.getClassLoader().getResource("db.properties").getPath();
		FileReader is = new FileReader(path);


C、解析Properties文件(解析方式都一样)

/* 解析properties文件 */

Properties prop = new Properties();

// 从输入流中读取属性列表(键和元素对)。
prop.load(is);


Set<String> set = prop.stringPropertyNames();


// 遍历set集合
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String key = it.next();
String value = prop.getProperty(key);
System.out.println(key + "-----" + value);
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/ful1021/p/4804321.html