Servletは、データJava Webコンポーネントを共有するいくつかの方法を実現する。


Servlet Java Webの3つのコンポーネントは、Servletコンポーネント(要求を受け入れ、データに応答する)、Filterコンポーネント(フィルタ、ブロック要求)、Listenerコンポーネント(モニター)を含み、これらの3つのコンポーネントは、java Webコアコンテンツを構成し、バックエンドとしてもJava Webの最も重要なコンテンツである。
一、Servlet概要
Servletは、sun社が提供する動的なウェブリソースを開発するための技術である。
Sun社はAPIでservletインターフェースを提供しています。ユーザーが動的なウェブリソース(すなわちJavaプログラムを開発してブラウザにデータを出力する)を送信するには、次の2つのステップが必要です。
1、Javaクラスを作成し、servletインターフェースを実現する。 
2、開発されたJava類をウェブサーバに配置する。
一般的な呼び方の習慣によって、私達もservletインターフェースを実現したjavaプログラムをServletと呼びます。
二、Servletの運行過程
ServletプログラムはWEBサーバで起動され、ウェブサーバはクライアントのServletアクセス要求を受信した後:
①Webサーバは、まず、Servletをロードし、作成したオブジェクトの例を確認する。もしそうであれば、直接にステップ④を実行し、そうでなければ、ステップ②を実行します。
②Servletの例示的なオブジェクトをロードして作成します。
③Servletインスタンスオブジェクトのinit()メソッドを呼び出します。
④HTTP要求メッセージをカプセル化するためのHttpServletRequestオブジェクトとHTTP応答メッセージを表すHttpServletResonseオブジェクトを作成し、Servletのservice()方法を呼び出し、要求と応答オブジェクトをパラメータとして送る。
⑤WEBアプリケーションが停止または再起動される前に、ServletエンジンはServletをアンインストールし、アンインストールする前にServletのdestroy()メソッドを呼び出します。
Servletコンポーネント:
Servletコンポーネントとは、処理要求と送信応答のプロセスは、Servletというプログラムによって実行され、Servletは、動的ページを実現するために派生されたものである。
全体のプロセス:
クライアントがサーバに要求を送信します。サーバは要求情報をServletに送信します。Servletは応答コンテンツを生成し、サーバに送信する。コンテンツの動的な生成に応答して、クライアントの要求に通常依存する。サーバは応答をクライアントに返します。
複数のServlet間でデータを共有するためのソリューション
Servlet仕様では、4つのデータ共有スキームを提供します。
  • Servlet Contextインターフェース
  • HttpServletRequestインターフェース
  • HttpSessionインターフェース
  • Cookie類
  • RequestとReponserequest及びresponseオブジェクトの原理:
    ==すべてサーバーによって作成されます。私達はそれらを使います。
    ==requestオブジェクトは要求メッセージを取得するためのものであり、レスポンスメッセージを設定するためのオブジェクトである。
    ==requestオブジェクト継承体系構造:ServletRequestインターフェース
    <<継承>>HttpServletRequestインターフェース
    <<実装>>
    (tomcat類)org.apache.catalina.connector.RequestFacade在这里插入图片描述
    転送とリダイレクト
    第1のrequest.getRequestDispatcher().forward(request,response)
    1、転送に属し、サーバジャンプでもあり、方法呼び出しに相当し、現在のファイルを実行する過程で実行対象ファイルに転向し、2つのファイル(現在のファイルとターゲットファイル)は同一の要求に属し、前後のページで一つのrequestを共有し、これを通じて一つのデータまたはsession情報を伝達することができ、request.setAttribute()request.getAttribute()
    2、前後2回実行した後、アドレスバーは変更されません。まだ現在のファイルの住所です。
    3、本ウェブアプリケーション以外のページやウェブサイトに転向できないので、方向転換のスピードが速いです。
    4、URLに含まれる「/」は、アプリケーション(項目)の経路を表します。
    第二のresponse.sendRedirect()
    1、リダイレクトに属し、クライアントのジャンプでもあり、クライアントがサービス端末に要求を送信した後、サーバーは応答に戻り、クライアントが応答を受信した後にもう一度サービス端末に要求を送信し、合計2回の要求であり、前後のページは一つのrequestを共有しないので、request.setAttribute()で設定された属性値を読み取ることができない。
    2、前後2回実行した後、アドレスバーが変更されたのは、対象ファイルの住所です。
    3、本ウェブアプリケーション以外のページとウェブサイトに転向できるので、方向転換のスピードは比較的に遅いです。
    4、URL種に含まれる「/」はルートディレクトリの経路を表します。
    特殊なアプリケーション:データを修正、削除、追加する場合はresponse.sendRedirect()を使うべきです。request.getRequestDispatcher().forward(request,response)を採用すれば、操作前後のアドレス欄は変更されず、依然として修正されたコントローラであり、このとき現在のページを更新すると、再度データの修正を要求する人がいます。つまり、ページを更新すると、データが追加される原因です。
    どのように第二の方法でデータを転送しますか?
    1、sessionは選択できますが、第二のファイルから削除します。
    2、要求されたurlにパラメータを持ち込むことができ、"add.htm?id=122"のように。
    典型的な応用シーン:
  • forward:Servletにアクセスして業務ロジックを処理し、その後forwardからjspまで処理結果を表示し、ブラウザ内のURLは不変です。
  • redirect:フォームを提出し、処理が成功したら別のjspにredirectを送り、フォームの重複提出を防止し、ブラウザ内のURLが
  • に変わった。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    グローバルスコープオブジェクト
    6.開発者習慣ServletContextオブジェクトを「グローバルスコープオブジェクト」と呼ぶ。
    7.仕事の原理:各ウェブサイトにはグローバルスコープの対象が存在します。
    グローバル作業領域オブジェクトにデータを保存し、現在の他のservletはこのデータをグローバルスコープオブジェクトから入手して使用することができます。
    8.ライフサイクル:Httpサーバの起動中に、自動的にメモリにグローバルスコープオブジェクトを作成し、実行中にグローバルスコープオブジェクトが一つしかなく、常に生存しています。Httpサーバがオフになったら、廃棄します。
    グローバルスコープオブジェクトライフサイクルは、ウェブサイト全体を通じて実行されます。
    在这里插入图片描述ServletContextグローバルスコープオブジェクトは、すべてのServletがこのオブジェクトを共有する。
  • は、ドメインオブジェクト
  • である。
  • は、グローバル構成パラメータ
  • を読み取ることができる。
  • は、現在のプロジェクトディレクトリの下のリソースファイル
  • を検索することができます。
  • は現在のプロジェクト名(了解)
  • を取得することができます。
    ドメインの対象は以下の3つの方法があります。
  • setAttribute(name,value); nameはStringタイプで、valueはObjectタイプです。ドメインオブジェクトにデータを追加し、key-valueで
  • を追加します。
  • getAttribute(name);は、指定されたkeyに基づいてドメインオブジェクト内のデータを読み出す
  • removeAttribute(name);は、指定されたkeyに従って、ドメインオブジェクトからデータを削除する
  • HttpServletRequestオブジェクトは、クライアントを代表する要求であり、クライアントがHTTPプロトコルでサーバにアクセスすると、HTTP要求ヘッダのすべての情報がこのオブジェクトにカプセル化され、このオブジェクトが提供する方法により、クライアント要求のすべての情報を得ることができる。
    Http Sessionサービスエンドの技術
    サーバは、各ユーザのために独立したHttpSessionを作成します。
    Http Sessionの原理
    ユーザがServletに初めてアクセスすると、サーバ端はユーザに独立したSessionを作成します。
    そして、SessionIDが生成され、このSessionIDは、応答ブラウザの際にクッキーにインストールされ、ブラウザに保存され、ユーザが再度Servletにアクセスすると、要求中にクッキーのSessionIDを携帯してアクセスします。サーバは、このSessionIDに基づいて対応するSessionオブジェクトがあるかどうかを確認します。
    あるものは持ち出して使う。なしでSessionを作成しました。
    ドメインの範囲:
    Conteextドメイン>Sessionドメイン>Requestドメイン
    セッションが終了しない限り、セッションは存在しますが、セッションにはデフォルトの生存時間があります(30分)
    Cookie
    クライアントセッション技術は、データをクライアントに保存します。
  • 快速入門を使う:
  • は、Cookieオブジェクトを作成し、データ
  • をバインディングする。
    
    new Cooike(String name,String value)
    3.Cookieオブジェクトの送信
    
    response.addCookie(Cookie cookie)
    
    4.Cookieを取得し、データを取得する
    
    Cookie[] request.getCookie()
    Cookie廃棄タイミング
    1.デフォルトはブラウザのクローズによって破棄されます。
    2.手動設定の場合、Cookieの生存時間を設定し、ブラウザを閉じてCookieを削除しない;
    
     cookie.setMaxAge(60);//  cookie     1  
    
    セッション
    サーバー側セッション技術
    Servletの場合:
    Servletがクライアントアクセスの最初のWEBアプリケーションのリソースである場合は、request.get Session()またはrequest.get Session(true)を呼び出してこそ、HttpSessionオブジェクトを作成することができます。
    1)ServletでHttpSessionオブジェクトをどう取得しますか?request.getSession(boolean create):createはfalseであり、現在のJSPページに関連するHttpSessionオブジェクトがないとnullに戻る。
    もしtrue createに戻ることがあれば、必ずHTTPSessionのオブジェクトに戻ります。エン前JSPページに関連するHttpSessionオブジェクトがない場合、サーバは新しいHttpSessionオブジェクトを作成して戻ってきます。あれば、直接に関連に戻ります。request.getSession()request.getSession(true)に等しい。
    2.HttpSessionの対象をいつ廃棄しますか?
    1)直接HttpSessionを呼び出すinvalidate()方法:HttpSessionを無効にする
    2)サーバが現在のWebアプリケーションをアンインストールしました。
    3)HttpSessionの期限を超過しました。
    HttpSessionの期限切れを設定します。単位はSです。
    
    session.setMaxInactiveInterval(5);
    out.print(session.getMaxInactiveInterval());
    <!-- web.xml     HttpSession    。 -->
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    <!--    30   -->
    
    この時間がSessionのタイムアウト時間です。タイムアウト時間を超えてサーバーにアクセスしなかったら、Sessionは自動的に無効になります。
    Sessionには以下の特徴があります。
    (1)Sessionのデータはサーバ端に保存されます。
    (2)Sessionでは任意の種類のデータを保存できます。
    (3)Sessionデフォルトのライフサイクルは30分で、手動でより長い時間またはより短い時間を設定できます。
    ここでは、Servletがデータを共有するJava Webコンポーネントを実現するいくつかの方法についての記事を紹介します。Servletに関する詳細な共有データの内容は、以前の記事を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。