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);