Java路径问题最终解决方案使用演示

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工作流定义文件
 *并且把已上传的文件copyWeb应用程序根目录/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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序实现无限瀑布流

实现瀑布流 实现效果 有好几种方案 1.用column-count属性把页面元素分为俩列或多列来实现 2.用display flex 分列来展示页面 3.比如说用js实现 我今天介绍的就是第三种,因为前两种都会有局限,实现的效果我们希望是左右左右,而不是分成两列去显…

python canny检测_【数字图像分析】基于Python实现 Canny Edge Detection(Canny 边缘检测算法)...

Canny 边缘检测算法Steps:高斯滤波平滑计算梯度大小和方向非极大值抑制双阈值检测和连接代码结构:Canny Edge Detection|Gaussian_Smoothing||convolution.py|||convolution()||gaussion_smoothing.py|||dnorm()|||gaussian_kernel()|||gaussian_blur()|Sobel_Filte…

目标和执行

信息系统可以给各行各业带来巨大的价值,因为它可以取代很多手工劳动,并且代价很低,另外很多原来无法做到的事情都可以借助信息系统完成。因此,在IT业里,可以说机会很多,各种行业都需要开发信息系统&#xf…

[vue] 你了解vue的diff算法吗?

[vue] 你了解vue的diff算法吗? 我的理解:计算出虚拟 DOM 中真正变化的部分,并且只针对该部分进行 DOM 更新,而非重新渲染整个页面个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 …

java 拖放文字_myeclipse2014如何实现jsp中的html代码的文字拖放

本帖最后由 liyihongcug 于 2015-3-5 16:53 编辑把 jsp打开 (visual jsp editor)之后上班区 单击右键 show --- pallette就可以了感叹myeclipse确实强大的 标签技术强于.net mvc强。vs2013能实现iis无需安装的情况下 动态指定 某个页面为首选 启动 --------------------希望2…

leetcode 二叉树的层次遍历 II(Binary Tree Level Order Traversal II)

目录 题目描述:示例:解法:题目描述: 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例: 给定二叉树 [3…

[vue] vue首页白屏是什么问题引起的?如何解决呢?

[vue] vue首页白屏是什么问题引起的?如何解决呢? 1.打包后文件引用路径不对,导致找不到文件报错白屏 2.路由模式mode设置影响个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家…

一篇极好的 CSS 教程

这是我codeproject上面看到的极好的css教程,今日放上让大家看看,待我明日青岛归来翻译给大家看看。CSS stands for Cascading Style Sheets. This is a simple styling language which allows attaching style to HTML elements. Every element type as …

python增强对比度_python增加图像对比度的方法

python增加图像对比度的方法来源:中文源码网 浏览: 次 日期:2019年11月5日【下载文档: python增加图像对比度的方法.txt 】(友情提示:右键点上行txt文档名->目标另存为)python增加图像对比度的方法本代码实现的是,在旋转…

因缺思厅的绕过

看一下页面源码,看到source.txt。所以进入同目录下的source.txt 代码审计下,并且百度了一些函数。过滤了很多关键字,因此常规的SQL注入没有头绪。想了挺久,因为要满足三个条件。1:不能输入过滤的关键字2:只…

[vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?

[vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢? 你说的是vue内部的源码对Array数据的中转代理嘛 好像对push, shift等通用方法都做了代理吧! 因为它对中转的数据都做了监听个人简介 我是歌谣,欢迎和大家一起交流前后端知…

Python自制微信机器人:群发消息、自动接收好友

运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求、群发文章、自动回复等操作,但颇有不便。 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一下。好…

61条面向对象设计的经验原则

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。 -----Arthur J.Riel (1)所有数据都应该隐藏在所在的类的内部。p13 (2)类的使用者必须依赖类的共有接口&#xff0…

gesturedetector.java_我的flutter代码中的GestureDetector不起作用

我正在玩flip_card package(这个软件包会创建一张卡片,当你点击它时,它会翻转卡片并显示卡片的正面或背面) . 我想要做的是,每次点击卡片时显示不同的图像,并且卡片翻转到正面 .为此,我将flip_card example修改为有状态…

[vue] vue打包成最终的文件有哪些?

[vue] vue打包成最终的文件有哪些? vendor.js, app.js, app.css, 1.xxx.js 2.xxx.js如果有设置到单独提取css的话 还有 1.xxx.css ......个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 …

IronPython资料

Python文档:http://blog.csdn.net/ccat/category/9998.aspx A bit more on IronPython:http://blogs.msdn.com/aaronmar/archive/2006/02/16/a-bit-more-on-ironpython.aspx Python 2.5 中文Tutorial http://wiki.woodpecker.org.cn/moin/March_Liu/PyT…

记一次webpack4+react+antd项目优化打包文件体积的过程

背景 最近自己整了一个基于webpack4和react开发的博客demo项目,一路整下来磕磕碰碰但也实现了功能,就准备发到阿里云上面去看看,借用了同事的阿里云小水管服务器,配置完成之后首页加载花了十几秒,打开控制台network查看…

java hashedmap_Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出...

import java.util.*;/**一:Collection接口的* Map接口: HashMap(主要实现类) : HashedMap / LinkedHashMap /TreeMap* Map接口:对, 重复的键会进行值得覆盖 ,输出顺序和放入顺序是不一定可以保持顺序的!* 修改查询操作: 1.put(key, value), 2.remove(key) 3.putAll(其他map), 复…

[vue] vue如何优化首页的加载速度?

[vue] vue如何优化首页的加载速度? 补充下2楼: ssr直出, webpack压缩HTML/CSS/JS, 首屏css单独提取内联, 关键资源Proload, 图片:不缩放,使用webp、小图片base64,iconfo…

25岁了

忙了一天,在下午收到kk的email才想起来今天是自己的生日,应该请大家吃蛋糕的。想想这一年过得真快,2006这几个数字我还没有写惯,就要开始写2007了。时光如梭,一点都不假。 25岁啰,转眼间自己怎么就这把年纪…