ServletContext的使用

package com.franky.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

import com.franky.domain.UserDao;


/**
 * @作者 franky
 * @描述 ServletContext的应用,获取全局配置信息,或者全局属性,全局资源文件
 * @日期 2015-1-8 下午04:57:31
 */
public class ServletContext extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//作用一:获取全局web应用的配置参数 
		getInitParams();
		
		//作用二:获取全局属性
		getAttrs();
		
		//作用三:获取资源文件
		getResource();
		
		//作用四:进行信息的转发
		
		//从普通java类中获取资源文件
		getResourceFromOthers();
	}

	/**
	 * 从普通类中加载资源文件
	 */
	private void getResourceFromOthers() {
		UserDao dao = new UserDao();
		dao.update();
	}

	/**
	 * 利用ServletContex获取资源文件
	 */
	private void getResource() {
		//获取资源文件输入流,此种方式不能获取文件的名称
		InputStream ips = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
		//通过获取资源文件路径的方式,作用是可以获取资源文件的名称,比如作为下载使用
		String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
		String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
		System.out.println(fileName);
		
		//通过Properties读取资源文件
		Properties props = new Properties();
		try {
			props.load(ips);
			String name = props.getProperty("name");
			System.out.println(name);
		} catch (IOException e) {
			throw new RuntimeException(e+":资源文件不存在!");
		}
	}

	/**
	 * 利用ServletContex获取全局属性
	 */
	public void getAttrs() {
		String value = (String) this.getServletContext().getAttribute("aaa");
		System.out.println("attrs:"+value);
	}

	/**
	 *  利用ServletContex获取全局化的web应用参数
	 */
	public void getInitParams() {
		String value = this.getServletContext().getInitParameter("context-name");
		System.out.println("params:"+value);
	}

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

}

package com.franky.domain;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


/**
 * @作者 franky
 * @描述   通过类加载器获取资源文件
 * @日期 2015-1-8 下午05:41:44
 */
public class UserDao {
	private static Properties props = new Properties();
	
/*	静态代码块中获取连接数据库的属性,这样配置文件可以在类加载的时候只执行一次,避免重复执行
	但是,如果配置文件发生变动后,类加载的资源文件是不会随之更新的,如果需要获取最新的资源文
	件则需要通过普通的InputStream来实现读取*/
	static{
		//用类加载器来装载资源文件
		InputStream ips = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
		try {
			props.load(ips);
		} catch (IOException e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public void update(){
		String name = props.getProperty("name");
		String password = props.getProperty("password");
		System.out.println("name:"+name+"password:"+password);
	}
	
}


你可能感兴趣的:(servletContext)