JSP의 내장객체 session을 활용하여 장바구니 기능을 만들어보았다.
페이지들의 이름은 명시해두었고, 이하 08_.jsp ~ 12_.jsp로 언급하겠다.
첫 페이지 : 08_Login.jsp
1. [18] 첫 페이지에서는 이름만 입력하고 로그인하도록 하였다. 입력한 이름을 form태그를 이용해서 값을 전달하도록 설정하였다.
두 번째 페이지: 09_setProduct.jsp
1. [16-17] 두 번째 페이지에서 이름값을 request를 이용해 가져온 뒤 그것을 다시 session에 저장해준다.
2. [19] 구매를 원하는 품목을 선택했을 때 담을 리스트를 ArrayList 타입의 list라는 이름으로 부를건데, itemList라는 이름으로 세션에 설정해 둔 값을 가져올 것이다.
그런데 itemList라는 이름으로 세션에 저장해 둔 값은 없는데? -> null 인데?
[20-22] 따라서. 존재하지 않는다면, ArrayList를 이때 생성해준다. (그러니 항상 존재하게 유지하는 것)
[23] 세션값에 list를 itemList라고 부르면서 담아준다.
=> 세션에 방금 생성된 객체 자체를 저장해주는 것.
2번의 순서는 꼭 이 순서대로 진행하여야 한다.
3. [25-31] 아이디를 공백(스페이스바)으로 두었거나 입력하지 않았을 때 로그인 페이지로 돌아가도록 지정
(이 경우 그냥 09_.jsp 를 직접 URL에 입력하여 들어오는 경우를 방지함)
4. [32 이후] 3번의 두 경우가 아니면 로그인페이지와 목록을 보여줌.
5. [41] 상품목록 중에서 상품을 선택하고 구매를 누르면 다음 페이지에 연결되도록 설정
6. [52-58] 로그아웃버튼 설정 -> 12_.jsp로 연결
7. [60] 계산하기 링크로 설정 -> 11_.jsp로 연결
세 번째 페이지: 10_add.jsp
1. [13] 09_.jsp에서 보았던 상품들의 이름값들을 request를 이용하여 받아온다.
2. [15-19] 여기서도 마찬가지로 같은 순서를 밟아 새로운 리스트를 만들어 준다. 이때 만드는 어레이리스트는 이전페이지에서 세션값에 저장해 리스트를 가져와서 만든, 앞에서 내가 선택한 품목들을 담을 리스트이다.
3. [21] 여기서 내가 선택한 품목을 담아주는 작업을 한다.
4. [22] 직전페이지에서 만든 ArrayList를 그 품목들이 담긴 ArrayList로 덮어씌우는 작업
5. [24-26] 여기서도 09_.jsp와 마찬가지로 가져올 이름값이 없는 경우, 즉 10_.jsp 파일 이름을 url에 그대로 치고 들어오는 경우를 방지하기 위해 작업을 해주었다.
6. [28-31] js의 alert 창을 이용하여 장바구니에 품목이 추가될 때 마다 알림창이 뜨고, 창을 닫으면 그대로 다시 선택페이지(09_.jsp)로 이동해준다.
7. 작업량을 줄이기 위해서는 예외처리가 상단에 위치할 수록 좋다. 처리되는 시간 및 메모리의 절약!
이 코드를 추가해주었다. 품목선택을 전혀 거치지 않고 이 페이지로 접속한 경우 예외처리하는 법이다.
if(request.getParameter("items") == null){
out.print("<script>window.alert(\"로그인을 하세요.\");</script>");
response.sendRedirect("08_Login.jsp");
}
네 번째 페이지: 11_checkOut.jsp
1. [16] 10_.jsp 에서 만들어두었던 내가 담은 상품들이 들어있는 리스트 즉 finalList라는 이름으로 만들었던 것을 다시 여기서도 똑같은 이름으로 불러준다. 여기서 다른 이름으로 불러도 무방하다. 다만 가져오는 값은 session.getAttribute("itemList")로 같다.
2. [18-22] 이름이 null 값이거나, 담아온 상품이 null값이거나 (url에 직접 파일이름 넣어서 들어오는 경우) 로그인페이지로 돌아가도록 설정
3. [25-26] 로그인은 했지만 상품을 담아오지 않고 결제하기를 누른 경우 이전페이지로 되돌아가도록 설정
4. [27-32] 정상적으로 로그인을 해서 상품까지 잘 담아온 경우 담아온 상품 목록을 전부 출력하도록 설정
5. [34-38] 로그아웃 버튼 -> 12_.jsp 로 이동
6. [39-41] 뒤로가기 링크 -> 11_.jsp 로 이동
다섯 번째 페이지: 12_logOut.jsp
1. [8-10] 로그아웃 페이지임을 js alert창을 이용하여 띄워줌 ---> 작동이 안먹는다... 왜지? (수정 요함)
<body>
<%out.print("<script>alert(\"로그아웃 되었습니다.\");</script>"); %>
<%session.invalidate();%>
<%response.sendRedirect("08_Login.jsp"); %>
</body>
이렇게 수정하니 작동을 하였다.
세션은 서버 차원에서 동작한다.
그러나 script태그는 클라이언트차원에서 동작하기 때문에 alert가 그냥 잡아먹히는 경우가 있다.
참고하자!
2. [13-15] 세션을 무효화시킴(세션 초기화)과 동시에 로그인페이지로 이동.
이상 세션을 활용한 장바구니 기능 구현 과제입니다.
잘못된 정보가 있거나 오류가 있다면 댓글을 남겨주세요.
댓글