検索
ホームページJava&#&チュートリアルJava のサーブレット セッションのグラフィック コードの概要

この記事はサーブレットセッションの導入を中心に紹介していますが、編集者がとても良いと思ったので、参考にさせていただきます。エディターに従って見てみましょう。

セッションはサーバー側のテクノロジーであり、サーバーは実行時に各ユーザーのブラウザーに対して専用のセッション オブジェクトを作成できます。デフォルトでは、サーバーがセッションを占有します。 . セッションはユーザーのブラウザー専用であるため、ユーザーがサーバーの Web リソースにアクセスすると、ユーザーがサーバーの他の Web リソースにアクセスすると、自分のデータを自分のセッションに保存できます。ユーザーにサービスを提供するために、ユーザーのそれぞれのセッションからデータを取り出します。

セッションとCookieの主な違い:

Cookieテクノロジーはクライアント側のテクノロジーであり、サーバーがユーザーのデータをユーザーのブラウザに書き戻します。


セッション技術はサーバー側の技術であり、サーバーがユーザーのために作成した専用のセッションオブジェクトにユーザーデータを書き込みますが、セッションはCookieに基づいています。


Session オブジェクトはサーバーによって作成され、Cookie とは異なります。プログラマは、リクエスト オブジェクトの getSession() メソッドを通じてセッション オブジェクトを取得できます。

セッションが作成されると、サーバー (Tomcat など) によって指定された 30 分間は操作が行われなくても (またはブラウザが閉じていても) 存続することに注意してください。ブラウザを閉じると、セッションは Cookie に基づいているため、セッションはまだ存在しますが、使用できなくなる可能性があります (Cookie をまだ取得できるかどうかによって異なります)。


次に、簡単なセッションの例を使用して、それぞれ ServletDemo1 と ServletDemo2 という名前の 2 つのサーブレットを説明し、作成してみましょう。


ServletDemo1 のコードは次のとおりです:



 HttpSession session = request.getSession();
 String data = "message form SessionDemo";
 session.setAttribute("data", data);

ServletDemo2 のコードは次のとおりです:


 response.setContentType("text/html;charset=utf-8");
 PrintWriter writer = response.getWriter();
     
 HttpSession session = request.getSession();
 String data = (String) session.getAttribute("data");
 writer.write(data);

ブラウザを開いて最初に ServletDemo1 にアクセスすると、ブラウザがセッションの作成を支援します。オブジェクトを作成し、データを保存します。次に、ServletDemo2 にアクセスすると、保存されたデータが表示されます:


これは、セッションがさまざまなサーブレットにアクセスするときに実際にデータを保存できることを意味します。


ここで明確にしておきますが、コードは同じですが、異なるブラウザからアクセスすると、この時点ではデータは同じであっても、異なる Session オブジェクトによって保存された異なるデータが表示されます。

たとえば、A が自分のホスト上のこのサーブレットにアクセスし、B が自分のコンピュータ上の同じサーブレットにアクセスした場合、A と B は独自のセッションを取得します。
そして、ブラウザを開いて ServletDemo1 にアクセスし、次に別のブラウザを開いて ServletDemo2 にアクセスすると、データが見つからないことが表示されます:


注: 現時点では 2 つのブラウザがあります。もう2回のセッションが終わりました! ! !


セッションテクノロジーを使用して、製品をクリックしてショッピングカートに追加するのと同様のケースを実行してみましょう。


前提条件の準備として、製品の JavaBean を作成する必要があります。コードは次のとおりです:

 public class Product {
   private String id;
   private String name;
   private String author;
  
   public Product() {
     super();
   }
 
   public Product(String id, String name, String author) {
     super();
     this.id = id;
     this.name = name;
     this.author = author;
   }
 
   public String getId() {
     return id;
   }
 
   public void setId(String id) {
     this.id = id;
   }
 
   public String getName() {
     return name;
   }
 
   public void setName(String name) {
     this.name = name;
   }
 
   public String getAuthor() {
     return author;
   }
 
   public void setAuthor(String author) {
     this.author = author;
   }

次に、データベースを作成し、クラス形式で作成します (まだデータベースを学習していない人はいますか?T_T !)、その後、Map コレクションを使用します。キーと値のペアを通じて簡単に取得できるようにデータを保存するには、次の手順を実行します。ユーザーがハイパーリンクをクリックすると、製品が次のようになります。ID はデータを保存するための基礎として使用され、他のサーブレット クラスはユーザーが購入した商品の種類を取得するために使用されます。

 public class ProductDatabase {
   
   private static Map<String,Product> map = new HashMap<String,Product>();
   
   static{
     map.put("1", new Product("1","《Java编程思想》","JB"));
     map.put("2", new Product("2","《Java核心技术》","fdaf"));
     map.put("3", new Product("3","《Java并发编程》","什么鬼"));
     map.put("4", new Product("4","《Head first 设计模式》","老王"));
     map.put("5", new Product("5","《HTML5权威手册》","hhaa"));
   }
   
   public static Map<String,Product> getMap() {
     
     return map;
   }
 }

現時点では、効果を見てみましょう:


次に、購入ハイパーリンクをクリックした後にサーブレットを作成します。サーブレットは、ユーザーが購入した商品を (ID 番号を通じて) 取得する必要があり、また (セッション オブジェクトを作成し、コレクションを使用して購入した商品を保存します。このセッション オブジェクトには、ユーザーが購入したい商品が保存されます。ショッピング カート ページに移動すると、セッションから商品を取り出し、購入することができます。それらを表示します:


   response.setCharacterEncoding("UTF-8");
   response.setContentType("text/html;charset=utf-8");
   PrintWriter writer = response.getWriter();
     
   //获取数据库中的商品数据
   Map<String, Product> map = ProductDatabase.getMap();
   for(Map.Entry<String, Product> entry : map.entrySet()) {
     Product book = entry.getValue();
     writer.print(book.getName()+" <a href=&#39;/myservlet/servlet/BuySession?id="+book.getId()+"&#39; >购买</a> <br/>");
     }
注: ここでは、SendRedirect リダイレクトが使用されます。転送が使用される場合、購入されたアイテムは再度購入されました。

ショッピング カート ページのサーブレットの機能は、ユーザーのセッションから保存された購入済み製品オブジェクトを取り出してページに表示するという比較的単純なものです:


     //获取用户所购买商品的id号
     String productId = request.getParameter("id");
     Product book =   ProductDatabase.getMap().get(productId);
     
     //将用户所购买的商品加入到Session对象中保存,以便最后一起结账,类似于购物车功能
     HttpSession session = request.getSession();
     List<Product> list = (List<Product>) session.getAttribute("productList");
     if(list == null){
       //首次购买
       list = new ArrayList<Product>();
       session.setAttribute("productList", list);
     }
     
     list.add(book);
     
     //跳转到购物车列表上
     response.sendRedirect("/myservlet/servlet/CartListServlet");

複数の商品をクリックすると、次のことが表示されます。購入したアイテムは、ショッピング カートのサーブレット ページに表示されます:


複数のブラウザを開いてこれらの製品をクリックすると、購入用の異なるショッピング カート ページが表示されるため、セッションを使用すると、異なるデータを保存しながら同じページにアクセスするという異なるユーザーのニーズを解決できます。

もちろん、これは、セッション中に複数のサーブレットにアクセスするブラウザによって生成されたデータをセッション オブジェクトが保存できることを強調しただけです。ブラウザがブラウズするときなど、上記の単純な例は確かにショッピングには使用できません。閉じられる (セッションが終了する) と、セッション オブジェクトは終了します。次にブラウザを開いたときには、ショッピング カートには何も表示されません。ユーザーのさまざまなニーズに応えたい場合は、セッションの基礎となる構造を理解する必要があります。オブジェクト

以上がJava のサーブレット セッションのグラフィック コードの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)