用servletcontext读取properties文件-------1)

重点在于:InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/kms.properties");//获取properties内容。      这个地址是编译后的地址src文件夹就会消失,变成在WEB-INF文件夹中的classes里!

 properties位置的几种可能:

/WEB-INF/classes/kms.properties--------       》

/WEB-INF/classes/cn/itcaste/kms.properties------>

/kms.properties------------------------------------------>

 

用servletcontext读取properties文件-------2)

传统的io流属于相对路径,是相对于java虚拟机,目前也就是tomcat里的bin文件夹,所以在用之前要取绝对路径(这个方法的好处在于可以取到资源名字)

在dao层读取properties文件

如果读取配置文件不是servlet的话,就只能通过类装载器去读取了(不能传递serletcontext,因为降低层和层的耦合度)

demo:ServletDemo12

 

package cn.itcaste.web.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcaste.web.dao.UserDao;

/**
 * Servlet implementation class ServletDemo12
 */
@WebServlet("/ServletDemo12")
public class ServletDemo12 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		UserDao userdao=new UserDao();
		userdao.updata();
	}

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

}

 

 UserDao.java

/**
 * 
 */
package cn.itcaste.web.dao;

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

/**
 * @author: snowing
 * @date  : 2017年3月28日
 * 
 */
//如果读取配置文件不是servlet的话,就只能通过类装载器去读取了(不能传递serletcontext,因为降低层和层的耦合度)
public class UserDao {
	public void updata() throws IOException{
		
		InputStream in=UserDao.class.getClassLoader().getResourceAsStream("kms.properties");
		Properties props=new Properties();
		props.load(in);
		System.out.println(props.getProperty("url"));
	}

}

 kms.properties

结果输出:访问:http://localhost:8082/day04/ServletDemo12

控制台:jdbc:myaql://locahost:3306/test

 因为dao层多个方法都需要读取properties,所以可以用静态代码块(注意配置文件不要太大!)

读取properties文件细节:如果配置文件properties修改了,要得到实时的数据就不能用类装载器来读取了,

因为类只加载一次!!!!

所以用普通的io流来读取,当然一定要得到绝对路径         代码如下:

 

posted on 2017-03-28 11:25  Snowing杨雪莹  阅读(281)  评论(0)    收藏  举报