用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流来读取,当然一定要得到绝对路径 代码如下: