1分間でサーブレットの概念を理解

6710 ワード

サーブレットはSUNが発売した規範で、Javaで動的なウェブサイトを開発する方法を規定しています.つまり、Javaはサイトのバックグラウンドを開発するために使用できますが、一定の基準に従う必要があります.
サーブレットはすべてのJava APIを使用でき、クラスライブラリが豊富で、機能が強い.
サーブレットでは、次のことができます.
•ユーザーが
フォームで送信した情報を受信します.
•ユーザー情報、文章内容、ページのクリック回数などを含むデータベースを検索する.
•認証コードを生成し、マシンの悪意のある登録を防止します.
たとえば、WebページにIPアドレスを表示するには、HTMLのソースコードは次のとおりです.

<html lang="zh"><head>   
 <meta charset="UTF-8">    
<title>    </title>
</head>
<body>   
 <p>  IP   :127.0.0.1</p>
</body>
</html>

では、サーバ上のJavaコードはこのように書くべきです.

//       
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

//    HttpServlet  
public class HelloWorld extends HttpServlet {
   public void init() throws ServletException{
       // TODO
   }

     public void doGet(
        HttpServletRequest request,
        HttpServletResponse response
    )throws ServletException, IOException{
        //       
        response.setContentType("text/html");

         //     println()  HTML  
        PrintWriter out = response.getWriter();
        out.println('<!DOCTYPE html>');
        out.println('<html lang="zh">');
        out.println('<head>');
        out.println('<meta charset="UTF-8">');
        out.println('<title>    </title>');
        out.println('</head>');
        out.println('<body>');
        out.println('<p>  IP   :');
        out.println(request.getRemoteAddr());
        out.println('</p>');
        out.println('</body>');
        out.println('</html>');
    }

    public void destroy(){
        // TODO
    }
}

サーブレットのライフサイクルは、次の3つのフェーズに分けられます.
1,初期化フェーズ呼び出しinit()メソッド
2,顧客要求フェーズに応答してサービス()メソッドを呼び出す
3,終了フェーズ呼び出しdestroy()メソッド
サーブレット初期化フェーズ:
次のタイミングでサーブレットコンテナにサーブレットをロードします.
1,サーブレットコンテナの起動時に自動的にいくつかのサーブレットをロードし、それを実現するにはwebだけが必要である.XMLファイルの<サーブレット>には、次のコードが追加されています.
?
1
2サーブレットコンテナの起動後、お客様は初めてサーブレットに要求を送信します.
3,サーブレット類ファイルが更新された後、サーブレットを再ロードする
サーブレットがマウントされると、サーブレットコンテナはサーブレットインスタンスを作成し、サーブレットのinit()メソッドを呼び出して初期化します.サーブレットのライフサイクル全体で、init()メソッドは一度だけ呼び出されます.
    
サーブレットの動作原理:
まず、サーブレットが顧客要求を受信して応答する過程を簡単に説明し、まず顧客が要求を送信し、サーブレットはサービス()メソッドを呼び出して要求に応答し、ソースコードで見ることができ、サービス()メソッドでは要求の方式をマッチングし、doGet、doPostなどのメソッドを呼び出してから、対応するメソッドで論理層を呼び出す方法を選択し、お客様への応答を実現します.サーブレットインタフェースやGenericServiceletにはdoGet,doPostなどのメソッドはありませんが、HttpServiceletではこれらのメソッドが定義されていますが、error情報を返すので、サーブレットを定義するたびにdoGetやdoPostなどのメソッドを実装する必要があります.
各カスタムサーブレットはサーブレットのインタフェースを実装する必要があります.サーブレットインタフェースには5つのメソッドが定義されています.このうち、重要な3つのメソッドは、上述したinit()、service()、destroy()メソッドに関連しています.GenericServiceletは、プロトコル固有のサーブレットではなく、サーブレットインタフェースを実現する汎用的なサーブレットです.一方、HttpServletはGenericServletに継承されるため、HttpServletもServletインタフェースを実現する.したがって,サーブレットを定義する際にはHttpサーブレットを継承するだけでよい.
サーブレットインタフェースおよびGenericServiceは、プロトコルに固有ではなく、HttpServiceはHTTPプロトコルに固有のクラスであるため、HttpService()メソッドが実装され、要求サーブレットRequestが、サーブレットResponseがHttpRequestおよびHttpResponseに強く移行する.
?
public void service(ServletRequest req,ServletResponse res) 
  throws ServletException,IOException
{
      HttpRequest request;
      HttpResponse response;
 
     try
     {
         req = (HttpRequest)request;
         res = (HttpResponse)response;
      }catch(ClassCastException e)
      {
         throw new ServletException("non-HTTP request response"); 
      }
      service(request,response);
}
コードの最後にHTTPサーブレット独自のサービス(request,response)メソッドを呼び出し、要求に応じて対応するdoXXXメソッドを呼び出します.HttpサーブレットのdoXXXメソッドはエラー情報を返すため、
?
protected void doGet(HttpServletRequest res,HttpServletResponse resp)
  throws ServletException,IOException
{
   String protocol = req.getProtocol();
   String msg = IStrings.getString("http.method_get_not_supported");
   if(protocol.equals("1.1"))
   {
      resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);
    }
   esle
    {
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);
    }
}
カスタムサーブレットでオーバーライドする方法が必要です!
ソースコードの前に、秘密はありません!
---------------------------------------------------------------------------------------------------------------------------------
サーブレット応答要求フェーズ:
サーブレットコンテナは、ユーザがサーブレットに到達した要求に対して、その要求に固有のサーブレットRequestオブジェクトとサーブレットResponseオブジェクトを作成し、サーブレットのサービスメソッドを呼び出します.サービスメソッドは、サーブレットRequestオブジェクトから顧客要求情報を取得し、その要求を処理し、サーブレットResponseオブジェクトを介して顧客に応答情報を返す.
Tomcatの場合、渡されたパラメータは次のように定義されたHashtableに配置されます.
?
private Hashtable paramHashStringArray = new Hashtable();
これはString-->String[]のキー値マッピングです.
HashMapスレッドは安全ではありません.Hashtableスレッドは安全です.
-----------------------------------------------------------------------------------------------------------------------------------
サーブレット終了フェーズ:
WEBアプリケーションが終了したり、サーブレットコンテナが実行を終了したり、サーブレットコンテナがサーブレットの新しいインスタンスを再ロードしたりすると、サーブレットコンテナはサーブレットのdestroy()メソッドを呼び出し、destroy()メソッドでサーブレットが使用するリソースを解放することができます.
-----------------------------------------------------------------------------------------------------------------------------------
サーブレットが作成されるタイミング:
1、デフォルトでは、WEBクライアントが最初にサーブレットへのアクセスを要求すると、WEBコンテナはこのサーブレットのインスタンスを作成します.
2,web.xmlファイルで要素にサブ要素が指定されている場合、サーブレットコンテナはウェブサーバを起動すると、順にサーブレットオブジェクトを作成して初期化します.
注意:web.xmlファイルでは、一部のサーブレットには要素しかなく、要素がないため、urlでこれらのサーブレットにアクセスできません.このサーブレットは通常、要素にサブ要素を構成し、コンテナが起動時にこれらのサーブレットを自動的にロードしてinit()メソッドを呼び出し、グローバルな初期化作業を完了します.
Webアプリケーションが起動されるタイミング:
1サーブレットコンテナが起動すると、すべてのWebアプリケーションが起動します
2、コントローラがwebアプリケーションを起動する
-----------------------------------------------------------------------------------------------------------------------------------------------
サーブレットとJSPの比較:
ダイナミックなWebページを生成できる類似点はたくさんあります.
JSPの利点は,ページ作成が得意で,動的ページを生成するのが直感的であり,追跡や並べ替えが容易でないことである.
サーブレットは純粋なJava言語で、プロセスとビジネスロジックを処理するのが得意で、欠点はダイナミックなWebページを生成するのが直感的ではないことです.