servlet资源路径载入具体解释(3)

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/文件夹



转载于:https://www.cnblogs.com/ljbguanli/p/7389015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值