南京营销网站建设,网站运营需要哪些人员,网站数据分析怎么做,什么时候友情链接Java路径问题最终解决方案使用演示前言在《Java路径问题最终解决方案—可定位所有资源的相对路径寻址》一文中#xff0c;我给大家提供了一个助手类ClassLoaderUtil #xff0c;和它的public static URL getExtendResource(String relativePath)方法。这个方法能够接受“../”…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_shotmail.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 { // lets see if theres content there MultipartFile file command.getFile(); if (file null) { // hmm, thats strange, the user did not upload anything thrownew RuntimeException(上传文件出错未能成功上传文件); }else{ //部署上传的文件 this.getDeployProcessDefinition().deployProcessDefinitionTransaction(file.getInputStream()); File destFilenull; /** *使用自定义的方法实现了相对于classpath的相对路径寻址。 */ String uploadPathClassLoaderUtil.getExtendResource(../jbpm/upload/).toString(); String uploadFileuploadPathString.valueOf(new Date().getTime())_file.getOriginalFilename(); destFilenew File(new URI(uploadFile)); file.transferTo(destFile); } // well, lets 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