как работают разные URL - PullRequest
       8

как работают разные URL

1 голос
/ 25 ноября 2011

Я хотел бы задать теоретический вопрос о том, как работают некоторые веб-сайты.В качестве примера. Допустим, я нахожусь в интернет-магазине.Я поместил ящик с вином в тележку для покупок. Появилась страница с этим URL:

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

Я продолжил делать покупки, а затем поместил другое вино в тележку, и снова появилась страница с этим URL

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

Затем я три раза нажал кнопку «Назад» в браузере, и снова появилась страница с тележкой.На этот раз содержался ТОЛЬКО первый элемент, а НЕ второй.

На другом сайте я показал следующее:

Я выбрал ящик с вином.В результате форма, содержащая вино, была размещена на этой странице ASP basket.asp?Item=3605681, где Item является идентификатором конкретного случая вина.Однако страница, отображаемая в браузере, имела другой URL:

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

Затем я добавил еще один ящик с другим вином в корзину.Появившийся адрес был точно таким же, как и предыдущий.

Когда я нажимал кнопку «Назад», «Корзина покупок» всегда показывала, что в корзине есть два товара.Как вы думаете, что эти интернет-магазины запрограммировали сайт так, чтобы корзина покупок всегда показывала его текущее состояние, даже если пользователь нажимает кнопку «Назад» несколько раз?Кроме того, в чем разница между этими двумя ситуациями?

1 Ответ

1 голос
/ 25 ноября 2011

Корзина, вероятно, сохранена в сеансе.Чаще всего сеанс в свою очередь поддерживается файлами cookie.В JSP / Servlet это файл cookie JSESSIONID.Чтобы проверить это самостоятельно, найдите файл cookie в хранилище файлов cookie браузера и удалите его.Вы увидите, что обновление страницы приведет к пустой корзине.Для более подробной информации, пожалуйста, прочитайте Как работают сервлеты?Создание экземпляров, сеансы, общие переменные и многопоточность .

В терминах JSP / Servlet, корзина может быть извлечена / восстановлена ​​следующим образом:

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

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

// ...

Это будет продолжаться до тех пор, покапользователь взаимодействует с одной и той же веб-страницей в одном сеансе.Любые продукты могут быть добавлены в корзину следующим образом:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...