CodeGym/Java Course/モジュール 3/サーブレットの概要

サーブレットの概要

使用可能

1.1 インターフェースサーブレット

今日は、新しくて興味深いトピックであるサーブレットを始めます。Java にサーブレットが追加されたことで、Java が大規模サーバー アプリケーションの事実上の標準になりました。世界中のエンタープライズ ソフトウェアの 80% は Java で書かれています。そして中国ではすべてが100%です。では、サーブレットとは何でしょうか?

サーブレットはまさに Java プログラムを Web サービスに変換し、クライアントからのリクエストを処理できるようにするものです。で、こんな感じでした・・・

World Wide Web の出現直後の 90 年代に、Web クライアント (ブラウザ) と Web サーバーが登場しました。Web サーバーは通常、保存したファイル (HTML ページ、スクリプト、画像など) をインターネット上に単純に配布します。

ある時点で、誰もが双方をより賢くする必要があるという結論に達しました。JavaScript が HTML ページに追加され、プラグインがサーバーに追加されました。プラグインは、特定のリクエストに応答して呼び出され、サーバーの動作をより柔軟でスマートにする特別なスクリプトです。

つまり、サーブレットとは、特定のページで要求されたときに Java コードを実行できるように組み込まれたJava プラグインのことです。Java web-serverそしてすでに、この Java コードは、Servlet クラスから継承されたクラスによって表され、開発者の意図どおりの動作を行っています。

すでにご存知のとおり、最も人気のある Java Web サーバーはTomcatです。ちなみに、漫画「トムとジェリー」に登場する猫のトムにちなんで名付けられました。

Tomcat はどのようにサーブレットと対話するのでしょうか? 実際、このプロセスは標準化されており、サーブレットのライフサイクルと呼ばれます。この中で、サーブレットはロード可能なオブジェクトであり、Web サーバーはサーブレットコンテナです。

サーブレットがまだロードされていない場合は、次のようになります。

  1. サーブレット クラスはコンテナによってロードされます。
  2. コンテナはサーブレットのクラス(オブジェクト)のインスタンスを作成します。
  3. init()コンテナはサーブレット オブジェクトのメソッドを呼び出します。このメソッドは 1 回だけ呼び出されます。

標準的な作業サイクル -クライアントのリクエストに対応する:

  • 各リクエストは別のスレッドで処理されます。
  • service()コンテナはサーブレット上のメソッドを呼び出し、そこに ServletRequest オブジェクトと ServletResponse オブジェクトを渡します。
  • サーブレットを終了するには、destroy()サーブレット オブジェクトでメソッドを呼び出します。呼び出されるのは 1 回だけです。

サーブレットが終了する理由はさまざまです。

  • プログラマは Web サーバーを再起動します。すべてのサーブレットを正常にシャットダウンする必要があります。
  • プログラマは新しいバージョンのサーブレットをロードしますが、古いバージョンは正しくアンロードする必要があります。
  • 等々。

重要なことを忘れないでください。Web サーバーとそのサーブレットは、何ヶ月もの間、障害や再起動が発生することなく動作し、毎分数千のリクエストを処理できる必要があります。したがって、サーブレットのロード、作業、およびアンロードの両方のコードは、常に非常に高品質に作成する必要があります。

1.2 HttpServlet クラス

Servlet クラスは、サーブレットとコンテナの動作方法を標準化するために存在します。プログラマはこのクラスを直接操作しません。まあ、それらが機能することはほとんどありません。最も一般的に使用されるクラスは、HttpServletサーブレットから継承されます。

このクラスには、便利なメソッドがいくつかあります。よく使用します:

方法 説明
1 init() サーブレットのロード時に 1 回呼び出されます
2 destroy() サーブレットがアンロードされるときに 1 回呼び出されます
3 service(HttpRequest, HttpResponse) サーブレットへの新しいリクエストごとに呼び出されます
4 doGet(HttpRequest, HttpResponse) サーブレットへの新しい GET リクエストごとに呼び出されます
5 doPost(HttpRequest, HttpResponse) サーブレットへの新しい POST リクエストごとに呼び出されます
6 doHead(HttpRequest, HttpResponse) サーブレットに対する新しい HEAD リクエストごとに呼び出されます
7 doDelete(HttpRequest, HttpResponse) サーブレットに対する新しい DELETE リクエストごとに呼び出されます
8 doPut(HttpRequest, HttpResponse) サーブレットへの新しい PUT リクエストごとに呼び出されます

init()およびメソッドはdestroy()Servlet クラスから継承されます。したがって、サーブレットでそれらをオーバーライドする場合は、基本クラスからその実装を呼び出す必要もあります。これにはコマンドが使用されますsuper.method name()

サーブレットの例:

public class FirstHttpServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");

        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);

        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 サービス(HttpServletRequest、HttpServletResponse)メソッド

クライアントリクエストの処理をサーブレットの観点から見ると、次のようになります。

クライアント要求ごとに、コンテナ (Web サーバー) はHttpServletRequestとオブジェクトを作成しHttpServletResponseservice(HttpServletRequest request, HttpServletResponse response)対応するサーブレットのメソッドを呼び出します。これらのオブジェクトは、メソッドが から必要なデータを取得しrequest、作業の結果を に入れることができるように、それに渡されますresponse

このメソッドにservice()はデフォルトの実装があります。再定義されていない場合は実行されます。それが彼がやっている事なのです。

このメソッドはservice()リクエストから HTTP メソッドの種類 (GET、POST、...) を判断し、リクエストに対応するメソッドを呼び出します。

方法 説明
1 service(HttpRequest, HttpResponse) サーブレットへの新しいリクエストごとに呼び出されます
2 doGet(HttpRequest, HttpResponse) サーブレットへの新しい GET リクエストごとに呼び出されます
3 doPost(HttpRequest, HttpResponse) サーブレットへの新しい POST リクエストごとに呼び出されます
4 doHead(HttpRequest, HttpResponse) サーブレットに対する新しい HEAD リクエストごとに呼び出されます
5 doDelete(HttpRequest, HttpResponse) サーブレットに対する新しい DELETE リクエストごとに呼び出されます
6 doPut(HttpRequest, HttpResponse) サーブレットへの新しい PUT リクエストごとに呼び出されます

クラスでは、1 つのメソッド を再定義することservice()も、それをそのままにして、必要に応じてメソッドdoGet()、 、 ... を再定義することもできます。doPost()

コメント
  • 人気
  • 新規
  • 古い
コメントを残すには、サインインしている必要があります
このページにはまだコメントがありません