본문 바로가기

카테고리 없음

HTML - JSP - forward / request / session 이해예제 ( 장바구니 )

idnex.jsp 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표지 페이지</title>
</head>
<body>

<form action="main.jsp" method="post">
	<input type="text" name="uname">
	<input type="submit" value="로그인">
</form>

</body>
</html>

입력값을 전달하기 위해 post 방식 사용

name=을 이용하여 다음 페이지에서 기억할 수 있도록 이름 설정

 

 

 

main.jsp 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	String uname=request.getParameter("uname");
	session.setAttribute("uname", uname);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지</title>
</head>
<body>

<h1><%=session.getAttribute("uname")%>님, 반갑습니다!</h1>
<form action="add.jsp" method="post">
	<select name="product">
		<option>햄버거</option>
		<option>샌드위치</option>
		<option>치킨</option>
		<option>라면</option>
		<option>콜라</option>
	</select>
	<input type="submit" value="장바구니에 추가하기">
</form>
<hr>
<a href="result.jsp">구매하기</a>

</body>
</html>

 

request 받은 것들을 UTF-8형식으로 인코딩 

requset로 받은 것들을 session.setAttribute를 이용해 session에 속성으로 할당

결과창에 값을 보내주어야 하기 때문에 또 POST타입으로 설정 

 

 

 

result.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>결제 페이지</title>
</head>
<body>

<h1><%=session.getAttribute("uname")%>님이 구매한 상품 목록</h1>
<hr>
<ol>
<%
	ArrayList<String> datas=(ArrayList)session.getAttribute("datas");
	if(datas==null){
		out.println("<h2>구매한 상품이 없습니다!</h2>");
	}
	else{
		for(String v:datas){
			out.println("<li>"+v+"</li>");
		}
	}
%>
</ol>

</body>
</html>

장바구니 목록이기 때문에 AL로 데이터들을 가져올 것이기 때문에 상단에 import해준다.

session 단위로 했기 때문에 request.이 아닌 session.으로 값들을 받아오면 된다.

 

 

 

 

 

 

정리

index -> main 에서는 같은 스코프이기 때문에 메인에선 get.Parameter를 할 수 있지만, 
result에서는 getParameter("uname")을 사용할 수 없다
--> session으로 해결

AL는 장바구니고, 장바구니는 세션 단위로 동작해야하기 때문에
ArrayList<String> datas = session.getAttribute("datas")  (( 세션내장객체에 저장되어있는 장바구니 "datas"를 부르는 코드))
빨간줄 뜨면 상단에 import가 잘 되었는지 확인,
getAttribute는 return이 object이므로 형변환을 해줘야함
ArrayList<String> datas = (ArrayList)session.getAttribute("datas")

session.getAttribute("없는 변수명")
존재하지 않는 변수명을 호출하는 행위는 에러가 아님!!

if( datas==null ){ // 장바구니가 생성되지 않은 경우
datas=new ArrayList<String>();
session.setAttribute("datas", datas);
}
datas.add(datas);