코딩항해기
[실습/JSP] 장바구니 프로그램 만들기 (+풀이 0807) 본문
[실습2]
d.jsp페이지에서 이름을 입력하여 e.jsp페이지로 이동합니다.
e.jsp 페이지에는 상품들(5개 아무거나)이 select 박스에 제공되어있습니다.
[장바구니에 추가] 버튼을 눌러서 해당 상품을 추가합니다.
[계산하기] 버튼을 누르면 지금까지 장바구니에 담았던 상품들을 모두 출력합니다.
f.jsp 페이지에서 장바구니에 select에서 선택한 상품을 추가해주세요.
g.jsp 페이지에서 장바구니에 저장했던 상품들을 출력해주세요.
d.jsp
가장 처음이 되는 페이지로 사용자명을 입력받는다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>d</title>
</head>
<body>
<h1>🥭🍎과일가게🍐🍑</h1>
<form action="e.jsp" method="POST">
<input type="text" name="name" placeholder="사용자 명을 입력하세요." required>
<input type="submit" value="입장">
</form>
<h1>🍑🍊🥥🧉🥭🍌🍋</h1>
</body>
</html>
e.jsp
물건(과일)을 담고 계산요청을 넣는 곳이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>e</title>
</head>
<body>
<%
String user;//세션 유저명
String name = request.getParameter("name"); //넘어온 이름 입력값
ArrayList<String> cart = (ArrayList<String>)session.getAttribute("cart"); //장바구니
if(name != null){//넘어오는 값이 있다면
session.setAttribute("user", name);//세션 user명 갱신
session.setAttribute("cart", null);//장바구니 비우기
}
user = ""+session.getAttribute("user"); //세션 값 받아오기
ArrayList<String> products = new ArrayList<>();
products.add("🍌바나나🍌");
products.add("🍎사과🍎");
products.add("🥭망고🥭");
products.add("🥑아보카도🥑");
products.add("🥥코코넛🥥");
%>
<h3><%= user %>님 환영합니다.</h3>
<hr>
<form action="f.jsp">
<%--상품 리스트 --%>
<%
for(String product : products){
out.println("<input type='checkbox' name='product' value='"+product+"'> "+product+" <br>");
}
%>
<hr>
<input type="submit" value="장바구니에 담기">
<%
if(!(cart == null || cart.isEmpty())){
out.println("<div style='color:blue;'>장바구니에 물건이 "+cart.size()+"개 담겨있습니다.</div>");
}
%>
</form>
<hr>
<form action="g.jsp">
<input type="submit" value="계산하기">
</form>
</body>
</html>
f.jsp
장바구니가 없다면 장바구니를 만들어서 상품을 담고, 다시 e.jsp페이지로 보낸다.
보여주는 페이지가 없으므로 html태그가 없다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<%
String[] datas = request.getParameterValues("product");
ArrayList<String> cart = (ArrayList<String>)session.getAttribute("cart");
if(cart == null){//장바구니가 아직 만들어진 적이 없다면, 지워진 상태라면
cart = new ArrayList<String>();
session.setAttribute("cart", cart);
}
if(datas != null){//받아온 입력값이 있다면
for(String data : datas){
cart.add(data);
}
}
response.sendRedirect("e.jsp");//이동
%>
g.jsp
여태 담은 물품을 보여준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>g</title>
</head>
<body>
<%
String user = ""+session.getAttribute("user"); //세션 유저값
ArrayList<String> cart = (ArrayList<String>)session.getAttribute("cart"); //장바구니
%>
<h1><%=user %>님의 영수증</h1>
<ul>
<%
if(!(cart == null || cart.isEmpty())){//장바구니가 없거나, 비었거나하면 실행되지 않음
for(String item : cart){
out.println("<li>"+item+"</li>");
}
}
else {
out.println("장바구니가 비어있습니다.");
}
%>
</ul>
<hr>
<a href="d.jsp">돌아가기</a>
</body>
</html>
[결과]
[풀이 후 보완할 점]
장바구니를 새 로그인할 때(유저명을 입력받을때)하고 있었는데,
계산하기를 할 때 세션 값을 받아온 뒤 세션을 비워야 했다. (계산하면서 비워져야하는게 맞다.)
세션을 비우는 명령어는 두 가지로, session.invalidate()와 session.removeAttribute(str)이 있는데, invalidate()는 모든 세션이 비워지고, removeAttribute(str)은 str에 들어가는 세션명을 가진 세션만 비워지는 차이점이 있다.
페이지 이동은 sendRedirect(str) 외에도 history.go(-1)로도 갈 수 있다.
history를 활용해서 페이지를 옮기니 alert창을 띄울 수 있어 물건이 담긴다는 것을 더욱 확실하게 인지 시켜줄 수 있는 효과가 있어 풀이처럼 했으면 더 좋았을 것 같다.
'problem solving > 과제&실습 코딩' 카테고리의 다른 글
[과제/JSP] 간단한 쇼핑몰 프로그램 구현하기 (Controller 분할버전) (0) | 2024.08.11 |
---|---|
[실습/JSP] JSP 로그인 회원가입 연습하기 (1) | 2024.08.08 |
[실습/JSP] 댓글 프로그램 만들기 (+풀이 0807) (0) | 2024.08.07 |
[과제/JSP] JSP 기초 연습을 위한 회원가입 구현하기 (0) | 2024.08.06 |
[실습/JAVA] 쇼핑몰 프로그램에 웹크롤링 묻히기 (+풀이 0726) (0) | 2024.07.25 |