본문 바로가기
WORKS/Java + JSP + Spring

[JSP] JSP : session 이용 장바구니 기능 만들기

by Jelly 젤리 2022. 2. 17.

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] 세션을 무효화시킴(세션 초기화)과 동시에 로그인페이지로 이동. 

 


이상 세션을 활용한 장바구니 기능 구현 과제입니다.

 

잘못된 정보가 있거나 오류가 있다면 댓글을 남겨주세요.

728x90

댓글