JavaWeb系列教程|第八篇:ServletContext

时间:2022-03-27 12:53:29

1、介绍

        Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。

      由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为 application 对象(Web应用程序对象)。 

功能:
                ①获取WEB应用程序的初始化参数 
                ②记录日志 
                ③application域范围的属性 
                ④访问资源文件 
                ⑤获取虚拟路径所映射的本地路径 
                ⑥WEB应用程序之间的访问 
                ⑦ServletContext的其他方法 

        该对象代表当前 WEB 应用: 可以认为 SerlvetContext 是当前 WEB 应用的一个大管家. 可以从中获取到当前 WEB 应用的各个方面的信息.

2、可以由 SerlvetConfig 获取

    public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		// 获取 ServletContext 对象
		ServletContext servletContext = arg0.getServletContext();
	}

3、获取当前 WEB 应用的初始化参数

        设置初始化参数: 可以为所有的 Servlet 所获取,而 Servlet 的初始化参数只用那个 Serlvet 可以获取。

    <!-- 配置当前 WEB 应用的初始化参数 -->
    <context-param>
	    <param-name>driver</param-name>
	    <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
        方法:
                getInitParameter

                getInitParameterNames     

        public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		// 获取 ServletContext 对象
		ServletContext servletContext = arg0.getServletContext();
		String driver = servletContext.getInitParameter("driver");
		System.out.println("dirver:" + driver);
		Enumeration<String> names2 = servletContext.getInitParameterNames();
		while (names2.hasMoreElements()) {
			String name = names2.nextElement();
			System.out.println("-->" + name);
		}		
	}

        为WEB应用程序设置初始化参数的好处在于不需要修改Servlet源程序,就可以改变一些参数信息。

4、获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的路径

	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		// 获取 ServletContext 对象
		ServletContext servletContext = arg0.getServletContext();
		String realPath = servletContext.getRealPath("/WEB-INF/web.xml");
		System.out.println(realPath);
	}

5、获取当前 WEB 应用的名称

	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		// 获取 ServletContext 对象
		ServletContext servletContext = arg0.getServletContext();
		String contextPath = servletContext.getContextPath();
		System.out.println(contextPath);
	}

6、获取当前 WEB 应用的某一个文件对应的输入流

        getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录. 

	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		// 获取 ServletContext 对象
		ServletContext servletContext = arg0.getServletContext();
		try {
			Properties pros = new Properties();
			InputStream is = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
			System.out.println(is);
			pros.load(is);
			System.out.println(pros.getProperty("name"));
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}