□技術メモ - Java サーブレット 環境設定 ※管理人の個人的な技術メモです。このページの内容を実行した結果について 管理人はいかなる責任も負いかねますのでご自身の責任でお試しください。 ----------------------------------------------------------- ○Javaをインストールする(2015/02/02記) 概要-------- ・JDK 8uXX をインストールする。 ・環境変数 JAVA_HOME, path を設定する。 ------------ ・コマンドラインでJavaをコンパイルする場合は、JDKのインストールが必要となる。 ・Eclipseを使う場合は、既存のjreを使うことが可能。 インストールされていない場合は以下のサイトからjreまたはjdkを取得してインストールする。 www.oracle.com/technetwork/java/javase/downloads/index.html Java SE Development Kit 8uXX をDownLoadする。 (Windows環境で、32bitならx86、64bitならx64を選択) ・環境変数を設定する。 JAVA_HOME jreまたはjdkのインストールフォルダを設定。パスに半角スペースを含む場合は""で囲む。 path %JAVA_HOME%\bin; を追加 ・コンパイラの動作確認 javac -version でjavaのバージョンが表示されること (別プロセスのプロンプトを起動しないと新しい環境変数の値を参照できないことに注意) (参考)サンプルソース HelloWorld.java -------- public class HelloWorld { public static void main (String[] args) { System.out.println("Hello,World!"); } } -------- 上記のソースを適当なフォルダに配置して、コマンドプロンプトを起動する。 ソースと同じ場所から以下のコマンドでコンパイルできれば問題ない。 javac HelloWorld.java ----------------------------------------------------------- ○Tomcatをインストールする 概要-------- ・Tomcat7 をインストールする。 ・環境変数 CATALINA_HOME を設定する。 ------------ ・公式サイト tomcat.apache.org/ → Download → Tomcat7.0 → 32-bit/64-bit Windows Service Installerを選択 → インストールする。 ・ユーザ名、パスワードの問い合わせがあるが、テストや動作確認で使う分には user/userで問題ない。 ・インストール場所の問い合わせがあるが、フォルダ階層を深くしたくなければデフォルトから変更する。 ここではC:\Tomcat7にインストールする。 ・環境変数を設定する。 CATALINA_HOME C:/Tomcat7(インストールしたフォルダを指定) ・サービスの開始と終了は、Tomcatのアイコンを右クリック → Start service / Stop serviceにて行う。 もしくは、アイコンを右クリック → Configureを選択 → Properties画面から start / stop にて行う。 ・動作確認 localhost:8080/index.html(もしくは localhost:8080) → ロゴのある画面が表示されること ----------------------------------------------------------- ○Eclipseの使用について ・ここでEclipseを使用するかどうかで分岐する。 ・大規模な開発を行う場合はEclipseなどの統合環境を使うことが多い。 ・学習用や動作確認の場合は、手動で環境設定やコンパイルを行うことも可能。 以下、手動による環境設定の手順について記述する。 ----------------------------------------------------------- ○ルートフォルダを作成する 概要---------------- ・コマンドラインの場合のファイル配置を確認する。 ・最終的なファイルの配置は以下の通り。( [ ] はフォルダ名) -------------------- [ws1] [ctxt1] index.html //html, jsp 等を配置 [img] [WEB-INF] web.xml //WEB-INF の直下にweb.xml を配置 [classes] //class と src のファイル構成は同じにする [pkgMemo] getMemoData.class [src] //class と src のファイル構成は同じにする [pkgMemo] getMemoData.java [lib] *.jar -------------------- ・ここではコンテキスト名を「ctxt1」とし、ルートフォルダを C:\ws1\ctxt1 とする。(ws は workspaceの略) ・作成するフォルダと配置するファイルは以下となる。 C:/ws1/ctxt1 ←index.htmlを配置 C:/ws1/ctxt1/img(任意の名前) ←画像等を配置 C:/ws1/ctxt1/WEB-INF ←web.xmlを配置 C:/ws1/ctxt1/WEB-INF/classes ←.classを配置 C:/ws1/ctxt1/WEB-INF/classes/pkgMemo(パッケージ名) ←.classを配置 C:/ws1/ctxt1/WEB-INF/src ←.javaを配置 C:/ws1/ctxt1/WEB-INF/src/pkgMemo(パッケージ名) ←.javaを配置 C:/ws1/ctxt1/WEB-INF/libs ←jarファイル等を配置 ----------------------------------------------------------- ○TomcatのConfフォルダ内の設定を行う 概要---------------- ・TomcatのConfフォルダ内に「context名.xml」ファイルを配置する。 ・最終的なファイルの配置は以下の通り。( [ ] はフォルダ名) -------------------- [Tomcat7] [conf] [Catalina] [localhost] ctxt1.xml -------------------- ・TomcatのConfフォルダ内の適切な箇所に、 コンテキスト名.xml ファイルを配置する。 C:/Tomcat7/conf/Catalina/localhost ←ctxt1.xmlを配置する。 -------- ctxt1.xml -------- ----------------------------------------------------------- ○機能の確認 ・ここでは、初期画面 index.html のメモ欄に文字列を入力して「送信」をクリックすると、 次の画面にメモの内容が表示される、というWebアプリを作成することを考える。 ・index.htmlにおけるpostメソッドに対応する action の設定は以下の通り。 action="/ctxt1/memo/getMemoData" ・この時に呼ばれるクラス名は、パッケージ名を pkgMemo とし、 パッケージ名を含めたクラス名を pkgMemo.getMemoData とする。 ----------------------------------------------------------- ○ルートフォルダ内にファイルを配置する(その1) web.xml 概要---------------- ・web.xml を設定して、url-patternに対して起動するクラスを設定する。 ・url-pattern, servlet-name, servlet-class を設定する。 -------------------- ・web.xmlでは、url-pattern と servlet-class を紐付けるための設定を行う。 ・配置は以下の通り。 C:/servlet/ctxt1/WEB-INF ←web.xmlを配置 ・action="/ctxt1/memo/getMemoData"のうち、ctxt1 はコンテキスト名として分かっているので、 url-patternは /memo/getMemoData となる。 これを、servlet-class名である、pkgMemo.getMemoData に紐付ければよい。 したがって web.xml は以下の通り。 url-pattern → servlet-name → servlet-class と紐付けられる。 -------- web.xml pkgMemo.getMemoData pkgMemo.getMemoData pkgMemo.getMemoData /memo/getMemoData -------- ----------------------------------------------------------- ○ルートフォルダ内にファイルを配置する(その2) index.html 概要---------------- ・以下のパスに index.html を配置する。 C:/ws1/ctxt1/index.html -------------------- ・index.html は、ブラウザにおいてURLを、ホスト名/コンテキスト名 とした時に、 最初に表示されるhtmlファイルである。 ・ここではローカルサーバで動作させているので、Tomcat7をスタートさせて、 URLを、localhost:8080/ctxt1(もしくは localhost:8080/ctxt1/index.html) と指定することで表示される。 ・配置は以下の通り。 ・C:/ws1/ctxt1 ←index.htmlを配置 -------- index.html (文字コードはSJIS)

メモ:
-------- ----------------------------------------------------------- ○ルートフォルダ内にファイルを配置する(その3) getMemoData.class 概要---------------- ・getMemoData.java をコンパイルして、getMemoData.class を作成する。以下に配置する。 C:/ws1/ctxt1/WEB-INF/classes/pkgMemo/getMemoData.class -------------------- ・classファイルはjavaファイルをコンパイルすることで作成される。 ・クラス名 getMemoData の、パッケージ名を含めたクラス名は pkgMemo.getMemoData となる。 ・classファイルとの対応を分かりやすくするため、ソースは以下のように配置されることが多い。 C:/ws1/ctxt1/WEB-INF/classes C:/ws1/ctxt1/WEB-INF/classes/pkgMemo ←getMemoData.classを配置 C:/ws1/ctxt1/WEB-INF/src C:/ws1/ctxt1/WEB-INF/src/pkgMemo ←getMemoData.java を配置 getMemoData.java (文字コードはSJIS) -------- package pkgMemo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class getMemoData extends HttpServlet { public void doPost( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=Windows-31J"); //レスポンスのエンコード req.setCharacterEncoding("Windows-31J"); //リクエストのエンコード PrintWriter out = res.getWriter(); //Writerの取得 out.println("

"); out.println("メモ欄:" + req.getParameter("memo")); out.println("

"); } } -------- ・コンパイルは C:/servlet/ctxt1/WEB-INF/src に入って、下記のコマンドを実行する。 ソースと同じ場所に.classが生成されるので、これを .../classes/pkgMamo に移動する。 javac -cp "C:/Tomcat7/lib/servlet-api.jar" pkgMemo/getMemoData.java ・ソースの文字コードはデフォルトはSJIS。 もし、UTF-8でソースを記述する場合は、コンパイル時に文字コードの指定が必要になる。 文字コードをUTF-8に指定する場合のコマンドは以下のとおり。 javac -cp "C:/Tomcat7/lib/servlet-api.jar" -encoding UTF-8 pkgMemo/getMemoData.java ----------------------------------------------------------- ○Webアプリの実行 コマンドラインの場合 概要---------------- ・Tomcatのアイコンから、サーバを再起動する。以下のURLから初期画面を表示する。 http://localhost:8080/ctxt1 -------------------- ・クラスファイルを配置を変えたので、サーバの再起動が必要になる。 Tomcatのアイコンから、Stop service → Start service で再起動する。 ・ブラウザから http://localhost:8080/ctxt1 で初期画面が表示される。 ・メモ欄に文字を入力して「送信」をクリックする。 URLが http://localhost:8080/ctxt1/memo/getMemoData になり、 画面にメモの内容が表示される。 ----------------------------------------------------------- ○Webアプリの実行 Manager App を使用する場合 概要---------------- ・Manager App から起動することも可能。 ・http://localhost:8080 から Apache Tomcat 画面を表示 → Manager App → ctxt1 を選択する。 -------------------- ・ブラウザのURLに、http://localhost:8080 を設定して、Apache Tomcat/7.x.xx 画面を表示する。 ・Manager App を選択して、アプリケーションの一覧を表示する。 user / password を訊かれたら、インストール時に設定した値を入力する。 ・クラスファイルを配置を変えたので、サーバの再起動が必要になる。 コンテキスト ctxt1 の再ロードを選択する。 ・ctxt1 を選択 → ブラウザのURLが http://localhost:8080/ctxt1/ になり、初期画面が表示される。 ・メモ欄に文字を入力して「送信」をクリックする。 URLが http://localhost:8080/ctxt1/memo/getMemoData になり、 画面にメモの内容が表示される。 ----------------------------------------------------------- ○Eclipseを使用する場合 ・上記までと同じ機能(ただしコンテキスト名を「ex1」とする)を Eclipseで作成するための環境設定について記述する。 要点は以下の通り。 ・Javaのインストールは上記と同じ。 ・Tomcatをインストールする。このとき、Windowsの起動時に自動起動するようにはしない。 Eclipseから起動するので平常時は停止しているようにする。 ちなみに平常時に動作していると、Eclipseからサーバを起動したときに「ポート番号が重複しています」 という意味のメッセージが出てエラーになる。 ・Eclipseをインストールする。 公式サイトからdownloadできるが、どの版も天体の名前が付けられている。ここではlunaを使用する。 Windowsの32bit / 64bitに応じた版をインストールする。 32bit : eclipse-jee-luna-SR2-win32.zip 64bit : eclipse-jee-luna-SR2-win32-x86_64.zip インストールといってもzipファイルを展開するだけです。 ただしファイル数が多いのと階層が深いので解凍には7Zipなどのアーカイバを使う方がよい。 ・Pleiadesプラグインによる日本語化を行う。 http://mergedoc.osdn.jp/ pleiades_1.5.0.zip をDownloadする。 解凍して、\features, \plugin を\eclipse直下に配置、上書きする。 (以下はReadMeより抜粋) eclipse.iniの最後に以下を追加する。 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar eclipse.exe -clean.cmd(ショートカット)をeclipse.exeと同じフォルダに配置してショートカットから起動する。 -clean 起動の後、5〜6回通常起動すると辞書の読み込みが起きなくなり起動が早くなるらしい。 ・workspaceフォルダを作成する。場所はどこでも良いがここでは、C:/Eclipse/workspace とする。 Eclipseを起動する。ワークスペースには上記で作成したフォルダを指定する。 ・プロジェクト・エクスプローラ上で右クリックして、動的Webプロジェクトを作成する。 コンテキスト名は「ex1」、ターゲットランタイムは Apache Tomcat 7.0 とする。 Tomcat7をインストールしたパスと、使用するjreを指定する。 ・「web.xml デプロイメント記述子の生成」をチェックする。 ・完了すると、ex1 のルートフォルダおよびその配下のフォルダ構成が作成されている。 ex1のパスが確定したので、このタイミングでTomcatのConfフォルダ内の設定を行う。 Eclipseの機能でテンプレートがあるのかもしれないが、ここでは手動で作成する。 C:/Tomcat7/conf/Catalina/localhost ←ex1.xmlを配置する。 ex1.xml -------- -------- ・WEB-INF (C:\eclipse\workspace\ex1\WebContent\WEB-INF) の下にweb.xmlが作成されているので、タグ内に以下のコードを追加する。 -------- pkgMemo.getMemoData pkgMemo.getMemoData pkgMemo.getMemoData /memo/getMemoData -------- ・ex1を右クリック→HTMLファイルを新規作成→index.htmlを追加、修正する。 上記では文字コードをWindows-31Jで統一したが、Eclipseの作成するテンプレートのデフォルトはUTF-8なのでこれに合わせる。 上記のソースで「Windows-31J」となっている箇所を「UTF-8」に変更すればよい。 ソース自体の文字コードもUTF-8にする。ファイル名を右クリック→プロパティ→リソースの属性を「UTF-8」にする。 index.htmlの〜に以下を追加する。 --------

メモ:
-------- ・srcを右クリック→新規→サーブレット パッケージ名はpkgMemo, クラス名はgetMemoData URLマッピングは/memo/getMemoDataに変更 必要なメソッド・スタブにチェックを入れる。ここではdoPostをチェックして、他を外す。 ・getMemoData.java のテンプレートが作成されるのでこれを修正する。index.htmlと同じ手順で文字コードをUTF-8に合わせる。 doPostメソッド内に以下のコードを追加する。 PrintWriterにエラーが出ているので、右クリック→「java.io.PrintWriterをインポートする」を選択、修正する。 -------- response.setContentType("text/html; charset=UTF-8"); //レスポンスのエンコード request.setCharacterEncoding("UTF-8"); //リクエストのエンコード PrintWriter out = response.getWriter(); //Writerの取得 out.println("

"); out.println("メモ欄:" + request.getParameter("memo")); out.println("

"); -------- ・サーバ・タブからex1を追加する。 「使用可能」(左側)→「構成済み」(右側)に移ったことを必ず確認すること。 ・追加されたサーバを右クリック→「開始」を選択する。 「必要なポートが既に使用されています」という意味のメッセージがでる場合は、既存のTomcat7が起動しているので、 これを停止してから、再度、サーバを右クリック→「開始」を選択する。 コンソールに赤字で実行時ログの出力が始まったら起動できている。 ・ブラウザ上でURLに http://localhost:8080/ex1/ を指定すると初期画面が表示される。 ちなみに既存のTomcatは停止しているので、http://localhost:8080 を指定してもエラーになる。 ・メモ欄に文字を入力して「送信」をクリックする。 URLが http://localhost:8080/ex1/memo/getMemoData になり、 画面にメモの内容が表示される。