JavaRush /Java Blog /Random-JA /パート 6: サーブレット コンテナ

パート 6: サーブレット コンテナ

Random-JA グループに公開済み
この資料は「エンタープライズ開発入門」シリーズの一部です。以前の記事: パート 6. サーブレット コンテナ - 1前回の記事では、サーブレットについて理解し、その助けを借りて Web アプリケーションを作成する方法を学びました。このホリデーはサーブレット コンテナなしでは実現できなかったものを詳しく見てみましょう。

コンテンツ:

サーブレットコンテナとは

これはサーバー上で実行され、作成したサーブレットと対話できるプログラムです。つまり、Web アプリケーションをサーバー上で実行したい場合は、まずサーブレット コンテナをデプロイし、次にその中にサーブレットを配置します。その仕組みは簡単です。クライアントがサーバーに接続すると、コンテナはそのリクエストを処理し、どのサーブレットがそれを処理すべきかを決定して、それを渡します。 パート 6. サーブレット コンテナ - 2

サーブレットコンテナの使い方

リクエストのルーティングに加えて、サーブレット コンテナは他の機能も実行します。
  1. JSP ファイルから HTML ページを動的に生成します。
  2. HTTPS メッセージを暗号化/復号化します。
  3. サーブレット管理のための制限されたアクセスを提供します。
一般的には、それは良いことのように思えますが、残っているのは、それをすべて適用する方法を理解することだけです。まあ、何かの使い方を学ぶには、ただ...使ってみることが必要です:)それでは、今日は練習してみます! 最も人気のあるサーブレット コンテナはApache Tomcatです。オープンソースであり、無料で使用できます。このリンク からオペレーティング システム用の Tomcat をダウンロードし、実際にコンテナを操作する方法を見てみましょう。

Tomcat のインストールと実行

  1. Tomcat をインストールするには、ダウンロードしたアーカイブを目的のディレクトリに解凍するだけです。

  2. Tomcat を実行するには Java バージョン 8 以降が必要であることに注意してください。JAVA_HOME 環境変数が現在の JDK バージョンを参照していることを確認してください。

  3. 次に、 Tomcat へのユーザー アクセスを構成する必要があります。これは、conf フォルダーにある tomcat-users.xml ファイルで行われます。

    Tomcat には、次の 4 つの役割があらかじめ提供されています。

    • manager-gui - グラフィカル インターフェイスおよびステータス ページへのアクセス。
    • manager-script - テキスト インターフェイスとステータス ページへのアクセス。
    • manager-jmx - JMX およびステータス ページへのアクセス。
    • manager-status - ステータス ページにのみアクセスします。

    <tomcat-users> タグ内にこれらのロールを明示的に記述し、ユーザーに割り当てます。

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="user" password="password"
        roles="manager-gui, manager-script, manager-jmx, manager-status"/>

    これですべてを起動する準備が整いました。

  4. bin フォルダーで、startup.bat ファイル (Linux の場合は startup.sh) を実行します。

  5. 数秒後、ブラウザでリンクhttp://localhost:8080/を開きます。そこにグラフィックマネージャーが表示されます。

    パート 6: サーブレット コンテナ - 3

    このようなメニューが表示された場合は、Tomcat が実行されていることを意味します。

  6. 機能しない場合は、JAVA_HOME 環境変数と CATALINA_HOME 環境変数を手動で確認します。

    • JAVA_HOME - Java 8 以降の現在のバージョンを参照する必要があります。
    • CATALINA_HOME - Tomcat を参照するか、存在しない必要があります (Tomcat の別のバージョンを指してはなりません)。

Tomcat へのアプリケーションのデプロイ

Tomcat を起動できたので、そこに何らかのプロジェクトをデプロイします。前の記事のサーブレットを使用してみましょう。メインサーブレット:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "
"
); } else { printWriter.write("Hello, " + username + "
"
); } printWriter.write("Page was visited " + visitCounter + " times."); printWriter.close(); } }
インデックスサーブレット:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}
デプロイメントの前に、サーブレットを war アーカイブにパッケージ化する必要があります。通常、これには Maven が使用されますが、war アーカイブを作成するには、すべてのサーブレットがマップされている web.xml ファイルが必要です。新しい @WebServlet アノテーションを使用してサーブレットを作成したため、web.xml はありません。幸いなことに、IDEA は私たちに代わって汚れ仕事を行って、私たちのプロジェクトを戦争アーカイブに個別にラップすることができます。これを行うには、プロジェクト構造を開く必要があります (Ctrl + Shift + Alt + S) -> アーティファクト -> 目的のビルドを選択 -> 「プロジェクト ビルドに含める」の横のボックスにチェックを入れて、「OK」をクリックします。 パート 6: サーブレット コンテナ - 4Ctrl + F9 の組み合わせを使用してプロジェクトをビルドします。これで、war アーカイブがターゲット ディレクトリに作成されました。 パート 6: サーブレット コンテナ - 5ファイルの名前をもっと単純なもの (たとえば、servlet.war) に変更し、C:\my\ のより便利な場所に移動できます。抽出物を使用する準備ができたら、容器に入れます。これは 2 つの方法で実行できます。
  1. GUI経由

    これを行うには、リンクhttp://localhost:8080/manager/htmlに従ってください。Tomcat はログインとパスワードの入力を求めるプロンプトを表示します。

    私の後にすべての手順を繰り返した場合、ログイン名は user 、パスワードは passwd になります

    認証が成功すると、Tomcat Web Application Manager が表示されます。「アプリケーション」セクションにはすでに 5 つのアプリケーションが含まれています。これらは、Tomcat の操作を簡素化するために必要な Tomcat ユーティリティ アプリケーションです。将来的には削除される可能性があります。

    パート 6: サーブレット コンテナ - 6

    以下は「デプロイ」セクションです。これを使用すると、展開する戦争アーカイブを選択できます。パスとコンテキストを手動で入力しましょう。

    パート 6. サーブレット コンテナ - 7

    「デプロイ」をクリックすると、アプリケーションが「アプリケーション」セクションに表示されていることがわかります。

    パート 6: サーブレット コンテナ - 8 Tomcat GUI を使用すると、停止、再起動、セッションの長さの設定、削除を行うことができます。デプロイ時に、コンテキスト /demo を指定しました。これは、アプリケーションがリンクhttp://localhost:8080/demo経由でアクセスする必要があることを意味します。確認してください。すべてが機能するはずです。

  2. ファイルシステム経由

    この方法でアプリケーションをデプロイするには、Tomcat が解凍されたディレクトリを開き、webapps に移動する必要があります。私たちがよく知っているユーティリティ アプリケーションを次に示します。

    パート 6. サーブレット コンテナ - 9

    必要なのは、servlet.war をここに移動することだけです。

    数秒待つと、新しいサーブレット フォルダーが表示されます。これは、アプリケーションがデプロイされたことを意味します。使い慣れたアプリケーション マネージャー インターフェイス ( http://localhost:8080/manager/ )に移動しましょう。ここでは、アプリケーションが /servlet コンテキストにデプロイされていることがわかります。

    パート 6: サーブレット コンテナ - 10

    この方法でデプロイすると、コンテキストはデプロイされた戦争アーカイブの名前に自動的に割り当てられます。コンテキストを変更するには、アプリケーションで新しく作成したフォルダーの名前を変更できますが、その前にファイルを削除する必要があります。そうしないと、Tomcat はアーカイブの名前でアプリケーションを再デプロイします。

    ご覧のとおり、Tomcat へのアプリケーションのデプロイは、思っているよりもはるかに簡単です。しかし、その他の機能は使いやすいです。確認しよう。

HTTP の代わりに HTTPS プロトコルを使用する

HTTP と HTTPS の違いについては別の記事で説明しましたので、ご記憶のとおりです。HTTPS は HTTP と同じプロトコルですが、転送されるデータの暗号化を使用します。クライアント側では、暗号化はブラウザによって処理されるため、サーバー側で暗号化を提供する必要があります。HTTP リクエストは Tomcat によって受け入れられ、ルーティングされるため、暗号化を Tomcat に委任するのは論理的です。 これを行うには、次のものが必要です。
  1. 自己署名証明書を生成します。
  2. 追加のサーバー設定を行います。
これを練習しましょう。

証明書の生成

JDK には、バージョンに関係なく、多数のユーティリティが付属しており、その 1 つがkeytoolです。これは、暗号化キーを生成し、それを操作するためのツールです。これを使用するには、コマンド ラインを使用して、ディレクトリC:\Program Files\Java\jdk1.8.0_181\binに移動し、コマンドkeytool -genkey -alias tomcat -keyalg RSAを実行します。
  • keytool - パラメータを指定してユーティリティを起動します。
  • -genkey - 新しいキーを生成することを示します。
  • -alias tomcat — キーのエイリアスを作成します。
  • -keyalg RSA - キー生成アルゴリズムとして RSA を選択します。
コマンドを実行すると、ユーティリティはダイアログを開始します。 パート 6: サーブレット コンテナ - 11必要な情報を入力します。これで、ホーム ディレクトリ (Windows の場合は C:\Users\{username}\.keystore) にキーストアが作成され、その中に Tomcat キーが作成されました。ほとんどのブラウザーが受け入れられる単純な証明書を生成しました。この証明書は商用アプリケーションには適していません。テスト目的でのみ使用できます。運用サーバーでは、認証局 (例: https://letsencrypt.org/ ) からの証明書を使用する必要があります。

サーバーのセットアップ

証明書の準備ができたので、サーバー設定、つまり SSL コネクタを調整する必要があります。これは、 apache-tomcat-9.0.30/conf/にある server.xml ファイルで行われます。次のようなブロックが見つかります。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
そしてその隣に設定を配置します。
<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="C:\Users\user\.keystore" keystorePass="mypass"
       clientAuth="false" sslProtocol="TLS"/>
keystoreFile および keystorePass パラメータに関連する値を割り当て、shutdown.bat ファイルとstartup.bat ファイルを使用して Tomcat を保存して再起動します。これでサーバーは、変更されたアドレス ( https://localhost:8443/demo/hello )で https リクエストを処理する準備が整いました。リンクをクリックすると、証明書に問題があるという警告が表示されますが、これは驚くべきことではありません。先ほども少し説明しましたが、通常の証明書を取得するには、いずれかの証明書サービスのサービスを利用する必要があります。しかし、これまでのところ、私たちは目標を達成しています。アプリケーションが HTTPS プロトコルを使用して動作するということです。これが重要なことです。

HTMLページの動的生成

ここで、サーブレット コンテナの他の機能、つまり HTML ページの動的生成のレビューを続けましょう。退屈な静的 HTML コードの代わりに、変数、ループ、配列、その他の言語構造を使用して JAVA コードを記述できる理想的な世界を想像してみてください。想像しましたか?良いニュースは、同様のものが存在するということですが、悪いニュースは、それが完全には存在しないということです。想像できない方のために説明しますが、これは JSP (Java Server Pages) テクノロジについて話しています。簡単に言うと、これは Java コードの一部を HTML ページに挿入できるようにするテクノロジーです。確かに、このコードはクライアントに送信される前に HTML に変換されますが、さまざまな要素を考慮して動的に生成されます。たとえば、条件付き構造を使用して、条件に応じて異なるコンテンツを提供できます。JSP ページの例:
<%@ page language="java"" %>
<html>
<head>
<title>JSP</title>
</head>

<body>
<%
String firstName="name";
String secondName="surname";

    if(firstName.equals("name")){
      out.print("Hello :"+firstName+"<br>");
    }

    if(firstName.equals("name") && secondName.equals("surname"))
    {
      out.print("Hello, my dear friend! <br>");
    }
    else
    {
      out.print("I don’t know you. Go away! <br>");
    }
%>
</body>
</html>
JSP について詳しくは、こちらを ご覧ください。実際のところ...私たちはこのためにここにいるのではなく、サーブレット コンテナーのためにここにいます。JSP はそれと何の関係があるのでしょうか? それは簡単です。JAVA コードの JSP から HTML コードへの変換は、サーブレット コンテナによって実行されます。サーブレットが応答として JSP コンテンツを返そうとすると、コンテナはそれを認識し、まずそのコンテンツをブラウザで読み取り可能な HTML ページに変換してから、そのコンテンツをクライアントに送信します。現在、Thymeleaf、FreeMarket、Mustache など、JSP テクノロジの類似物が多数存在します。それらはすべて同様の原理で機能します。仕事用にどちらを選択するかは好みの問題です。これは、サーブレット コンテナの選択にも当てはまります。例では、最も一般的なコンテナである Tomcat を使用しましたが、プロジェクトによっては他のコンテナを使用する場合もあります。最も一般的なものについて簡単に理解し、Tomcat との違いを確認することは価値があります。

Tomcat の代替品

  1. GlassFish は、Oracle がサポートするオープンソース コンテナです。

    Tomcat とは異なり、サーブレットに加えて JavaEE フレームワークから他のコンポーネントを操作できる本格的な Web サーバーです。同時に、より多くの RAM を使用します。サーバーを微調整する際の柔軟性が高まるため、使用がより難しくなります。JavaEE フレームワークを使用してアプリケーションを開発する場合に使用する価値があります。

  2. WildFly - 以前はJbossでした。こちらもオープンソース。レッドハットによって開発されました。別の企業製品である JBoss Enterprise Application Platform との混同を避けるために、名前が変更されました。

    WildFly は、GlassFish と同様に、本格的な Web サーバーです。ちなみに、WildFly は内部で Tomcat をサーブレット コンテナとして使用します。GlassFish とは異なり、WildFly は軽量でセットアップが簡単です。

  3. Jetty - 以前のものと同様、オープンソースです。エクリプスによって開発されました。

    Tomcat と同様、これは単純なサーブレット コンテナであり、JavaEE フレームワークのすべてのコンポーネントはサポートされていません。同時に、より軽量になり、携帯電話でも実行できます。起動と停止が速く、拡張性も優れています。Tomcat とは異なり、小規模なコミュニティと知識ベースがあります。

  4. WebLogic は、使用前に購入する必要があるライセンス ソフトウェアです。オラクルが所有。

    Tomcat と比較すると、その機能は少し幅広いです。FTP プロトコルで動作できます。ただし、アプリケーションの開発とテストにはそれほど柔軟性がありません。

  5. WebSphere (正確には WebSphere Application Server) は有料のソフトウェアです。IBMによって開発されました。WildFly や GlassFish と同様、本格的なアプリケーション サーバーです。ただし、より使いやすいセットアップ インターフェイスと、高い操作信頼性を備えています。

    欠点は、大量のリソースを使用し、開始と停止に時間がかかるため、小規模なプロジェクトを開発する場合にはあまり便利ではないことです。

どのサーブレット コンテナまたはアプリケーション サーバーを選択するかは、特定のプロジェクトによって異なります。明らかな部外者でも最高の品質を証明できるプロジェクトもありますが、最初は1つのことを徹底的に理解した方が良いです。おそらく、これに最適な候補は Tomcat です。私たちはすでに研究の第一歩を踏み出しました。あとはあなた次第です。「エンタープライズ開発入門」シリーズの最終記事では、MVC パターンについて説明します。 パート 7. MVC パターンの概要 (Model-View-Controller) パート 8. spring-boot での小さなアプリケーションの作成
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION