home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/Tomcat, Jetty と ServletContext.getRealPath() の末尾

Java/Tomcat, Jetty と ServletContext.getRealPath() の末尾

Java / Tomcat, Jetty と ServletContext.getRealPath() の末尾
id: 1073 所有者: msakamoto-sf    作成日: 2012-04-09 23:03:39
カテゴリ: Java 

Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) にて tomcat-maven-plugin を選択した理由に、
「実働環境はTomcatなのに、開発をJettyとすることで不要な地雷を踏み抜きそうな悪寒がした。」
と書きましたが、今思い出しました。

実際に地雷を踏み抜いていたから、わざわざTomcatを選んだのでした。

その理由は簡単で、javax.servlet.ServletContext#getRealPath("/") が返す文字列が、Tomcatの場合末尾が '/' 付きで、Jettyの場合末尾の '/' が付いてこない。で、件のEclipseプロジェクトでは

getRealPath("/") + "WEB-INF/foo/bar...";

としていたものだから(他人から引き継いだ既存プロジェクト)、Jettyに載せ替えようと思っても載せ替えられない。

実例:/work/tmp/mvntest/servlet1/src/main/webapp/WEB-INF/web.xml をdeploy

Tomcat上でのgetRealPath("/")
/work/tmp/mvntest/servlet1/src/main/webapp/
Jetty上でのgetRealPath("/")
/work/tmp/mvntest/servlet1/src/main/webapp

まぁ他にも地雷が埋まってそうだったので、素直にTomcatで打てる手が無いか探していた結果、tomcat-maven-plugin を見つけた次第です。
これだと、

getRealPath("/") + "WEB-INF/foo/bar..." 

がJettyだと

/work/tmp/mvntest/servlet1/src/main/webappWEB-INF/foo/bar...

になってしまい、ファイル操作が失敗してしまうという罠・・・。

この辺、もしかして仕様が決まってないのかな?JavaDoc確認しても、J2EE 1.3 と Java EE 6 の双方で、ディレクトリを指定した場合の末尾のPATH SEPARATORについて明確な言及がない。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-04-09 23:16:13
md5:0678b6d5496d9fd2d290e22c0a1b584b
sha1:d039bb659e5f18c8f00b8cc0be083b17f2dc9e29
コメント
コメントを投稿するにはログインして下さい。