`

websphere下郁闷的java类路径获取

 
阅读更多
一此不安全的做法:

1. new File(path),这个方法的路径到底在那里取决于调用java命令的起始位置定义在哪里,

tomcat/bin下面的catalina.bat调用了java,所以在tomcat下相对起始位置是tomcat/bin,但是eclipse启动时,起始位置 是eclipse的项目路径。


2.类.class.getClassLoader().getResource("").getPath()

如果使用了此方法,这把决定权交给了类加载器,例如tomcat的类加载是非委托机制的,而weblogic的类加载是委托的。大部分情况下是安全的。

3.类.class.getResource("")

这是个好方法,但局限性在于如果类文件在jar中的话,那么在打jar包时需要将文件夹一起打进去,否则会返回null,jar文件实际上就是zip文件,zip文件中:文件就是文件,文件夹是文件夹,不是关联在一起的,很多开源的jar包就没有把目录打进去只打了classes文件,虽然你能年到目录层次结构,但是调用类.class.getResource("")会返回null.因为文件的目录结构和文件夹本身是两回事。




取得类路径的安全做法:取得类本身在系统中存储文件位置,然后根据包层次一直找到classpath下面:


package com.wbtask;

import java.io.File;
import java.net.URL;

public class UrlUtil {
    /**
     * 取得当前类所在的文件
     * @param clazz
     * @return
     */
    public static File getClassFile(Class clazz){
        URL path = clazz.getResource(clazz.getName().substring(
                clazz.getName().lastIndexOf(".")+1)+".classs");
        if(path == null){
            String name = clazz.getName().replaceAll("[.]", "/");
            path = clazz.getResource("/"+name+".class");
        }
        return new File(path.getFile());
    }
    /**
     * 得到当前类的路径
     * @param clazz
     * @return
     */
    public static String getClassFilePath(Class clazz){
        try{
            return java.net.URLDecoder.decode(getClassFile(clazz).getAbsolutePath(),"UTF-8");
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return "";
        }
    }
   
    /**
     * 取得当前类所在的ClassPath目录,比如tomcat下的classes路径
     * @param clazz
     * @return
     */
    public static File getClassPathFile(Class clazz){
        File file = getClassFile(clazz);
        for(int i=0,count = clazz.getName().split("[.]").length; i<count; i++)
            file = file.getParentFile();
        if(file.getName().toUpperCase().endsWith(".JAR!")){
            file = file.getParentFile();
        }
        return file;
    }
    /**
     * 取得当前类所在的ClassPath路径
     * @param clazz
     * @return
     */
    public static String getClassPath(Class clazz){
        try{
            return java.net.URLDecoder.decode(getClassPathFile(clazz).getAbsolutePath(),"UTF-8");
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return "";
        }
    }
   
    public static void main(String[] args){
        System.out.println(getClassFilePath(UrlUtil.class));
        System.out.println(getClassPath(UrlUtil.class));
    }

}
分享到:
评论

相关推荐

    学习使用WebSphere MQ for Java编程

    这通常涉及到更新系统级别的环境变量,或者在应用程序启动时指定适当的类路径。 7. 开发与应用 在实际开发中,开发者会使用 WebSphere MQ 提供的 API 来创建、打开和管理消息队列,发送和接收消息。这些 API 包括...

    websphere mq using java

    - **CLASSPATH**:包含 WebSphere MQ Java 类库的路径。 ##### 特殊配置 对于 z/OS 和 OS/390 平台,还需要进行 STEPLIB 配置,以确保能够正确加载必要的共享库。 #### 五、核心知识点详解 ##### WebSphere MQ ...

    Java下操作IBM Websphere MQ的项目案例

    8. **Eclipse工程配置**:为了运行这个项目,你需要在Eclipse中创建一个Java工程,并将IBM MQ的JAR文件添加到项目的类路径中。此外,确保你的系统已经安装了IBM MQ客户端,这样项目才能找到所需的库文件。 9. **...

    Java监控WebSphere MQ 7.5中间件信息

    Java监控WebSphere MQ 7.5中间件信息主要涉及到的是如何使用Java编程语言与IBM的WebSphere MQ消息中间件进行交互,以便收集、分析和管理MQ的运行时信息。WebSphere MQ,以前被称为MQSeries,是IBM提供的一种企业级的...

    WebSphere Application Server V7 理解类装入器 中文翻译版

    这段代码展示了如何通过`System.getProperty()`方法获取各种类路径信息,这对于调试类加载问题非常有用。 #### 总结 理解和正确配置WebSphere Application Server V7中的类装入器对于确保应用程序的稳定运行至关...

    IBM WebSphere MQ Java编程(中文版)

    ### IBM WebSphere MQ Java编程(中文版)知识点详解 #### 一、概述 IBM WebSphere MQ 是一款业界领先的消息中间件产品,它提供了一个可靠、高效的信息传递平台,支持多种平台之间的消息通信。本文档主要介绍了如何...

    WebSphere安装、配置与WEB应用部署教程.rar

    WebSphere是一款由IBM开发的企业级应用服务器,是Java EE(现在称为Jakarta EE)平台的实现,用于构建、运行和管理企业级Web应用程序。本教程将深入探讨WebSphere的安装、配置以及WEB应用的部署过程。 一、...

    IBM WebSphere MQ V7 jar

    开发人员只需将这个lib文件夹添加到项目的类路径(classpath)中,就可以在代码中使用IBM WebSphere MQ的API了。 使用IBM WebSphere MQ的Java API,可以实现以下功能: - 创建和打开MQ队列。 - 发送和接收消息。 - ...

    websphere安装与配置

    通常情况下,建议选择“自定义”以获得更多控制权。 - 配置安装路径,一般默认即可,除非有特殊要求。 - 设置管理节点和管理服务器的详细信息,例如:节点名称、管理服务器主机名(默认为 `127.0.0.1`)、管理...

    IBM WEBSPHERE

    WebSphere不仅支持Java EE标准,还提供了丰富的集成工具和服务,使得企业能够快速响应市场变化,提高业务灵活性和效率。 ### IBM WebSphere的关键特性与功能 #### 软件页面资源指南 IBM WebSphere的官方网站提供...

    在WebSphere发布CXF注意事项

    7. **JAXB绑定**:如果使用JAXB进行XML到Java对象的转换,确保JAXB上下文工厂和绑定文件已正确配置,并且在WebSphere的类路径中可用。 8. **错误处理**:处理CXF和WebSphere之间的异常,例如,WebSphere可能会捕获...

    WebSphere配置数据库连接池

    接着,选择实施类型,并输入数据库驱动的类路径信息,包括驱动的完整路径,确保路径正确无误,避免末尾的斜杠。最后,保存配置以供后续使用。 接下来是配置数据源。数据源是应用程序获取数据库连接的接口,它通常...

    websphere 配置sqlserver2000所需要的jar

    在“类加载器”选项中,将下载的JDBC驱动jar文件(例如`sqljdbc4.jar`)上传到WebSphere的类路径,通常是在`WEB-INF/lib`目录下。 6. 测试数据源连接,确保配置正确无误。 7. 最后,保存并激活更改,使新的数据源...

    websphere.pdf

    - 配置类路径: 应用程序服务器 &gt; server1 &gt; 进程定义 &gt; Java虚拟机中配置类路径,通常需要加入`js.jar`等必要的库文件。 - 配置JVM启动参数: 在一般JVM变量编辑框中填入必要的参数,如`-Dfile.encoding=GBK -D...

    手把手教你WebSphere部署

    - 如果类路径中包含环境变量,如`${ORACLE_JDBC_DRIVER_PATH}`,则需要在“环境-&gt;管理WebSphere变量”中定义相应的环境变量。 - 设置环境变量的值,例如将Oracle的JDBC驱动放在`d:\jdbcdriver`目录下,则环境变量...

    WebSphere6.1安装配置手册

    - **类路径配置**:在应用程序服务器 &gt; server1 &gt; 进程定义 &gt; Java 虚拟机中配置类路径,例如加入 js.jar 文件。 - **启动参数配置**:在一般 JVM 变量中添加启动参数 `-Dfile.encoding=GBK -Ddefault.client....

    Websphere下oracle连接池的配置

    2. **Oracle JDBC驱动**:为了在Websphere中使用Oracle数据库,需要将Oracle的JDBC驱动jar包路径设置到环境变量`ORACLE_JDBC_DRIVER_PATH`中,这样Websphere才能识别并加载驱动。 3. **JDBC提供程序**:在Websphere...

    Websphere 上部署Richfaces 3.10 Demo

    2. RichFaces 3.10的库文件:通常包含jar文件,这些文件将被添加到项目的类路径中。 3. RichFaces 3.10 Demo应用程序:这是一个包含源码和配置文件的示例项目,展示了RichFaces组件的用法。 部署步骤如下: 1. **...

    websphere6配置oracle10数据源

    - 需要下载Oracle JDBC驱动(ojdbc.jar)并将其添加到WebSphere的类路径中。 - 可以将jar文件放到WebSphere的`lib`目录下,或在管理控制台的“类加载器”部分进行配置。 3. **创建JNDI数据源**: - 回到管理...

Global site tag (gtag.js) - Google Analytics