JavaWebの研究ノート(11)

歴史の本が表示さ

 

セッション

セッションの概要

  • (デフォルトでは)専用のセッションオブジェクトブラウザを:WEB開発では、サーバは注意し、各ユーザのブラウザのセッションオブジェクト(セッションオブジェクト)のために作成することができます。このように、ユーザーデータを保存する必要が、サーバープログラムのように、ユーザーは他のプログラムにアクセスするためにブラウザを使用する場合、他のプログラムは、ユーザーのセッション内のユーザデータから取り出すことができ、ユーザーの排他ブラウザセッションのユーザーデータに書き込むことができるとき顧客サービス。
  • 主な違いは、そのセッションとクッキーです。

リットルのクッキーは、ユーザーのブラウザに宛てのユーザデータです。

リットルセッション技術ユーザー排他的なセッションに書き込まれたユーザデータ。プレゼンスサーバ、Tomcatのもあります

Sessionオブジェクトがサーバーによって作成され、開発者はセッションオブジェクトを取得するのgetSessionリクエストオブジェクトのメソッドを呼び出すことができます。

  • 各ブラウザがセッションに独自のデータを格納します
  • セッションデータは、他のブラウザで共有することはできません
  • セッションユーザーがログインしているかどうかを決定するために一般的に有用
パッケージcom.zx.web.servlet.lesson04。

インポートにjava.io.IOException; 

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入javax.servlet.http.HttpSession。

@WebServlet( "/ Lesson04Servlet1" パブリック クラス Lesson04Servlet1が延びているのHttpServlet { 

    @Overrideが
    保護 ボイド doGetメソッドを(HttpServletRequestのREQ、HttpServletResponseのRESP)スローServletExceptionがは、IOException {
         // TODO自動生成されたメソッドスタブ
        
        // セッション・オブジェクト要求によって取得された 
        HttpSessionのセッション= req.getSessionを();
         //は、セッションにデータを保存する 
        にsession.setAttribute(「名前」、「ZX」); 
    } 
}
パッケージcom.zx.web.servlet.lesson04。

インポートにjava.io.IOException; 

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入javax.servlet.http.HttpSession。

@WebServlet( "/ Lesson04Servlet2" パブリック クラス Lesson04Servlet2が延びているのHttpServlet { 

    @Overrideが
    保護 ボイド doGetメソッドを(HttpServletRequestのREQ、HttpServletResponseのRESP)スローServletExceptionが、IOExceptionが{
         // TODO自動生成されたメソッドスタブ
        
        // セッションオブジェクト要求で取得した 
        HttpSessionのセッション= req.getSession();
         // 取得し、セッション値の 
        文字列名=(String)をsession.getAttribute( "名前" ) ;
         // クライアントへの応答
        resp.getWriter()ライト(名);. 
    } 
}

ブラウザが値を取得した後、他のブラウザではより少ないでしょう

ブラウザを閉じた後、再度開く、新しいセッションであるため、セッションも変更されます。

セッションは、単に次のように理解することができる。次に、ユーザは、ブラウザを閉じて、ブラウザを開き、複数のWebサーバのリソースにアクセスするために、複数のハイパーリンクをクリックして、全体のプロセスは、セッションと呼ばれています。

 

質問のセッション

質問:どのようにサーバーセッションを実装するために、ユーザーのブラウザサービスに?

Vサーバーは、各ブラウザのセッションIDを割り当て、クライアントによるセッションIDは、フォームのクッキーに保存されています

セッション実装の原則:

  1. ブラウザが背景にアクセスするときに、背景がSessionオブジェクトを作成し、IDを割り当てます
  2. の形でクライアントに返さこのクッキーレスポンスヘッダによるセッションID
  3. クライアントは、ローカル(ブラウザ)クッキーがあるJI入れます
  4. あなたがサイトを訪問する次回は、背中合わせにクッキーリクエストヘッダの形でセッションID意志
パッケージcom.zx.web.servlet.lesson07。

インポートにjava.io.IOException; 

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse; 

/ ** 
 *サーブレット実装クラスがloginservlet 
 * / 
@WebServlet( "/がloginservlet" パブリック クラスがloginservletが延びHttpServletを{
     プライベート 静的 最終 長いのserialVersionUID = 1L 
    @Override 
    保護 ボイド doPostメソッドは、(HttpServletRequestのREQ、HttpServletResponseのRESP)スローは、IOException {ServletExceptionがを
         // TODO自動生成方法スタブ
        
        resp.setHeader( "コンテンツタイプ"、 "テキスト/ HTML;のcharset = UTF-8" )。
        // 1.获取请求参数 
        文字列名= req.getParameter( "ユーザ名" ); 
        文字列のパスワード = req.getParameter( "パスワード" ); 
        文字列client_code = req.getParameter( "コード" )。
        
        // 2.获取服务端的コードの 
        文字列server_code =(文字列)req.getSession()のgetAttribute( "コード" );
        
        ); 
            }
        
        
        
            
        } 
        
        // 4.検証コードは、サーバから削除され
         // req.getSession()removeAttribute( "コード");. 
        req.getSession()無効();. // すべてのデータが削除され、セッション
        
    } 
}
パッケージcom.zx.web.servlet.lesson07。

インポートにjava.io.IOException;
輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse; 

輸入cn.dsna.util.images.ValidateCode; 

/ ** 
 *サーブレット実装クラスValidateCodeServlet 
 *验证码的サーブレット
 * / 
@WebServlet( "/ ValidateCodeServlet" パブリック クラス ValidateCodeServletは延びHttpServletを{ 
    

    / **
     * @see のHttpServlet#のdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)
      * / 
    保護された ボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)をスローServletExceptionがは、IOException {
         // TODO自動生成方法スタブ 
        ValidateCodeのVC = 新しい ValidateCode(100、30、4、 6 )。
        
        System.out.println( "生成的验证码:" + vc.getCode()); 
        
        // 把验证码存在セッション 
        でrequest.getSession()のsetAttribute( "コード" 、vc.getCode())。
        
        vc.write(response.getOutputStream())。
    } 

}

HttpSessionの一般的な方法

  • HttpSessionオブジェクトに格納されたデータは、オブジェクトは、ドメイン・オブジェクトです。
  • 空のsetAttribute(文字列名、オブジェクト値)、データメモリ
  • getAttribute(文字列名)をオブジェクト。フェッチ
  • キーのデータを削除する。removeAttribute(文字列名)を無効
  • HttpSession.getId()
  • setMaxInactiveInterval(int型の間隔)は、セッションの生存時間を設定します
  • このセッションが無効になるように、無効()

 

getSession():内部の原理のインプリメンテーション

HttpSessionのでrequest.getSession():の原則の内部実装

1は、クッキーJSESSIONIDの値の名前を取得します。

2は、そのようなクッキーが存在しない、ユニークなセッションIDを割り当て、新しいHttpSessionオブジェクトを作成し、クッキーJSESSIONIDとしてクライアントに名前を書いた=セッションID

3は、そのようなクッキーがあり、IDに基づいて、サーバのメモリからそのHttpSessionオブジェクトを見つけるために、クッキー(オブジェクトのすなわちHttpSessionの値)の値を取得します:

結果:あなたを提供し続けて削除します。

見つかりません:2を最初から。

 

HttpSessionのでrequest.getSession(ブール値が作成)

パラメータ:

真:とのgetSession()は同じ機能します。

偽:クッキーのクライアントJSESSIONID値によると、対応するHttpSessionオブジェクトを見つけ、リターンヌルを見つけることができません(新しい、単にクエリを作成しません)。

ブラウザはSESSIONIDを渡すが、サーバーが対応するオブジェクトIDを持っていない、サーバーはnullを返します

3つの方法でセッション状態:

作成:ブラウザが最初に動的に作成されたサーバーのリソースにアクセスすると

アライブ:サーバーアプリケーションが実行されています

死:

session.invalidate();強制破壊

タイムアウト:デフォルトで30分

秒setMaxInactiveInterval(int型)

 

セッションの永続性

メモリ空間を節約します。

サーバーの再起動ことを確認してくださいまたは再起動する前に、セッションに対応できる単一のWebアプリケーションを再起動します。

方法:上記の所望のクラス直列化(セッション・ストレージ・オブジェクトの実装)を実装

 

JSP:

lesson1.jspにアクセスするときは、最初lession1_jsp.javaをコンパイルした後、lession1_jsp.classにコンパイルされます

  • JSPは、Javaサーバーページの略で、それservle技術は、日によって定義された動的なWebリソースを開発するための技術です。JSP /サーブレットの仕様。JSPは実際にはサーブレットです。 
  • この技術のJSP最大の特徴は、JSP書き込みHTMLで記述されたように、ということですが、それは、HTMLのみに比べて、ユーザのための静的なHTMLデータを提供することができ、技術がユーザーに提供するページで、ネストされたとJSP、Javaコードが可能になります動的データ。

JSPベスト・プラクティス

  • サーブレット:コントローラ。Javaコードのロジックを記述するキー(フォームデータ、ビジネスロジック処理を取得し、配布ステアリング)
  • JSP:テンプレートコードが表示されます。強調表示データ

デモ:JSPフォームは、リクエストを処理しますが、一般的にその形に対処するためのサーブレットで使用することはできません

注意:リクエスト、アウト、応答が呼ばれるJSPは、組み込みオブジェクト、直接宣言する必要はありません

メソッドを指定する.JSPは二つの方法があることができます:

1.プロジェクト名を追加します。

2.直接書き込み.jspファイル名

  1. 小さなスクリプト<%Javaコード%>
  2. 式<3%+ 2%=> Out.print相当する(2 + 3)。
  3. 声明では、<%!%>のメンバーはグローバル、静的ブロックのクラスを定義する表現。

 

JSPのコメント:<% - コメントの内容 - %>特長:安全、地方の交通

コメントページ:<! - コメントページ - >特長:不安、交通費

ページ

属性:

控除:自己学習

セッションは:自動的にセッションオブジェクトを作成します。デフォルト値はtrueです。

バッファ:JSPがするjavax.servlet.jsp.JspWriter出力文字ストリームを持っています。セッティング。出力データのキャッシュサイズは、デフォルトでは8キロバイトです

isErrorPage:スロー可能オブジェクトを作成するかどうか。デフォルトはfalseです。

共通:デモ

輸入と輸入Javaコードは同じです

<%@のページのインポート= "java.util.Date、java.util.Listに" %>

または:

<%@のページのインポート= "java.util.Date" %>

<%@のページのインポート= "java.util.Listに" %>

注意:JSPが自動的に以下のパッケージをインポートします。

輸入されるjava.lang。*;

インポートのjavax.servlet。*;

輸入のjavax.servlet.http *。;

輸入javax.servlet.jsp *。;

errorPageでは:エラーページが存在する場合、特定のリソースにジャンプ

あなたが書く場合errorPageでは=「/ URI」「/」ディレクトリアプリケーション、電流の絶対パスを表します。

あなたが書いていない場合は、「/」の相対パスを表します。

 あり/ WebContentをからのパスを見つけることです

contextType:response.setContextTypeに相当する( "テキスト/ HTML;のcharset = UTF-8");

pageEncodingは:変換に使用JSPエンジンエンコードされたファイルを伝えます。

isELIgnored:EL式をサポートするかどうか。デフォルトはfalseです

含める

静的が含まれます:現在のページに含まれる他のリソースを。

<%@ファイル= "/含める/ header.jsp" %が含まれます>

ダイナミックは、次のとおりです。

<jsp:ページが含ま= "/ / header.jspを含める"> </ JSP:include>の

 

違い:異なる期間の翻訳

旧:翻訳にマージ2本の論文を置きます

後者:ザが含まれている場合、ファイルは、マージされないコードが実行され、別のファイルの内容のみを含みます。

 JSPは、翻訳の過程を指し、次の場合は.jspファイルアクセス、hは.classファイルの.javaに、その後の.jspに変わります

原則:静的な動きを使用しないでください。

 

JSP 6一般的なアクション:

一般的なアクションJSP 6

  • <jsp:include>の現在のJSPページに別のJSP動的コンテンツを含みます
  • <jsp:フォワード>(転送要求に対応する)要求を転送
  • <jsp:param>のパラメータ設定要求           
  • <jsp:useBeanの>オブジェクトを作成するには
  • <jsp:setPropertyを>指定されたオブジェクトのプロパティの割り当てへ
  • <jsp:getPropertyメソッド>指定されたオブジェクトのプロパティ値を削除します

 

 次のオブジェクト名を持つIDが関連付けられています

 

おすすめ

転載: www.cnblogs.com/zhangwugai/p/11390882.html