`

计算类路径,计算Servlet上下文路径

阅读更多

 

---------------------取Servlet上下文路径,取WebContent的路径 --------------------------------
1、String path = request.getRealPath("/cfg.xml")  (已不建议使用)
2、String path = request.getSession().getServletContext().getRealPath("/cfg.xml");

---------------------读取类路径中的文件 --------------------------------

一、getResource方法

 

//获取类的根路径classes/(重要)

URL s2 = Test.class.getResource("/");

String path2=s2.getPath();//如果路径有空格会使用 %20替代

 

//获取Test.class类文件所在的路径(重要)

URL s3 = Test.class.getResource("");

String path3=s3.getPath(); //如果路径有空格会使用 %20替代

 

//  %20 转换为 空格(方案二)
String path4=s2.toURI().getPath(); //s2是URL s2
System.out.println(path4);

 

//  %20 转换为 空格(方案二)

String path="file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/server-node.properties";
path = java.net.URLDecoder.decode(path, "UTF-8");
System.out.println(path);

 

二、getResourceAsStream方法

 

//在classes目录找文件a.txt

InputStream is = Test.class.getResourceAsStream( "/a.txt"); 

 

//在ReadCard类所在目录找文件a.txt

InputStream is = Test.class.getResourceAsStream( "a.txt");

 


----------------------取类路径测试代码 -------------------------------

package com.hc360.config.util;

import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
// Test.class类文件实际路径是:E:/workspace3.6/configure huido/web/WEB-INF/classes/com/hc360/config/util/Test.class
// 配置文件的实际路径是E:\workspace3.6\configure huido\web\WEB-INF\classes\server-node.properties
// 注意configure huido中间有一个空格
// 下面开始测试,读取类路径中的文件
public class Test {
	public static void main(String[] args) throws Exception {
		//--------------取path-----------------------
		// 获取类的根路径classes/(重要)
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		// 参数也可以是:"/com/a.txt",在/com/目录下找文件a.txt
		URL s2 = Test.class.getResource("/");
		System.out.println(s2);

		// 获取Test.class类文件所在的路径(重要)
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/com/hc360/config/util/
		URL s3 = Test.class.getResource("");
		System.out.println(s3);

		// 从来都是null
		// 结果:null
		URL s4 = Test.class.getClassLoader().getResource("/");
		System.out.println(s4);

		// 获取类的根路径classes/
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		URL s5 = Test.class.getClassLoader().getResource("");
		System.out.println(s5);

		// 获取类的根路径classes/
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		URL s6 = Thread.currentThread().getContextClassLoader().getResource("");
		System.out.println(s6);
		
		//--------------取流InputStream-----------------------

		// 从类的根路径classes/下读取配置文件(重要)
		// 参数也可以是:"/com/a.txt",在/com/目录下找文件a.txt
		InputStream is = Test.class.getResourceAsStream("/server-node.properties");
		System.out.println("InputStream is:" + (is == null ? "null" : "not null"));

		// 在Test类所在目录找文件(重要)
		// 要在classes/com/hc360/config/util/下有server-node.properties文件,就可以读出来
		// 获取Test.class类文件所在的路径,读取配置文件(实际没有配置文件,所以返回null)
		InputStream is7 = Test.class.getResourceAsStream("server-node.properties");
		System.out.println("InputStream is:" + (is7 == null ? "null" : "not null"));

		// 从来都是null
		InputStream is2 = Test.class.getClassLoader().getResourceAsStream("/server-node.properties");
		System.out.println("InputStream is:" + (is2 == null ? "null" : "not null"));

		// 从类的根路径classes/下读取配置文件
		InputStream is3 = Test.class.getClassLoader().getResourceAsStream("server-node.properties");
		System.out.println("InputStream is:" + (is3 == null ? "null" : "not null"));

		//-------------------%20 转换为 空格--------------------
		//  %20 转换为 空格
		// 结果:file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/
		String path5=s2.toURI().toString();
		System.out.println(path5);
		
    	String path="file:/E:/workspace3.6/configure%20huido/web/WEB-INF/classes/server-node.properties";
    	path = java.net.URLDecoder.decode(path, "UTF-8");
    	System.out.println(path);
	}

}

 

 

分享到:
评论
1 楼 ziyeanlei 2012-10-07  
挺全的

相关推荐

    JavaWeb_servlet(11)_ 通过 ServletContex 获得类路径下的文件路径

    ServletContext是一个全局的上下文对象,它在整个Web应用程序中是唯一的,可以看作是整个Web应用的公共区域。它存储了与Web应用相关的共享信息,比如初始化参数、应用级的属性、以及对Web资源的访问。 当我们在类...

    JAVA类,JSP,Servlet获取工程路径.txt

    2. **利用`request.getContextPath()`获取项目的上下文路径:** - 示例:如果项目名为“TEST”,则调用此方法返回的路径为`/TEST`。 3. **利用`request.getServletPath()`获取当前页面的目录全名:** - 示例:...

    servlet路径问题

    Servlet路径问题在Web...开发者需要清楚地知道何时使用相对路径,何时使用绝对路径,以及它们如何与应用的上下文路径和服务器的根路径相互关联。这有助于避免路由混乱,确保请求能准确无误地到达目标Servlet或资源。

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - 在传统的Java Web项目中,通常将`javax.servlet.jar`和`javax.servlet.jsp.jar`添加到项目的类路径中,这可以通过在`WEB-INF/lib`目录下放置这两个jar包实现。 - 使用Maven或Gradle等构建工具时,可以在pom.xml...

    Servlet中文API文档 servlet

    6. **Servlet上下文**:ServletContext接口代表了整个Web应用的共享环境。它提供了一种在Servlet之间传递信息的方式,以及获取应用级的初始化参数。 7. **请求和响应对象**:HttpServletRequest和...

    用于servlet程序的开发的servlet-jar包

    开发者在构建web应用时,通常会将此jar包添加到项目的类路径中,以便能够利用Servlet API进行编程。 Servlet API主要包括以下几个关键概念和类: 1. **Servlet**:这是所有服务器端Java小程序的基类,实现了...

    servlet api servlet api

    - `ServletConfig`:存储Servlet的初始化参数和上下文信息。 - `ServletContext`:代表整个Web应用的共享环境,用于Servlet间通信和共享资源。 4. **Servlet配置**: Servlet通常在`web.xml`部署描述符文件中...

    servlet 心的练习

    4. `javax.servlet.ServletContext`:代表整个Web应用的上下文,可以获取应用范围内的信息,如初始化参数、资源路径等。 四、Servlet实战 在"day02"这个目录中,很可能包含了多个Servlet实例和相关的配置文件。你...

    Servlet 的API文档

    - `getContextPath()`: 获取Servlet上下文路径。 - `getAttribute(String name)`: 获取全局属性。 - `log(String message)`: 记录日志信息。 五、Filter和FilterChain 1. `Filter`:可以拦截和修改请求或响应,实现...

    javax.servlet.jar与javax.servlet.jsp.jar

    3. **javax.servlet.jsp.PageContext**:JspContext的实现,提供了对Servlet上下文、请求、响应、会话和应用程序范围的访问。 4. **javax.servlet.jsp.tagext.*包**:包含自定义标签库的接口和类,如Tag接口和...

    servlet源码

    ServletContext代表整个Web应用的上下文,提供全局信息,如Web应用的名称、初始化参数、MIME类型映射等。它还可以用来在所有Servlet之间共享数据。 7. **Servlet请求与响应** HttpServletRequest和...

    JavaWeb_servlet(10)_ 通过 ServletContex 获得根目录下的文件路径

    // 获取Servlet上下文 String rootPath = context.getRealPath("/"); // 获取根目录的物理路径 String imagePath = rootPath + "images/logo.png"; // 拼接文件路径 ``` `getRealPath("/")`返回的是Web应用的根...

    Servlet常用语法Demo

    `ServletContext`是整个Web应用的共享上下文,它可以用来在不同Servlet之间共享信息,或获取全局配置。例如,`getContextPath()`获取Web应用的根路径,`getAttribute()`和`setAttribute()`用于存储和获取数据。 8....

    Servlet3.1规范(最终版)

    Servlet3.1引入了异步处理能力,允许开发者在Servlet容器内部创建异步上下文(AsyncContext),从而将控制权交还给容器,避免了线程阻塞。这种方式使得服务器可以处理更多的并发请求,提高系统吞吐量。开发者可以在...

    Servlet中文api帮助文档

    五、Servlet上下文 `ServletContext`接口代表了整个Web应用的共享环境,它可以在所有Servlet之间传递信息。可以使用`getInitParameter()`获取全局初始化参数,`setAttribute()`和`getAttribute()`用于存储和检索对象...

    Java Servlet帮助文档

    监听器是实现了特定接口的对象,它们监听Servlet上下文、session和请求事件。例如,ServletContextListener可以监听上下文的初始化和销毁事件,HttpSessionListener可以监听会话的创建和失效事件。 综上所述,Java ...

    Servlet基础知识总结

    `ServletContext`是代表Web应用程序上下文的对象,它可以被多个Servlet共享。 ##### 2、`HttpServlet`对象介绍(接口) `HttpServlet`是抽象类,继承自`GenericServlet`,为HTTP协议提供了默认的实现。它重写了`...

    Servlet参考手册.zip

    7. **监听器(Listener)**:监听器是实现了特定接口的类,用于监听Servlet上下文、会话和请求事件。它们可以在Servlet的生命周期事件发生时自动执行代码。 8. **异步处理**:从Servlet 3.0开始,Servlet支持异步...

Global site tag (gtag.js) - Google Analytics