ホームページ  >  記事  >  Java  >  Java のサーブレット セッションのグラフィック コードの概要

Java のサーブレット セッションのグラフィック コードの概要

黄舟
黄舟オリジナル
2017-07-27 15:18:371324ブラウズ

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

セッションはサーバー側のテクノロジーであり、サーバーは実行時に各ユーザーのブラウザーに対して専用のセッション オブジェクトを作成できます。デフォルトでは、サーバーがセッションを占有します。 . セッションはユーザーのブラウザー専用であるため、ユーザーがサーバーの 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 までご連絡ください。