そのへんのちらしのうら

調べたこと、学んだこと、おもしろかったこと。

【メモ】Java(あるいはEclipse)でWebアプリケーションをつくるときの覚え書き

ちょっとよく分からなくなっていたところをまとめ。

Webサーバーとアプリケーションサーバーの役割

Webサーバーは、Webブラウザからのリクエストに対してHTML(静的コンテンツ)を返す。
動的コンテンツが必要な場合はプログラムを実行したり、アプリケーションサーバーにさらにリクエストする場合もある。
アプリケーションサーバーは、リクエストを受け取り、Javaなどのプログラムを実行し、その結果をWebサーバーに返す。

warファイルとは

Java製のwebアプリケーションで使用されるクラスファイル、HTML、設定ファイル、Jar形式のファイルなどをまとめたファイル。
Webアプリケーション版のzipみたいなもの。
e-words.jp
Webアプリケーションサーバが用意した特定の場所に配備し、サーバーを起動することで、そのアプリケーションをインストールすることができる。

動的Webプロジェクトとは

Webアプリケーション向けのファイル構造を自動生成するプロジェクト。

JSP+ServletによるWebアプリケーションの流れ

①URL「http://[サーバー]/[プロジェクト]/」でトップページアクセス
※ちなみに、「http://[サーバー]/[プロジェクト]/index.jsp」でも可能。サーバ側で、「index.jsp」が省略されていても自動で探索する。
⇒WebContent直下のページを探す。
indexページのように、ブラウザ(=外部)から直接アクセスするページはWebContent直下に置く。

②URL「http://[サーバー]/[プロジェクト]/[urlパターン]」で特定のページにアクセス
・「WEB-INF」配下にjsp用フォルダ(例:jsp)を作成し、「hoge.jsp」を配下に作成。
・「src」配下にサーブレットクラス(HogeServlet.java)を作成。
・HogeServlet.javaのクラスについてWebサーブレットアノテーション(@WebServle)をつける。詳細は次項。

サーブレットクラスで遷移先のページを指定してディスパッチ。
■HogeServlet.java

RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/zaikochosei.jsp");

つまり、ブラウザのURL→URLパターン→サーブレットクラス→遷移先のページという流れ。

@WebServletアノテーションとweb.xmlの関係

・@WebServletアノテーションはServlet3.0から利用できるようになった機能。
・それ以前はweb.xmlにより、URLと呼び出すサーブレットクラスの対応をつけていた。
・name属性(省略した場合はクラス名)→web.xmlにおけるservlet-name
アノテーションをつけているサーブレットクラス→web.xmlにおけるservlet-class
・urlPatterns属性→web.xmlにおけるurl-pattern
www.searchman.info www.javaroad.jp

Eclipseでサーバー連携した場合(Servers)

Tomcatインストールディレクトリとはべつに、ワークスペース内に設定フォルダが格納されるようになる。
例:E:\pleiades\workspace\Servers\ローカル・ホスト の Tomcat7 (Java7)-config
・Servers\server.xml→サーバーに関する設定の記述。
docBase→アプリケーションのルートディレクトリ。
・appBase→Tomcatが扱うアプリケーションのトップディレクトリ。ここにwarファイルおいておけばTomcat起動時などに自動でwarを展開してデプロイ。

qiita.com

EclipseTomcatサーバを起動した場合に公開される場所

つまりはwarファイルの配備などはせずにeclipseからサーバー起動などした場合に、どこにアプリケーションのclassファイルが展開されるか。

Eclipse for Java EE からTomcatサーブレットコンテナを起動すると、サーバ本来の公開ディレクトリとは別のディレクトリに公開される。 プロジェクトのWebContentは、以下のテンポラリディレクトリにコピーされ、ここに公開されます。

→[ワークスペース].metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
ameblo.jp

ちなみに、そもそもどこで設定しているか探してみましたが、grepしてみた限りだと、おそらくは.metadata内だと見られます。
そのため、開発者で変更できるような設定かどうかはよくわかりません。

www.ne.jp

Tomcatによるデプロイについて

・デプロイとは、WebアプリケーションをTomcatサーバーにインストールすること。
・warファイルを使用する場合、warファイルをサーバーに配備し、(設定にもよるが)ディレクトリファイルとして展開するというプロセスになる。
・具体的には、warファイルをappBase配下に置くことで、Tomcatはwarファイルを展開する。
Tomcatはデプロイ元としてwarファイルではなく展開先のフォルダの中身を参照し、実行する。
ozuma.hatenablog.jp

www.slideshare.net