1. selProduct.jsp
1) selProdject.jsp의 구성은 다음과 같다.
- request가 POST인 경우에만 request를 setCharacterEncoding()하는 부분
- form이며 (POST), command.equals("login")인 경우 session에 id 속성 값을 setAttribute()하는 부분
- form이며 (POST), command.equlas("add")인 경우 session에 저장된 productlist 속성 값을 getAttribute()하는 부분
- a tag (GET), command.equlas("logout")인 경우 session에 저장된 username과 productlist 속성을 삭제하는 부분
- a tag (GET), command.equlas("clear")인 경우 session에 저장된 productlist 속성을 삭제하는 부분
- a tag (GET), command.equlas("checkOut")인 경우 list = session.getAttribute("productlist")하고,
마지막에 request.getMethod().equals("GET")이고 command가 checkOut인 경우 list를 출력하는 부분
<%@ page contentType="text/html; charset=UTF-8" import="java.util.*" %>
<%
// 상품 정보와 list 초기화
String productname = null;
ArrayList<String> list = null;
// GET 방식은 톰캣 서버가 UTF-8로 Encoding하므로, POST인 경우에만 Encoding
if(request.getMethod().equals("POST")) {
request.setCharacterEncoding("UTF-8");
}
String command = request.getParameter("command");
// form1 POST 방식, command의 값이 login인 경우
if(request.getMethod().equals("POST") && command != null && command.equals("login")) {
// session의 유저 이름 속성을 username input 태그의 값으로 설정
session.setAttribute("username", request.getParameter("username"));
}
// GET 방식인 a tag의 command 값이 logout인 경우
else if(request.getMethod().equals("GET") && command != null && command.equals("logout")) {
// session의 유저 이름 속성과 상품 정보 속성이 삭제됨
session.removeAttribute("username");
session.removeAttribute("productlist");
}
// GET 방식인 a tag의 command 값이 clear인 경우
else if(request.getMethod().equals("GET") && command != null && command.equals("clear")) {
// session의 상품정보 속성을 삭제함
session.removeAttribute("productlist");
}
// form2 POST 방식, command 값이 add인 경우
else if(request.getMethod().equals("POST") && command != null && command.equals("add")) {
// session의 상품 정보 속성 값을 get하여,
productname = request.getParameter("product");
list = (ArrayList<String>)session.getAttribute("productlist");
// null인 경우 ArrayList<String>을 새로 만들어서 그 list를 setAttribute하고,
if(list == null) {
list = new ArrayList<String>();
session.setAttribute("productlist", list);
}
// 상품 정보 이름을 ArrayList에 add
list.add(productname);
}
// GET 방식의 checkout command가 실행된 경우
else if(request.getMethod().equals("GET") && command != null && command.equals("checkOut")) {
// session의 상품 정보들을 list 변수에 넣음
list = (ArrayList<String>)session.getAttribute("productlist");
}
%>
<!DOCTYPE html>
<HTML>
<head>
<title>ch06 : selProduct.jsp</title>
<!-- form2의 상품정보 추가가 된 경우에만 alert -->
<%
if(request.getMethod().equals("POST") && command != null && command.equals("add")) {
String script = "<script>alert('" + productname + "이(가)추가 되었습니다.!!');</script>";
out.println(script);
}
%>
</head>
<body>
<H2>상품선택</H2>
<HR />
<!-- session의 username 속성 값이 null인 경우에만 로그인 관련 코드를 보여줌 -->
<%
if(session.getAttribute("username") == null) {
%>
<H3>로그인</H3>
<!-- form1, form을 구별하기 위해 command=login을 한 것에 주목 -->
<form name="form1" method="POST" action="selProduct.jsp?command=login">
<input type="text" name="username"/>
<input type="submit" value="로그인"/>
</form>
<%
}
else {
out.println(session.getAttribute("username") + "님 환영합니다!!!!");
// logout하는 a tag. URL에 command=logout을 추가한 것에 주목
out.println("<a href='selProduct.jsp?command=logout'>logout</a>");
}
%>
<HR />
<!-- form2, form을 구별하기 위해 command=add를 추가한 것에 주목. -->
<form name="form2" method="POST" action="selProduct.jsp?command=add">
<!-- request.getAttribute("product")가 아래 선택된 option 값임에 주목 -->
<SELECT name="product">
<option>사과</option>
<option>귤</option>
<option>파인애플</option>
<option>자몽</option>
<option>레몬</option>
</SELECT>
<input type="submit" value="추가"/>
</form>
<!-- checkOut시 list를 session.getAttribute("productList")로 가져오고 -->
<a href="selProduct.jsp?command=checkOut">계산</a>
<a href="selProduct.jsp?command=clear">장바구니 비우기</a>
<hr />
<%
if(request.getMethod().equals("GET") && command != null && command.equals("checkOut")) {
// produectList 출력
if(list == null) {
out.println("선택한 상품이 없습니다.!!!");
}
else {
for(String pname : list) {
out.println(pname + "<BR>");
}
}
}
%>
</body>
</html>