Symfoware

Symfowareについての考察blog

Eclipse TomcatPluginでサーブレットアプリケーションの作成

すっかりJavaサーブレットの作り方を忘れているので初歩からやり直しです。
昔愛用していたTomcatプラグインのインストールまで行いました。
Ubuntu 16.04 + Eclipse NEONにTomcat Pluginをインストール


サーブレットプロジェクトの作成



Eclipseのパッケージエクスプローラー部分を右クリック。
[新規] - [その他]を選択します。

807_01.png


[Java] - [Tomcatプロジェクト]を選択して次へ。

807_02.png


適当にプロジェクト名を入力します。
今回は「sample」としました。
入力したら次へをクリック。

807_03.png


Tomcatプロジェクトの設定画面が表示されます。
「コンテキスト定義の更新を可能にする」にチェックをつけて完了します。

807_04.png


プロジェクトの雛形が出来上がりました。

807_05.png


「コンテキスト定義の更新を可能にする」にチェックをつけることで、
tomcatフォルダ($TOMCAT/conf/Catalina/localhost)に設定ファイルが自動的に作成されます。

私の環境だと、
/opt/apache-tomcat-8.5.23/conf/Catalina/localhost/sample.xml

807_06.png

内容は以下の通り。
※見やすいように改行してあります。

・sample.xml


  1. <Context
  2.     path="/sample"
  3.     reloadable="true"
  4.     docBase="/home/baranche/workspace/sample"
  5.     workDir="/home/baranche/workspace/sample/work"
  6. />




この設定ファイルのおかげて、Eclipseのワークスペースに作成したクラスファイルを
Tomcatが認識できるようになるわけです。


これでTomcat起動時、http://localhost:8080/sampleで作成したアプリケーションに
アクセスできることになります。





簡単なサンプル



簡単なサーブレットを作成してみます。
「WEB-INF/src」を右クリック。
[新規]-[クラス]を選択します。

807_07.png


名前に「MyServlet」
スーパークラスに「javax.servlet.http.HttpServlet」
を入力して完了。

807_08.png


ソースコードは以下の通り。


  1. package sample;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class MyServlet extends HttpServlet {
  9.     private static final long serialVersionUID = 1L;
  10.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  11.             throws ServletException, IOException {
  12.         
  13.         
  14.         // 要求文字コードのセット
  15.         request.setCharacterEncoding("UTF-8");
  16.         // 応答文字コードのセット
  17.         response.setContentType("text/html; charset=UTF-8");
  18.         // 出力ストリームの取得
  19.         PrintWriter out = response.getWriter();
  20.         // クライアント(ブラウザ)への出力
  21.         out.println("<html lang=\"ja\">");
  22.         out.println("<head><title>Servletテンプレート</title>");
  23.         out.println("</head><body>");
  24.         out.println("<h1>Servletのテンプレートです。</h1>");
  25.         out.println("");
  26.         out.println("</body></html>");
  27.         // 出力ストリームを閉じる
  28.         out.close();
  29.         
  30.     }
  31.     
  32. }




もうひとつ、特定のURLが指定されたら、いま作成したサーブレットが実行されるよう
設定ファイルを作成します。

WEB-INFを右クリックして[新規]-[ファイル]を選択。

807_09.png


ファイル名に「web.xml」と入力して完了します。

807_10.png


内容は以下のとおり。


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6. version="3.1"
  7. metadata-complete="true">
  8.     <servlet>
  9.      <servlet-name>TestServlet</servlet-name>
  10.      <servlet-class>sample.MyServlet</servlet-class>
  11.     </servlet>
  12.     <servlet-mapping>
  13.         <servlet-name>TestServlet</servlet-name>
  14.         <url-pattern>/test</url-pattern>
  15.     </servlet-mapping>
  16.     
  17. </web-app>




「TestServlet」という名前は「sample.MyServlet」というクラスを表す。
URLで「/test」が指定されたら「TestServlet」という名前のサーブレットを実行する。

この設定で、「/test」が指定されたら「sample.MyServlet」というクラスが処理されることになります。
※プロジェクトのパスも含めてhttp://localhost:8080/sample/testが指定されたら。


最終的にこのような構成になります。
TomcatボタンをクリックしてTomcatを起動。

807_11.png


ブラウザでhttp://localhost:8080/sample/testを表示すると、サーブレットが実行されました。

807_12.png





@WebServletアノテーション



web.xmlを作成しなくても、@WebServletアノテーションでURLを指定できるそうです。
@WebServletアノテーション
便利な時代になりました。

web.xmlの内容をコメント。


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6. version="3.1">
  7. <!--
  8. metadata-complete="true">
  9.     <servlet>
  10.      <servlet-name>TestServlet</servlet-name>
  11.      <servlet-class>sample.MyServlet</servlet-class>
  12.     </servlet>
  13.     <servlet-mapping>
  14.         <servlet-name>TestServlet</servlet-name>
  15.         <url-pattern>/test</url-pattern>
  16.     </servlet-mapping>
  17. -->
  18. </web-app>



「metadata-complete="true"」をコメントしないと、アノテーションが有効になりません。
きちんとコメントして無効化しておきます。


MyServletにアノテーションを設定してみます。


  1. package sample;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet("/SampleServlet")
  10. public class MyServlet extends HttpServlet {
  11.     private static final long serialVersionUID = 1L;
  12.     
  13.     public MyServlet() {
  14.         super();
  15.     }
  16.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  17.             throws ServletException, IOException {
  18.         
  19.         
  20.         // 要求文字コードのセット
  21.         request.setCharacterEncoding("UTF-8");
  22.         // 応答文字コードのセット
  23.         response.setContentType("text/html; charset=UTF-8");
  24.         // 出力ストリームの取得
  25.         PrintWriter out = response.getWriter();
  26.         // クライアント(ブラウザ)への出力
  27.         out.println("<html lang=\"ja\">");
  28.         out.println("<head><title>Servletテンプレート</title>");
  29.         out.println("</head><body>");
  30.         out.println("<h1>Servletのテンプレートです。</h1>");
  31.         out.println("");
  32.         out.println("</body></html>");
  33.         // 出力ストリームを閉じる
  34.         out.close();
  35.         
  36.     }
  37.     
  38. }




http://localhost:8080/sample/SampleServletでアクセスできるようになりました。

807_13.png


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/11/13(月) 22:59:00|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PostgreSQL 10.1をUbuntu 16.04へインストールし、外部からの接続を許可 | ホーム | Ubuntu 16.04 + Eclipse NEONにTomcat Pluginをインストール>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/2070-f288bb5b
この記事にトラックバックする(FC2ブログユーザー)