Java路径问题最终解决方案使用演示
前言
在《Java路径问题最终解决方案—可定位所有资源的相对路径寻址》一文中,我给大家提供了一个助手类ClassLoaderUtil ,和它的public static URL getExtendResource(String relativePath)方法。这个方法能够接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源。这样,我们就可以使用相对于classpath的路径,定位所有位置的资源!
本文中,我给大家提供了一个在JavaEE程序中使用这个便利方法寻找相对路径的代码实例。
在《JavaEE路径陷阱之getRealPath》一文中,探讨了JavaEE程序中资源寻址的问题,有兴趣的读者可以看看那篇文章。
Java路径问题最终解决方案使用演示
示例背景
使用ClassLoaderUtil.getExtendResource()方法进行寻址的这个示例,是一个JavaEE程序,使用了SpringMVC框架进行前台开发。上传文件部分,使用了Apache的commons upload技术。
这个模块的功能是,向服务器上传一个JBoss的工作流引擎Jbpm的工作流定义文件。然后把它部署到服务器上。同时,把上传的工作流定义文件保存到服务器的Web应用程序根目录/WEB-INF/jbpm/upload/目录下,以备查阅!
源代码:
import java.io.File;
import java.net.URI;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.withub.common.base.BaseController;
import com.withub.common.util.ClassLoaderUtil;
import com.withub.common.util.IDeployProcessDefinition;
import com.withub.wcms.UrlMap;
import com.withub.wcms.manage.deployProcessDefinition.jbpm.bean.FileUploadBean;
/**
 *@author沈东良shendl_s@hotmail.com
 *Nov27,2006 1:31:25PM
 *这个类负责上传并部署Jbpm工作流定义文件
 *并且把已上传的文件copy到Web应用程序根目录/WEB-INF/jbpm/upload/目录下,以备查阅!
 *
 */
publicclass UploadAndDeployJbpmProcessDefinition extends BaseController {
    /**
     *Service,部署本地上传的xml业务程序定义文件到服务器端的数据库!
     *本Bean是单例。 运行时,不set这个变量。只在初始化载入Spring容器时调用set方法。注意同步资源!
     */
    private IDeployProcessDefinition deployProcessDefinition;
    /**
     *这个方法,直接返回上传、部署工作流定义页面。这是为了用.page控制上传页面的访问权。
     *@paramrequest
     *@paramresponse
     *@return
     *@throwsException
     */
    public ModelAndView list(HttpServletRequest request,HttpServletResponse response) throws Exception{
      
       returnnew ModelAndView(UrlMap.map("manage.deployProcessDefinition.list"));
    }
   
    /**
     *
     *@paramrequest
     *@paramresponse
     *@paramcommand
     *@return
     *@throwsException
     */
    public ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,FileUploadBean command) throws Exception {
 
         
 
           // let's see if there's content there
           MultipartFile file = command.getFile();
           if (file == null) {
                // hmm, that's strange, the user did not upload anything
            thrownew RuntimeException("上传文件出错!未能成功上传文件!");
            
           }else{
            //部署上传的文件
              this.getDeployProcessDefinition().deployProcessDefinitionTransaction(file.getInputStream());
            File destFile=null;
            /**
             *使用自定义的方法,实现了相对于classpath的相对路径寻址。
             */
            String uploadPath=ClassLoaderUtil.getExtendResource("../jbpm/upload/").toString();
            String uploadFile=uploadPath+String.valueOf(new Date().getTime())+"_"+file.getOriginalFilename();
            destFile=new File(new URI(uploadFile));
            file.transferTo(destFile);
            
           }
 
            // well, let's do nothing with the bean for now and return
           //return super.onSubmit(request, response, command, errors);
           returnnew ModelAndView(UrlMap.map("manage.deployProcessDefinition.success"));
       }
   
    /**
     *@paramargs
     */
    publicstaticvoid main(String[] args) {
       /**
        *
        */
    }
    /**
     *@returnthedeployProcessDefinition
     */
    public IDeployProcessDefinition getDeployProcessDefinition() {
       returndeployProcessDefinition;
    }
    /**
     *@paramdeployProcessDefinitionthedeployProcessDefinitiontoset
     */
    publicvoid setDeployProcessDefinition(
           IDeployProcessDefinition deployProcessDefinition) {
       this.deployProcessDefinition = deployProcessDefinition;
    }
}
后记
这里,我使用了自己实现的ClassLoaderUtil.getExtendResource()方法,实现了相对于classpath的相对路径寻址。
没有使用ServletContext接口提供的寻址方法。这样的代码,不依赖于JavaEE环境,依赖的是标准的JavaSE,可以用在任何Java程序中!
如果你要使用ServletContext接口提供的寻址方法,那么请一定不要使用getRealPath(“/”)方法,而应该使用getResource()方法或者getResourceAsStream()方法寻址。参数应该是“/”开头的相对路径,相对的是Web应用程序根目录的相对路径,而不是classpath的相对路径。具体原因,在《JavaEE路径陷阱之getRealPath》一文中作了详细的解释。

转载于:https://www.cnblogs.com/armlinux/archive/2006/12/03/2391050.html

Java路径问题最终解决方案使用演示相关推荐

  1. Java路径问题最终解决方案

    http://blog.csdn.net/shendl/article/details/1427475  Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难 ...

  2. Java路径问题最终解决方案—可定位所有资源的相对路径寻址

    Java路径问题最终解决方案-可定位所有资源的相对路径寻址 @(JAVA)[java] http://www.cnblogs.com/0616–ataozhijia/p/4094952.html ht ...

  3. java虚拟机资源根目录_Java路径问题最终解决方案—可定位所有资源的相对路径寻址 - java - CSDN技术......

    Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难搞.最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题. 我编写了一个方法,比 ...

  4. ASP.NET 链接 Access 数据库路径问题最终解决方案

    当做小项目用 ASP.NET + Access 数据库时,总是遇到数据库路径问题,本人以前的解决方法是每次访问数据库时,把链接字符串以参数的形式传到数据访问层,实施起来相当麻烦,这次找到了一个比较好的 ...

  5. java 右键获取路径,java路径

    Java NIO(十五) Path 的用法 Java路径接口是Java NIO 2更新的一部分,Java NIO在Java 6和Java 7中接收Java路径接口.Java路径接口已添加到Java 7 ...

  6. java 路径(相对路径和绝对路径)问题汇总【转】

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://ww ...

  7. 记录一次java.lang.ClassCastException的java类型转换异常解决方案-附最终解决方案

    自己的项目中,有个定时任务的模块,里面需要将返回的对象强转为某个实体类JobModel,可是在转换的过程中,却报出了java.lang.ClassCastException: com.jy.admin ...

  8. Java小白修炼手册--第四阶段--JDBC(Java Database Connectivity : Java访问数据库的解决方案 )

    目录 JDBC原理 JDBC标准 JDBC是什么 使用JDBC优点 JDBC接 口及数据库厂商实现 ​JDBC工作原理 Driver ( 驱动程序)接口及驱动类加载 ​Connection( 连接,关 ...

  9. oracle java javapath_系统找不到C:\ProgramData\Oracle\Java\javapath\java.exe问题及解决方案...

    前一段时间本人的电脑崩溃了,系统还原之后,eclipse就用不了,也找不大原因.eclipse报错原因是jvm出现问题:JVM terminated Exit code=2 C:\ProgramDat ...

最新文章

  1. 怎么在html中写当前时间,当前时间(Javascript)在HTML
  2. PyTorch | (2)PyTorch 入门-张量
  3. 【电信业务】【原则与规范】SOA 面向服务架构
  4. Linux内核社区是数字军火商、斯拉夫兵工厂甚至NSA的最爱
  5. 计算机科学与技术专家报告内容,计算机科学与技术专业设计报告大学内容.docx...
  6. python elasticsearch update_使用python的elasticsearch部分更新
  7. mysql重建索引_mysql创建、删除、重建、删除索引的操作命令的一些总结
  8. 前苹果员工创办激光雷达公司,获4500万美元融资,曾参与苹果机密项目
  9. MySQL使用命令导出/导入数据
  10. python输入函数设计_(董付国)Python 学习笔记---Python函数设计与使用(3)
  11. 发现同义词 python_查找相似/同义词/上下文单词Python
  12. red5流媒体服务器安装
  13. 最近整理电脑硬盘,分享几个小巧实用的软件下载,持续更新
  14. 多媒体计算机技术2017年四月,自考软件工程:2017年10月07167多媒体计算机技术历年真题及答案...
  15. MySQL-5.5-winx64 安装包下载
  16. spring学期总结
  17. 手机信令数据怎么获得_如何运用手机信令大数据辅助城市规划决策
  18. vscode 推荐premiter_精选!15 个必备的 VSCode 插件
  19. java和c#通过esb服务互调用组件
  20. <Zhuuu_ZZ>Map接口和equals重写

热门文章

  1. Vue项目中遇到了大文件分片上传的问题
  2. Iphone表视图的简单操作
  3. 【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服务器解决方案
  4. MyBatis之输入与输出(resultType、resultMap)映射
  5. 关于tomcat Post 数据参数的问题
  6. BZOJ5292 洛谷4457 LOJ2513:[BJOI2018]治疗之雨——题解
  7. 第 132 章 Example
  8. mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间
  9. 交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...
  10. 苹果自己设计芯片,但是还是绕不过高通