Tomcat@Eclipse
Eclipseを動かしていてTomcat周りの設定がしっくりこなかったので少しまとめておく。
Eclipse内部に作るTomcatサーバ
これが少しわかりづらかった。ウィザードでぽんぽんと勝手にできるものなのだが、要はデバッグなどのためにEclipseから都度使用するTomcatのサーバを用意するというもの。そしてその実体は物理的なサーバというわけではもちろんなくて、当該PCにインストールしたTomcatを起動するときの設定(例えば引数など)の集合のことである。
Eclipse内のTomcatの設定は、例えば「デバッグ構成」の画面で確認できる。
起動引数とかも指定している感じ。デバッグするときはここで定義した方法でサーバを起動して実行しているのだね。
参考URL
Eclipse を使用しての Java サーブレット・プログラム開発 http://nntoa.web.fc2.com/java/1/4.html#11 (こちらにTomcat起動時のARP云々の話が書いてある。警告消したければここに書いてある手順を踏もう。)
JAVA_HOMEって誰が使うの
だいぶ前に環境変数に追加して、なんのために追加したかももはや覚えてなかったので改めて調べてみた。
Tomcatのもの
こいつを参照している代表格がTomcatである。Tomcatのbin配下のsetclasspath.batに以下のような記述があるよ。
rem --------------------------------------------------------------------------- rem Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings rem are valid and consistent with the selected start-up options and set up the rem endorsed directory. rem --------------------------------------------------------------------------- rem Make sure prerequisite environment variables are set rem In debug mode we need a real JDK (JAVA_HOME) if ""%1"" == ""debug"" goto needJavaHome rem Otherwise either JRE or JDK are fine if not "%JRE_HOME%" == "" goto gotJreHome if not "%JAVA_HOME%" == "" goto gotJavaHome echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined echo At least one of these environment variable is needed to run this program goto exit :needJavaHome rem Check if we have a usable JDK if "%JAVA_HOME%" == "" goto noJavaHome if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome set "JRE_HOME=%JAVA_HOME%" goto okJava :noJavaHome echo The JAVA_HOME environment variable is not defined correctly. echo It is needed to run this program in debug mode. echo NB: JAVA_HOME should point to a JDK not a JRE. goto exit :gotJavaHome rem No JRE given, use JAVA_HOME as JRE_HOME set "JRE_HOME=%JAVA_HOME%" :gotJreHome rem Check if we have a usable JRE if not exist "%JRE_HOME%\bin\java.exe" goto noJreHome if not exist "%JRE_HOME%\bin\javaw.exe" goto noJreHome goto okJava :noJreHome rem Needed at least a JRE echo The JRE_HOME environment variable is not defined correctly echo This environment variable is needed to run this program goto exit :okJava rem Don't override the endorsed dir if the user has set it previously if not "%JAVA_ENDORSED_DIRS%" == "" goto gotEndorseddir rem Set the default -Djava.endorsed.dirs argument set "JAVA_ENDORSED_DIRS=%CATALINA_HOME%\endorsed" :gotEndorseddir rem Set standard command for invoking Java. rem Note that NT requires a window name argument when using start. rem Also note the quoting as JAVA_HOME may contain spaces. set _RUNJAVA="%JRE_HOME%\bin\java" set _RUNJDB="%JAVA_HOME%\bin\jdb" goto end :exit exit /b 1 :end exit /b 0
このようにTomcatはベタでJAVA_HOME
を参照することにしている模様。TomcatのためにJAVA_HOMEをちゃんと設定してあげよう。
Tomcatのためだけじゃない
Tomcatに合わせて定義したJAVA_HOMEであるが、Tomcatのためだけに使われているわけではない。例えばわたしの環境では、以下のように環境変数Pathに溶け込んでいた。い、いつの間に!
これはRapid Environment Editorという神ツールで環境変数見た画面である。
こうしておくと、Tomcatが見るJDKと、PC上デフォルトで使用するJDKのバージョンを合わせることができる。逆に言うと合ってしまう。要注意な。
Tomcat以外にもJAVA_HOME
を見ている何かしらがあるそうなので、JAVA_HOMEを見てそうなやつがいたら注意深く観察する必要がある。場合もある。例えばAndroidSDKのインストーラがJAVA_HOMEを見ているようです。
参考:Android SDK のインストールエラー JAVAが見つからないエラー対処法はJAVA_HOMEの設定: 一番わかりやすいAndroidアプリ開発入門
クラスパスについて
クラスパスっていう言葉が腹落ちしないので掘り下げる。
クラスパス=classまでのパス=JDKツールの探し先
Javaのプログラムはclassの集合である。.javaのファイルを作成し、それをコンパイルして.classを作成する。その.classのファイルが組み合わさって一つのアプリケーションとなる。これははるか昔新人研修のころにやって覚えたことだ。
クラスパスっていうのは、その一つ一つのクラスがどこにあるのか、を定義したものだ。
組み合わさって動こうにも、どこにあるのかがわからなければクラスたちは組み合わさることができない。クラスたちを統括する誰かが「このクラスはここにあって、このクラスはここにある」というのを把握しているから、クラスたちは組み合わさることができる。これがクラスパスの基本である。
CLASSPATHは何者だ
クラスパスではなくCLASSPATH。
狭義のクラスパスとでも言おうか。これは環境変数
である。CLASSPATHという環境変数を宣言し、そこにクラスパスをいくつか指定してやると、JDKツール(java、jdb、javac、javahのことを言うらしい)は、このパスの中にもクラスを探しに行くことになる。
このように、「CLASSPATH」という環境変数を使ってクラスパスを設定することもできるが、これはアプリケーション個別で設定しているわけではなく、他のアプリケーションと齟齬がでてきてしまう可能性があるため、推奨はされていない模様。JDKツール(java、jdb、javac、javah)の-classpath
オプションを使用して、アプリケーション個々で設定したほうが良さそうである。
Eclipseのビルド・パス
Eclipseのビルド・パス設定画面のライブラリータブにずらーっと並んでいるjarは、パスが指定されているものであり、コンパイル時や実行時にこのパスのjarが検索対象となる。ビルド・パスと言っているが、クラスパスとほぼ同義な模様。
まとめ
HTML備忘(随時追加)
formの送信
formのmethodのデフォルトはGET。
GETの場合、データはURLの後ろにくっついて?と=と&で連結されてサーバに送られる(QueryString)。
Playframework備忘(随時追加)
routes.Application.index()
という書き方をする場合、routesファイルに
GET / controllers.Application.index()
という記述がなきゃダメ。
herokuのコマンド(随時追加)
sshでログイン
heroku run bash