Going my way

いいなと思ったことをメモしていきます。

JavaEE,Tomcatの設定等の周辺知識のまとめ


Advertisements


Javaを使ってWebアプリを作りたいときに、ぶち当たる壁。
それは環境構築の壁である。

URLを指定しても404エラーが出る。なぜ。
そもそもTomcatが起動しない。なぜだ。
weeb.xml,server.xml色々あって意味がわからない・・・。なんなんだ。

そんなとき、いつものようにgoogleを使って検索を試みるけれど、
基礎知識もないのに断片的な情報をネットで拾っても問題は解決しない。

webをさまよった後、僕は悟る。
googleは万能ではないと。


基礎に立ち戻り、本を読んだ。
その結果をまとめたのがこの記事である。


以下、書籍のまとめです。
詳しく知りたい人はこちらの本を読みましょう。


webアプリケーションとは
サーバ側で動作するアプリケーションのこと。
Java仕様書によれば、Webアプリケーションとは、サーブレットJSP、HTMLドキュメント、その他イメージファイル、圧縮されたアーカイブなどを含むリソース全体を集めてきたもの。

JavaEEとは
サーバ再度アプリケーションを実現する包括的な仕様のこと。
Enterprise Editionの略。
ちなみにJavaSEとは、Java Standard Editionのことであり、
JVM,JNDI,JDBC,Swingなど、JVM、標準API、デスクトップ環境APIを含むエディションのこと。

コンテナとは
サーバー側でWebアプリケーションを動作させるための実行環境のこと。
サーブレットの実行環境はWebコンテナ、JSPの実行環境はJSPコンテナという。
Webコンテナ、JSPコンテナを総称してWebコンテナということもある。

Tomcatとは
サーブレット/JSPの仕様に基づいて実装されたWebコンテナのこと。
Http通信処理機能もあるため、Webサーバとしても利用できる。

CATALINA_HOMEとは
Tomcatのルートのこと。
Tomcatでは、%CATALINA_HOME%\webapps以下にコンテキストルートを置くことが決められている。
コンテキストルートについては後述する。


Tomcatのインストール手順

linuxにインストールする場合
手順書.comが一番わかりやすかったです。
http://tejunsho.com/tomcat/20110331000102.html

ただし、この手順書の通り実行しても下記のエラーが出るため、
5のパッケージがなかったので「6」に変更。

(誤)#yum install tomcat5 tomcat5-webapps

エラーメッセージ

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * epel: ftp.kddilabs.jp
Setting up Install Process
No package tomcat5 available.
No package tomcat5-webapps available.
Error: Nothing to do

正しいバージョン

(正)yum install tomcat6 tomcat6-webapps

JavaEE仕様の標準ディレクトリ構成(重要)

コンテキストルート
    │
    ├WEB-INF
    │    │
    │    ├classes
    HTML ├src
    JSP   ├web.xml
	      ├lib
	      │ ├JAR
	      │
          ├tags
          


繰り返しになるが、ディレクトリ構成は仕様として決められている。

コンテキストルート
→Webアプリケーションを構成するすべてのコンテンツを格納するディレクトリのこと。
 webapps直下のディレクトリ。

WEB-INF
→コンテキストルート以下に必ず配置しなければいけないディレクトリ。
Javaファイルや設定ファイルを格納する。このディレクトリ以下はインターネットでは公開されない。
必ず大文字半角で記述する。


classes
Javaのクラスファイルを格納するディレクトリ。コンテキストルート\WEB-INF以下に配置する。
パッケージ化したクラスはパッケージに対応したディレクトリで格納する。
例)jp.co.hoge.Testクラスなら
WEB-INF/classes/jp/co/hoge/Test.classの階層で格納する。


lib
→JARファイルを格納する。ここに格納されたファイルは、Webコンテナ起動時に自動的にクラスパスが設定される。
JDBCなどはここに配置する。

src
→意外にも、これは任意のフォルダ。あってもなくてもいい。一般にソースファイルを置く。


web.xmlとは
webアプリケーションの設定ファイルのこと。配備記述子(デプロイメントディスクリプタ)と呼ばれる。
/WEB-INF/web.xml
に置く。繰り返すが、ディレクトリ構造はあらかじめサーブレットAPI仕様書によって決められている。

サーブレットの登録
web.xmlに登録されたサーブレットの呼び出しのための構文。
以下のURL構文で呼び出す。

http://<ホスト名>:<ポート番号>/<コンテキストルート名>/

web.xmlの記述が下記の場合・・・

  <servlet>
    <description></description>
    <display-name>Sample1_1</display-name>
    <servlet-name>Sample1_1</servlet-name>
    <servlet-class>servlet.Sample1_1</servlet-class> ★サーブレットクラス名
  </servlet>
  <servlet-mapping>
    <servlet-name>Sample1_1</servlet-name> ★マッピングするURLパターン
    <url-pattern>/Sample1_1</url-pattern>
  </servlet-mapping>

サーブレット呼び出しの構文は以下の通り
http://localhost:8082/webComp/Sample1_1
tomcatのデフォルトのポートは8080なので注意が必要。
※ポートはserver.xmlで設定可能です。

マッピングするパターンを変更すると・・・

  <servlet>
    <description></description>
    <display-name>Sample1_1</display-name> 
    <servlet-name>Sample1_1</servlet-name>
    <servlet-class>servlet.Sample1_1</servlet-class> ★サーブレットクラス名
  </servlet>
  <servlet-mapping>
    <servlet-name>Sample1_1</servlet-name>
    <url-pattern>/hoge</url-pattern> ★マッピングするパターンを変更すると・・・・
  </servlet-mapping>

呼び出しURLは下記のようになる。
http://localhost:8082/webComp/hoge

は一致させること。
拡張子を指定することはできない。

ウェルカムページの設定

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

http://localhost:8082/webComp/
のようにコンテキストルートまでしかURLで指定しないとき、上から順番にに書かれたファイルを検索して表示する。

HTTPのステータスコードによってファイルを指定する場合

  <error-page>
    <error-code>404</error-code>
    <location>/sorry.html</location>
   </error-page>

このように記述しておくと、404(ファイルが見つからない)ときは、コンテキストルート以下のsorry.htmlが表示される。

タグ
web.xmlのルートとなるタグ

tomcat上で「コンテキストルート」とは、webapps直下のディレクトリである。

とりあえずのまとめでした。
随時、追記します。
いやほんと、tomcatの設定って訳わからんかったし、検索してもなかなか解決しなくて大変だった。