Javaパスの問題の最終的な解決策の使用方法のデモ

6199 ワード

例の背景
ClassLoaderUtil.getExtendResource()メソッドを使用してアドレスを指定するこの例は、SpringMVCフレームワークを使用してフロント開発を行うJavaEEプログラムです.ファイル部分をアップロードし、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;

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に対する相対パスアドレッシングを実現した.
サーブレットContextインタフェースを使用して提供されるアドレス方法がありません.このようなコードは、JavaEE環境に依存せず、標準的なJavaSEに依存し、どんなJavaプログラムでも使用できます!
サーブレットContextインタフェースで提供されるアドレス方法を使用する場合は、getRealPath("/")メソッドではなく、getResource()メソッドまたはgetResourceAsStream()メソッドを使用してアドレスする必要があります.パラメータは「/」の先頭にある相対パスで、classpathの相対パスではなくWebアプリケーションのルートディレクトリの相対パスです.具体的な理由は、『JavaEEパストラップのgetRealPath』で詳しく説明しています.