servlet资源路径加载详解(3)

1.对于servlet的读取资源文件,要考虑工程文件路径和tomcat服务器的部署后的文件,所以一定要弄清楚加载文件路径位置,同时要考虑采用哪种方式:

一般有三种方式:

(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"),此时代表的

* 路径的位置是在tomcat服务器的bin目录下的一个文件config.properties

* 如果加载的路径是src/config.properties,则表示这个文件实在

* tomcat服务器下的一个文件夹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目录下的工程文件名而言

* 1.context.getResourceAsStream("/config2/config.properties")的

* 全路径是webapps/Summer_Exercise6/config2/config.properties

* 2.context.getResourceAsStream("/config.properties")的全路径是:

* webapps/Summer_Exercise6/config.properties

* 3.如果想加载工程中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"));

/**

*采用类加载器的处理时,"/"表示的是当前工程名下的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)工程目录图;

(2).tomcat服务器的目录结构图;

4.对以上总结:

(1)如果以传统方式读取资源文件(txt/xml/properties),是相对于web服务器的bin/目录而言

(2)如果以ServletContext方式读取资源文件(txt/xml/properties),是相对于web服务器的当前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> 如果/表示客户端路径的话,表示tomcat/webapps/目录

servlet资源路径加载详解(3)

时间: 2024-10-27 13:48:38

servlet资源路径加载详解(3)的相关文章

Javascript 异步加载详解(转)

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

Javascript 异步加载详解

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

javascript异步加载详解(转)

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

[转载]Javascript 同步异步加载详解

http://handyxuefeng.blog.163.com/blog/static/4545217220131125022640/ 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yo

WEB容器启动——web.xml加载详解

最近在看spring的源码,关于web.xml文件在容器(Tomcat.JBOSS等)启动时加载顺序问题很混乱,通过搜集资料,得出以下的结论: 1.加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:context-param -> listener -> filter -> servlet; 容器首先会去它的配置文件web.xml读取两个节点:  <context-param&

Javascript图片预加载详解

预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布,也可帮助用户在浏览你网站内容时获得更好的用户体验.本文将分享三个不同的预加载技术,来增强网站的性能与可用性. 方法一:用CSS和JavaScript实现预加载 实现预加载图片有很多方法,包括使用CSS.JavaScript及两者的各种组合.这些技术可根据不同设计场景设计出相应的解决方案,十分高效.

Javascript实现图片的预加载详解(转)

下面的函数实现了一个我们想要的最基本的图片预加载效果 function preloadimages(arr){ var newimages=[] var arr=(typeof arr!="object")? [arr] : arr //确保参数总是数组 for (var i=0; i<arr.length; i++){ newimages[i]=new Image() newimages[i].src=arr[i] } } 我们可以通过如下的方式加载我们想要的图片 preloa

Servlet 3.0 新特性详解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性详解 张 建平2010 年 4 月 23 日发布 WeiboGoogle+用电子邮件发送本页面 6 Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其

手把手教你构建 Android WebView 的缓存机制 &amp; 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.