通过classloader去获取web工程下的资源

servletContext01:

package com.yuming.servlet;

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

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

/**
 * Servlet implementation class servletContext01
 */
public class servletContext01 extends HttpServlet {


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		/*test01();*/
	    
		/*test02();*/
		
		test03();
	}
	
	/**
	 * 根据classloader去获取工程下的资源    类加载器(JDBC)
	 */
	private void test03() {
		try {
			// 1. 创建属性对象
			Properties properties = new Properties();
			
			//获取该java文件的class ,然后获取到加载这个class到虚拟机中的那个类加载器对象。
			
			/*
			 * ServletContext
			 * a路径--工程在tomcat里面的目录
			 * 			D:\tomcat\apache-tomcat-7.0.52\apache-tomcat-7.0.52\wtpwebapps\Demo03
			 * 
			 * ClassLoader 
			 * 
			 * a路径: D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03\WEB-INF\classes
			 * 
			 * 默认的lcassloader 的路径是上面这个路径,我们必须得回到Demo03这个目录下,才能进入file目录。如何回到上一级目录呢?
			 *  ../../  ---  D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03
			 * ../../file/config.properties  --- D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03\file\config.properties

			 * b路径: D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03\file\config.properties
			 */
//			System.out.println(getClass().getClassLoader());
			InputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
			properties.load(is);
			// 3. 获取name属性的值
			String name = properties.getProperty("name");
			System.out.println("name333333=" + name);
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 根据相对路径,直接获取流对象
	 */
	private void test02() {
		try {
		// 获取ServletContext对象
			ServletContext context = getServletContext();
			
			// 1. 创建属性对象
			Properties properties = new Properties();
			
			//获取web工程下的资源,转化成流对象。  前面隐藏当前工程的根目录。 
			/*
			 * 相对路径 (有参照物) 相对谁?
			 * 
			 * 		工程在tomcat里面的根目录。
			 * 
			 * 	a路径--工程在tomcat里面的目录
			 * 			D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03
			 * 	b路径---			
			 * 			file\config.properties
			 * 
			 * 			D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03\file\config.properties
			 * 	
			 * 
			 * 绝对路径 (没有参照物)
			 * 
			 * 		D:\all\apache-tomcat-8.0.33\wtpwebapps\ServletContext03\file\config.properties
			 * 
			 */
		
		
			InputStream is = context.getResourceAsStream("file/config.properties");
			properties.load(is);
			// 3. 获取name属性的值
			String name = properties.getProperty("name");
			System.out.println("name=" + name);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	

	/**
	 * 先获取路径,在获取流对象
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	private void test01() throws FileNotFoundException, IOException {
		// 获取ServletContext对象
				ServletContext context = getServletContext();
				//获取给定的文件在服务器上面的绝对路径。
				String path = context.getRealPath("file/config.properties");
				System.out.println("path="+path);
				
				// 1. 创建属性对象
				Properties properties = new Properties();
				InputStream is = new FileInputStream(path);
				properties.load(is);
				
				// 3. 获取name属性的值
				String name = properties.getProperty("name");
				System.out.println("name="+name);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>ServletContext03</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<description></description>
		<display-name>servletContext01</display-name>
		<servlet-name>servletContext01</servlet-name>
		<servlet-class>com.yuming.servlet.servletContext01</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>servletContext01</servlet-name>
		<url-pattern>/servletContext01</url-pattern>
	</servlet-mapping>
</web-app>

file/config.properties:

name=zhangsan

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值