2011-11-25 3 views
1

일부 웹 사이트 작동 방식에 대한 이론적 질문을하고 싶습니다. 예를 들어, 내가 온라인 상점에있는 A 시장에 있다고 가정 해 보겠습니다. 나는 쇼핑을 계속하고 트롤리의 다른 와인을 배치하고 다시 페이지가이 URL다른 URL이 작동하는 방식

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

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

: 나는 쇼핑 카트 와인의 경우 배치, 페이지는이 URL로 나타났다

그런 다음 브라우저에서 뒤로 단추를 세 번 클릭하면 트롤리 페이지가 다시 나타납니다. 이 시간에는 첫 번째 항목 만 포함되고 두 번째 항목은 포함되지 않습니다.

나는 와인의 경우를 선택 : 다른 웹 사이트에서

나는 다음과 같은했다. 결과적으로 와인을 포함하는 양식이이 ASP 페이지 basket.asp?Item=3605681에 게시되었습니다. 여기에서 Item은 특정 경우의 와인의 ID입니다. 그러나 브라우저에 표시된 페이지의 URL은 다음과 같습니다.

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

다른 와인의 사례를 바구니에 추가했습니다. 나타난 주소는 이전 주소와 정확히 동일합니다.

뒤로 단추를 클릭했을 때 쇼핑 바구니는 항상 바구니에 두 개의 항목이 있음을 나타 냈습니다. 사용자가 뒤로 버튼을 여러 번 눌러도 장바구니가 항상 현재 상태를 표시하도록 이러한 온라인 상점에서 사이트를 프로그래밍했다고 어떻게 생각합니까? 또한이 두 가지 상황의 차이점은 무엇입니까?

답변

1

바구니가 세션에 저장되어있을 가능성이 큽니다. 세션은 종종 쿠키에 의해 뒷받침됩니다. JSP/서블릿에서는 JSESSIONID 쿠키입니다. 직접 테스트하려면 브라우저의 쿠키 저장소에서 쿠키를 찾아 삭제하십시오. 페이지가 새로 고침되면 빈 바구니가 표시됩니다. 자세한 배경 정보는 How do servlets work? Instantiation, sessions, shared variables and multithreading을 참조하십시오. 다음과 같이 JSP/서블릿 측면에서

는 바구니는 미리 제작/검색 할 수 있습니다 :

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> 
관련 문제