servlet资源路径载入具体解释

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet资源路径载入具体解释相关的知识,希望对你有一定的参考价值。

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

































































































以上是关于servlet资源路径载入具体解释的主要内容,如果未能解决你的问题,请参考以下文章

Servlet容器如何处理请求资源路径

servlet 各种请求路径方法

servlet寻找资源的路径

java项目实战Servlet具体解释以及Servlet编写登陆页面

Servlet中关于路径的小结

JavaEE实战——Servlet入门Servlet生命周期绝对路径ServletContext