1.对于servlet的读取资源文件。要考虑project文件路径和tomcatserver的部署后的文件,所以一定要弄清楚载入文件路径位置。同一时候要考虑採用哪种方式:
一般有三种方式:
(1).採用传统方式即jdk中提供的InputStream is = new FileInputStream("config.properties");
(2).採用ServletContext对象载入
(3).採用类载入器的方式
2.用代码检验
package cn.wwh.www.web.servlet;
import java.io.File;
import java.io.FileInputStream;
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中读取的数据,载入的文件路劲的含义
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-7-28 上午11:24:05
*/
public class DealFilePath extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 採用传统的方式载入文件,比如载入的文件的路径为FileInputStream("config.properties")。此时代表的
* 路径的位置是在tomcatserver的bin文件夹下的一个文件config.properties
* 假设载入的路径是src/config.properties,则表示这个文件实在
* tomcatserver下的一个文件夹src中文件config.properties,对于传统方式(即jdk中)都是相对与bin文件夹而言
*
*/
/*InputStream is = new FileInputStream("config.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println("name:"+prop.getProperty("age"));
*/
/**
*用这样的方式载入的文件。“/”表示的是Summer_Exercise6这个文件夹
*即这样的载入文件的路径是相对于tomcat中webapps文件夹下的project文件名称而言
* 1.context.getResourceAsStream("/config2/config.properties")的
* 全路径是webapps/Summer_Exercise6/config2/config.properties
* 2.context.getResourceAsStream("/config.properties")的全路径是:
* webapps/Summer_Exercise6/config.properties
* 3.假设想载入project中src文件夹下的文件如config1/config.properties文件
* 应该这样写:/WEB-INF/classes/config1/config.properties
* 此时“/”仍然代表的文件路径是Summer_Exercise6
*/
/*ServletContext context = this.getServletContext();
InputStream is = context.getResourceAsStream("/config2/config.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println("name:"+prop.getProperty("name"));*/
ServletContext context = this.getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/classes/config1/config.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println("name1:"+prop.getProperty("name"));
/**
*採用类载入器的处理时,"/"表示的是当前project名下的src文件夹,即/WEB-INF/classes/
*cl.getResourceAsStream("/config1/config.properties")的全路径是:
*Summer_Exercise6/WEB-INF/classes/config1/config.properties
*/
// 返回当前字节码对象
Class clazz = this.getClass();
// 取得类载入对象
ClassLoader cl = clazz.getClassLoader();
// 通过类载入器载入资源文件
is = cl.getResourceAsStream("/config1/config.properties");
prop = new Properties();
prop.load(is);
System.out.println("name2:"+prop.getProperty("name"));
}
}
3.文件夹结构图:
(1)project文件夹图;
(2).tomcatserver的文件夹结构图。
4.对以上总结:
(1)假设以传统方式读取资源文件(txt/xml/properties),是相对于webserver的bin/文件夹而言
(2)假设以ServletContext方式读取资源文件(txt/xml/properties),是相对于webserver的当前web应用文件夹而言此时/表示:当前web应用,即Summer_Exercise6
(3)类载入器仅仅能载入IDE工具下src文件夹下的资源文件,其他文件夹无法载入此时/表示:/WEB-INF/classes/文件夹
(4)ServletContext和类载入器的差别:
ServletContext方式:
1)资源的文件的位置随意
2)载入文件时。仅仅会以流的方式读取,不会一次性载入所有
3)/表示当前web应用,即Summer_Exercise6
类载入器方式:
1)资源文件的位置仅仅能放置类路径下,即IDE工具的src文件夹下
2)载入文件时,会一次性载入所有文件
3)/表示当前/WEB-INF/classes/
注意:
1>物理硬盘路径使用\[window系统]
2>网络路径使用/
3> 假设/表示client路径的话,表示tomcat/webapps/文件夹