ホームページ  >  記事  >  Java  >  Javaでサーブレットを実装する方法

Javaでサーブレットを実装する方法

PHPz
PHPz転載
2023-05-17 11:34:50872ブラウズ

Web の基本と HTTP プロトコル

                       ┌─────────┐
┌─────────┐            │░░░░░░░░░│
│O ░░░░░░░│            ├─────────┤
├─────────┤            │░░░░░░░░░│
│         │            ├─────────┤
│         │            │░░░░░░░░░│
└─────────┘            └─────────┘
     │      request 1       │
     │─────────────────────>│
     │      request 2       │
     │─────────────────────>│
     │      response 1      │
     │<─────────────────────│
     │      request 3       │
     │─────────────────────>│
     │      response 3      │
     │<─────────────────────│
     │      response 2      │
     │<─────────────────────│
     ▼                      ▼

HTTP プロトコルは、常にリクエストを送信してからレスポンスを受信する、リクエスト/レスポンス プロトコルであることがわかりました。一度に複数のリクエストを送信し、複数の応答を受け取ることはできますか? HTTP 2.0 は、ブラウザによる複数のリクエストの同時発行をサポートできますが、各リクエストには一意の識別子が必要です。サーバーはリクエストの順序ではなく複数の応答を返すことができ、ブラウザ自体はリクエストの順序と一致することができます。要求に対する応答を受け取りました。起立してください。 HTTP 2.0 では、ブラウザがリクエストを送信した後、次のリクエストの送信を続ける前に応答を待つ必要がないため、送信効率がさらに向上していることがわかります。

HTTP 3.0速度をさらに向上させるために、TCP プロトコルは廃止され、必要のない UDP プロトコルに置き換えられます。現在 HTTP 3.0はまだ実験的なプロモーション段階にあります。

サーブレットとは

JavaEE プラットフォームでは、TCP 接続の処理と HTTP の解析という基本的な作業がすべて行われます。プロトコルは破棄されます 既製の Web サーバーに対してこれを行うには、独自のアプリケーションを Web サーバー上で実行するだけで済みます。この目的を達成するために、JavaEEServlet API を提供します。Servlet API を使用して独自の Servlet## を作成します。 #HTTP リクエストを処理するために、Web サーバーは Servlet API インターフェイスを実装し、

は基礎となる関数を実装します。

// WebServlet注解表示这是一个Servlet,并映射到地址 hello.do
@WebServlet(urlPatterns = "/hello.do")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 设置响应类型:
 
        resp.setContentType("text/html");
        // 获取输出流:
 
        PrintWriter pw = resp.getWriter();
        // 写入响应:
 
        pw.write("<h2>Hello, world!</h2>");
        // 最后不要忘记flush强制输出:
 
        pw.flush();
    }
}

A

Servlet は常に HttpServlet から継承し、doGet() または doPost()## をオーバーライドします。 #方法。 doGet() メソッドは、HttpServletRequestHttpServletResponse という 2 つのオブジェクトを渡します。これらは、それぞれ HTTP リクエストとレスポンスを表します。 Servlet API を使用する場合、基盤となる TCP と直接対話することはなく、HttpServletRequest# であるため、HTTP プロトコルを解析する必要もありません。 ## および HttpServletResponse はリクエストとレスポンスをすでにカプセル化しています。応答の送信を例に挙げると、正しい応答タイプを設定し、PrintWriter を取得して応答を書き込むだけです。 このようなプロジェクトは、最終的に *.war

ファイルにパッケージ化されます。このファイルを実行するには、

ServletAPI をサポートする Web を使用する必要があります。 コンテナ (Web サーバー)。 したがって、まずサーブレット API をサポートする Web サーバーを見つける必要があります。

一般的に使用されるサーバーは次のとおりです:

    Tomcat: Apache によって開発されたオープンソースの無料サーバー;
  • Jetty: Eclipse によって開発されたオープンソースの無料サーバー;
  • GlassFish: オープンソースのフル機能の JavaEE サーバー。
  • サーブレットのライフサイクル

URL

パスを介して

サーブレットリクエストを開始するプロセスで、その本質はServlet インスタンスを実行する doXXX() メソッドを呼び出しています。 Servlet インスタンスを作成して使用するプロセスは、サーブレットのライフ サイクルと呼ばれます。ライフサイクル全体には、インスタンス化、初期化、サービス、破棄が含まれます。

    インスタンス化:
  • Servlet によって要求されたパスに基づいて ## を検索します (例: home.do ) #Servletインスタンス。インスタンスが存在しない場合は、コンストラクター メソッドを呼び出すことで Servlet インスタンス の作成が完了します。

    初期化:
  • サーブレット

    インスタンスを通じて、init() を呼び出します。メソッド、初期化ロジックを実行します。 サービス:

  • サーブレット
  • インスタンスを通じて、service() を呼び出します。メソッド、サブクラスがこのメソッドをオーバーライドしない場合、HttpServlet 親クラスの service() メソッドが呼び出され、親クラスのメソッド内でリクエスト メソッドが判断されます。 #GET リクエスト、次に doGet() メソッドを呼び出します。POST リクエストの場合は、doPost() メソッドを呼び出します。 if サブクラスが doXXX() メソッドをオーバーライドする場合、書き換えられた doXXX() メソッドが呼び出されます。

    doXXX ()
  • メソッドをオーバーライドしない場合、親クラスの
doXXX()

メソッドが呼び出されます。親クラスのメソッド実装では、405 というエラー ページが表示されます。 ステータスコードが返されます。

405 ステータス コード:

要求されたメソッドがサーバーでサポートされていないことを示します。 4. 破棄: サーバーがシャットダウンまたは再起動されると、すべてのサーブレット インスタンスが破棄され、サーブレット インスタンスの destroy() メソッドがと呼ばれた。

package com.my.hyz.web.servlet;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//@WebServlet("/home.do")
public class HomeServlet extends HttpServlet {

	public HomeServlet() {
		System.out.println("实例化");
	}
	@Override
	public void init() throws ServletException {
		System.out.println("初始化");
		//super.init();
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("调用Service实例");
	}

	@Override
	public void destroy() {
		System.out.println("销毁咯!!!!");
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("哎呦get到了"+this.hashCode());
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("哎呦post到了");
	}
}

以上がJavaでサーブレットを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。