この記事では、参照のためのライフサイクルとサーブレットの実用的な原則を共有しています。特定のコンテンツは次のとおりです
サーブレットのライフサイクルは、3つの段階に分割されます。
1。初期化段階でinit()メソッドを呼び出します
2。顧客要求段階に応じてサービス()メソッドを呼び出す
3。終了段階でDestroy()メソッドを呼び出します
サーブレット初期化フェーズ:
次の瞬間に、サーブレット容器はサーブレットをロードします。
1.サーブレット容器が起動すると、一部のサーブレットが自動的にロードされます。それを実装するには、web.xmlファイルに<servlet> </servlet>の間に次のコードを追加する必要があります。
<Loadon-StartUp> 1 </roadon-startup>
2。サーブレット容器が開始された後、クライアントは初めてサーブレットにリクエストを送信します
3。サーブレットクラスファイルが更新されたら、サーブレットをリロードします
サーブレットがロードされた後、サーブレットコンテナはサーブレットインスタンスを作成し、初期化のためにサーブレットのinit()メソッドを呼び出します。 init()メソッドは、サーブレットの生涯にわたって1回のみ呼び出されます。
サーブレットの仕組み:
まず、顧客のリクエストを受け取って応答するプロセスを簡単に説明しましょう。最初に、顧客はリクエストを送信します。サーブレットは、リクエストに応答するためにService()メソッドを呼び出します。ソースコードを介して見ることができます。 service()メソッドはリクエストメソッドと一致します。 Doget、Dopost、およびその他の方法を呼び出してから、対応するメソッドを入力して、顧客への応答を実現するために論理レイヤーメソッドを呼び出します。サーブレットインターフェイスやgenericservletには、doget、dopostなどの方法はありません。これらのメソッドはhttpservletで定義されていますが、すべてエラー情報を返します。したがって、サーブレットを定義するたびに、DogetやDopostなどのメソッドを実装する必要があります。
各カスタムサーブレットは、サーブレットインターフェイスを実装する必要があります。 5つの方法がサーブレットインターフェイスで定義されており、その中で3つのより重要な方法には、サーブレットのライフサイクル、つまり上記のinit()、service()、およびdestroy()メソッドが含まれます。 GenericServletは一般的なものであり、プロトコルではないサーブレットではなく、サーブレットインターフェイスを実装しています。 httpservletはgenericservletから継承するため、httpservletはサーブレットインターフェイスも実装します。したがって、サーブレットを定義するときは、httpservletを継承するだけです。
サーブレットインターフェイスとgenericservletはプロトコルに固有のものではありませんが、HTTPServletはHTTPプロトコルに固有のクラスであるため、Service()メソッドはHTTPServletおよび要求されたServletRequestおよびServletResponseに実装されています。
public void Service(ServletRequest Req、servletResponse Res)は、servletexception、ioexception {httprequest request; HTTPRESPONSE応答。 try {req =(httprequest)request; res =(httpresponse)応答; } catch(classcastException e){new servletexception( "non-http request Response"); } service(request、response);}HTTPServletのDOXXXメソッドがエラー情報を返しているため、コードは最終的にHTTSVELT独自のサービス(リクエスト、応答)メソッドを呼び出し、リクエストに従って対応するDOXXXメソッドを呼び出します。
保護されたvoid doget(httpservletrequest res、httpservletresponse rep)servletexception、ioexception {string protocol = req.getprotocol(); string msg = istring.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); }}したがって、これらのメソッドをカスタムサーブレットでオーバーライドする必要があります!
ソースコードの前に秘密はありません!
サーブレット応答リクエストフェーズ:
ユーザーリクエストがサーブレットに到達するために、サーブレットコンテナはこのリクエストに固有のサーブレッツリクエストオブジェクトとサーブレスポンスオブジェクトを作成し、サーブレットサービスメソッドを呼び出します。 Serviceメソッドは、ServletRequestオブジェクトから顧客要求情報を取得し、リクエストを処理し、ServleTResponseオブジェクトを介して顧客に応答情報を返します。
Tomcatの場合、渡されたパラメーターをハッシュテーブルに配置し、ハッシュテーブルの定義は次のとおりです。
コードコピーは次のとおりです。プライベートハッシュテーブル<string string []> paramhashstringarray = new hashtable <string string []>();
これは、文字列のキー価値マップ - > string []です。
ハッシュマップスレッドは安全ではなく、ハッシュテーブルスレッドは安全です。
サーブレット終了フェーズ:
Webアプリケーションが終了した場合、またはサーブレットコンテナが実行されている場合、またはサーブレットコンテナがサーブレットの新しいインスタンスをリロードする場合、サーブレットコンテナは最初にサーブレットのDestroy()メソッドを呼び出します。
サーブレットがいつ作成されますか:
1.デフォルトでは、Webクライアントが初めてサーブレットへのアクセスを要求する場合、Webコンテナはサーブレットのインスタンスを作成します。
2。Web.xmlファイルの<Servlet>要素で<load-on-startup>の要素が指定されている場合、サーブレットコンテナは、Webサーバーを起動するときにサーブレットオブジェクトを順に作成および初期化します。
注:web.xmlファイルでは、一部のサーブレットには<serlvet>要素のみがあり、<サーブレットマッピング>要素がないため、URLを介してこれらのサーブレットにアクセスすることはできません。このサーブレットは通常、<サーブレット>要素に<load-on-startup>子要素を構成するため、コンテナはこれらのサーブレットを自動的にロードし、開始時にinit()メソッドを呼び出し、グローバルな初期化作業を完了します。
Webアプリケーションはいつ開始されますか:
1.サーブレットコンテナが開始されると、すべてのWebアプリケーションが開始されます。
2.コントローラーはWebアプリケーションを開始します
サーブレットとJSPの比較:
動的なWebページを生成できる多くの類似点があります。
JSPの利点は、Webページの制作が得意であり、動的なページを生成する方が直感的であることですが、不利な点は、追跡してトラブルシューティングが簡単ではないことです。
サーブレットは純粋なJava言語であり、プロセスとビジネスロジックの処理が得意です。欠点は、動的なWebページを生成することは直感的ではないことです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。