Javaパスの問題の最終的な解決策の使用方法のデモ
6199 ワード
例の背景
ClassLoaderUtil.getExtendResource()メソッドを使用してアドレスを指定するこの例は、SpringMVCフレームワークを使用してフロント開発を行うJavaEEプログラムです.ファイル部分をアップロードし、Apacheのcommons upload技術を使用しました.
このモジュールの機能は、JBossのワークフローエンジンJbpmのワークフロー定義ファイルをサーバにアップロードすることです.サーバに配備します.同時に、アップロードしたワークフロー定義ファイルをサーバの Webアプリケーションのルートディレクトリ/WEB-INF/jbpm/upload/ディレクトリの下で、参照に備えて!
ソース:
後記
ここでは,自分で実装したClassLoaderUtil.getExtendResource()メソッドを用いて,classpathに対する相対パスアドレッシングを実現した.
サーブレットContextインタフェースを使用して提供されるアドレス方法がありません.このようなコードは、JavaEE環境に依存せず、標準的なJavaSEに依存し、どんなJavaプログラムでも使用できます!
サーブレットContextインタフェースで提供されるアドレス方法を使用する場合は、getRealPath("/")メソッドではなく、getResource()メソッドまたはgetResourceAsStream()メソッドを使用してアドレスする必要があります.パラメータは「/」の先頭にある相対パスで、classpathの相対パスではなくWebアプリケーションのルートディレクトリの相対パスです.具体的な理由は、『JavaEEパストラップのgetRealPath』で詳しく説明しています.
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』で詳しく説明しています.