`

计算类路径,计算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  
挺全的

相关推荐

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 ...

    Servlet3.1规范(最终版) PDF

    Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 ...

    classloader-servlet:Servlet 在 JEE 环境中查找类加载器路径并调试类加载问题

    将 Jar 放入应用程序的 /WEB-INF/lib 目录后,在应用程序上下文启动期间,您可以在应用服务器日志中找到: #################################### ## Classloader Servlet Is Enabled ## ## NOT RECOMMENDED FOR ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 ...

    java微信公众号MVC开发框架

    packages属性必须配置,里面是微信控制器包路径列表,WeixinDispatcherServlet在启动阶段会扫描包路径及其下面的子包路径,如果类拥有@Weixin注解,则该类会被当作微信控制器类加载到微信上下文。 除了packages属性...

    enhanced-wickettester:便捷地对检票口页面和组件进行测试的框架

    不需要servlet容器,因为它使用了模拟的servlet上下文和模拟的wicket应用程序。 在下面,可以测试渲染的页面和包含的组件。 这通常是通过选择组件路径为字符串的组件来完成的。 正如您所能想象的那样,这是重构页面...

    flow-cdi-addon

    此API创建的组件: @ Route,RouteLayout,HasErrorParameter组件@Id注入聚合物模板的组件字段默认情况下,实例化程序按类型(组件类)查找CDI bean,并从BeanManager获取上下文引用。 所有CDI功能都可以使用,例如...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    Struts2教程

    在本系列教程中 Web 工程的上下文路径都是 struts2 ,如果在 Web 根目录有一个 index.jsp 文件,则访问路径如下: http://localhost:8080/struts2/index.jsp 由于 MyEclipse6 目前并不支持 Struts2 ,所以我们需要到...

    Spring Boot中文文档.rar

    28.4.2.Servlet上下文初始化 扫描Servlet,过滤器和侦听器 28.4.3.ServletWebServerApplicationContext 28.4.4.自定义嵌入式Servlet容器 程序化定制 直接自定义...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    Natch-JerseyMVC:Natch-JSP 的 Jersey MVC 实现,即 android-manchester.co.uk

    整理上下文路径 删除注释以支持程序化 - 测试之前和之后的内存使用 为什么实时服务器上的 404 不是 404? 之后 排序和截断视图对象中的标签? 视图对象中每个线程的页面数? Bean 验证? 删除单个标签? 单独的...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Spring面试题

    ☆ Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域...

    springboot参考指南

    自定义管理服务器的上下文路径 iii. 41.3. 自定义管理服务器的端口 iv. 41.4. 自定义管理服务器的地址 v. 41.5. 禁用HTTP端点 vi. 41.6. HTTP Health端点访问限制 iv. 42. 基于JMX的监控和管理 i. 42.1. 自定义...

    《MyEclipse 6 Java 开发中文教程》前10章

    3.1.5 上下文菜单(Context Menu) 55 3.1.6 状态栏(Status Bar) 55 3.1.7 编辑器(Editor) 55 3.2 常见概念和操作 56 3.2.1 项目(Project) 56 3.2.2工作区(Workspace) 56 3.2.3 导入、导出Java项目 56 3.2.3.1 ...

Global site tag (gtag.js) - Google Analytics