1

いくつかのWebサイトがどのように機能するかについて理論的な質問をしたいと思います。例として、私がオンラインストアのAマーケットにいるとしましょう。ショッピングトロリーにワインのケースを入れました。ページは次のURLで表示されました。

www.A.co.uk/webstore/basket.asp?calledby=normal&ProductCode=6379044

私は買い物を続け、次に別のワインをトロリーに入れました、そして再びページはこのURLで現れました

www.A.co.uk/webstore/basket.asp?calledby=normal&ProductCode=6323456

次に、ブラウザの[戻る]ボタンを3回クリックすると、トロリーページが再び表示されました。今回は最初のアイテムのみが含まれ、2番目のアイテムは含まれていませんでした。

別のウェブサイトで私は以下を示しました:

ワインのケースを選びました。その結果、ワインを含むフォームがこのASPページに投稿されましたbasket.asp?Item=3605681。ここで、Itemはワインの特定のケースのIDです。ただし、ブラウザに表示されたページのURLは異なります。

www.B.com/extra/basket.aspx?acstore=10&ba=0

次に、別のワインのケースをバスケットに追加しました。表示されたアドレスは前のアドレスとまったく同じでした。

[戻る]ボタンをクリックすると、ショッピングバスケットには、バスケットに2つのアイテムがあることが常に表示されていました。これらのオンラインストアは、ユーザーが[戻る]ボタンを数回押しても買い物かごが常に現在の状態を表示するようにサイトをプログラムしていると思いますか?また、これら2つの状況の違いは何ですか?

4

1 に答える 1

1

バスケットはセッションに保存されている可能性があります。多くの場合、セッションはCookieによってバックアップされます。JSP /サーブレットでは、これはJSESSIONIDCookieです。自分でテストするには、ブラウザのCookieストアでCookieを見つけて、削除します。ページを更新すると、バスケットが空になります。詳細な背景情報については、サーブレットはどのように機能するかをお読みください。インスタンス化、セッション、共有変数、マルチスレッド

JSP /サーブレットの用語では、バスケットは次のように取得/事前作成できます。

Basket basket = (Basket) session.getAttribute("basket");

if (basket == null) {
    basket = new Basket();
    session.setAttribute("basket", basket);
}

// ...

これは、ユーザーが同じセッション内で同じWebページを操作している限り有効です。次のように、任意の製品をバスケットに追加できます。

String productCode = request.getParameter("productCode");
Product product = someProductService.find(productCode);

if (product != null) {
    basket.addProduct(product);
}

// ...

JSPでは、次のように表示できます。

<table>
  <c:forEach items="${basket.products}" var="product">
     <tr>
        <td>${product.code}</td>
        <td>${product.description}</td>
        <td>${product.quantity}</td>
        <td>${product.price}</td>
     </tr>
  </c:forEach>
</table>
于 2011-11-25T17:15:06.927 に答える