ProductDAO
package model;
import java.util.ArrayList;
public class ProductDAO {
private ArrayList<ProductVO> datas;
public ArrayList<ProductVO> getDatas() {
return datas;
}
public void setDatas(ArrayList<ProductVO> datas) {
this.datas = datas;
}
public ProductDAO() {
datas=new ArrayList<ProductVO>();
datas.add(new ProductVO(101,"세제",23000));
datas.add(new ProductVO(102,"헛개수",1500));
datas.add(new ProductVO(103,"우유",1100));
datas.add(new ProductVO(104,"박카스",900));
datas.add(new ProductVO(105,"닭가슴살",11700));
}
public ArrayList<ProductVO> selectAll(ProductVO pVO){
return datas;
}
public ProductVO selectOne(ProductVO pVO) {
for(ProductVO v:datas) {
if(pVO.getNum()==v.getNum()) {
return v;
}
}
return null;
}
}
ProductVO
package model;
public class ProductVO {
private int num;
private String name;
private int price;
public ProductVO() {
this(0,null,0);
}
public ProductVO(int num,String name,int price) {
this.num=num;
this.name=name;
this.price=price;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return name+" : "+price+"원";
}
}
A 로그인,로그아웃,상품선택
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList,model.ProductVO" %>
<jsp:useBean id="pDAO" class="model.ProductDAO" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%--
로그인 로그아웃과 상품선택이 한 페이지에 있을 예정
보통 사이트가 이렇게 되어 있기 때문
--%>
<body> <!-- id="header" 시맨틱테그: 문서의 구조와 의미를 더 명확하게 전달 -->
<div id="header" > <!-- 영역1: 로그인&로그아웃 란 -->
<%
if( session.getAttribute("name") == null ){
%>
<form action="d.jsp" method="post"> <!-- 이곳에 아이디 쓰고 로그인 버튼 누르면 진행 할 수 있게 -->
<%--form 태그에 메서드를 작성 하지 않았기 때문에 get 방식
메서드 post는 post--%>
아이디 <input type="text" name="mid">
비밀번호 <input type="password" name="mpw"> <br>
<input type="submit" value="로그인">
</form>
<%
}
else{
%>
<!-- ㅁㅁㅁ님: ㅁㅁㅁ이 session.getAttribute("mid")임 -->
<%=session.getAttribute("name")%>님, 안녕하세요! :D | <a href="e.jsp">로그아웃</a>
<%
}
%>
</div>
<hr>
<!-- 시맨틱태그 content -->
<div id="content"> <!-- 영역2: 상품목록을 출력하고 선택 하는 공간 -->
<!-- 상품목록에서 상품을 하나 고를 예정이니까 -->
<form action="b.jsp"> <!-- 추가하는건 b.jsp에서 진행 -->
상품선택 <select name="num"> <!-- 넘겨져서 오는 값은 product인데 pk니까 num으로 세팅 -->
<%
ArrayList<ProductVO> datas=pDAO.selectAll(null);
for(ProductVO v:datas){
out.println("<option value='"+v.getNum()+"'>"+v+"</option>");
}
%>
</select>
<input type="submit" value="장바구니에 추가하기"><!-- 상품선택 -->
</form>
</div>
<hr>
<!-- 영역3: 결제 하는 란-->
<a href="c.jsp">결제하기</a> <!-- 마지막 a태그를 누르면 결제화면으로 이동 할 예정 -->
</body>
</html>
B 장바구니에 추가/저장
<!-- 장바구니에 추가하는 로직 -->
<!-- 추가가 완료되면 '추가하였습니다'멘트 뜨고 다시 돌아갈거에용 -->
<!-- 여기도 역시 서비스 되는 화면이 없음 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="model.ProductVO,java.util.ArrayList" %>
<jsp:useBean id="pDAO" class="model.ProductDAO" />
<!-- ProductDAO pDAO = new ProductDAO() 객체화 인스턴스화 -->
<jsp:useBean id="pVO" class="model.ProductVO" />
<!-- ProductVO pVO = new ProductVO() -->
<jsp:setProperty property="*" name="pVO" /> <!--
<!-- 자동으로 세팅 -->
<%--사용자가 넘겨주는 태그의 이름을 확인해야 한다 ==>> 그 이름과 같은 VO의 멤버변수가 세팅되기 때문에
==> 근대 뭐로 세팅이 되는가?
==> 이번에는 option 태그에서 값을 넘겨받는데
==> 스크립트는 객체를 넘길수 없습니다. (무조건 string)을 넘겨줌
<%
ArrayList<ProductVO> datas=pDAO.selectAll(null);
for(ProductVO v:datas){
out.println("<option value='"+v.getNum()+"'>"+v+"</option>");
}
%>
==> 그래서 다른값을 넘겨줄건데 : v는 객체기 때문에 따로 num을 빼줄 필요가 있다
==> value에다가 num을 넣어서 보낸다.
VO에 name에 적혀있는것과 같은것이 있어야 한다
--%>
<%-- pVO의 모든 setter를 호출하겠다.
setter에 넣을 값을 request.getParameter()에서 자동으로 매핑해주겠다! 형변환까지 서비스~ --%>
<%
ProductVO data = pDAO.selectOne( pVO );
ArrayList<ProductVO> cart=(ArrayList<ProductVO>)session.getAttribute("cart");
if(cart == null){
cart=new ArrayList<ProductVO>();
session.setAttribute("cart",cart);
}
cart.add(data);
%>
<script>
alert('<%=data.getName()%>이(가) 장바구니에 추가되었습니다! :D');
location.href='a.jsp';
</script>
C 결제페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="model.ProductVO,java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결제 페이지</title>
</head>
<body>
<%
int total=0;
%>
<h1><%=session.getAttribute("name")%>님이 구매한 상품들입니다.</h1>
<hr>
<ol>
<%
ArrayList<ProductVO> cart=(ArrayList<ProductVO>)session.getAttribute("cart");
for(ProductVO v:cart){
out.println("<li>"+v+"</li>");
total+=v.getPrice();
}
%>
</ol>
<hr><!-- 총 가격이 나올 뷰; 시맨틱 태그 생각 하면 좋음 -->
<h2> 총 금액은 <%=total%>원입니다.</h2>
<hr>
<a href="a.jsp">메인으로 돌아가기</a>
</body>
</html>
D 로그인
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- D페이지 : 로그인 -->
<%-- 로그인 하고 다시 메인 화면으로 올 예정이기 때문에 서비스될 화면이 없음
내가 보여줘야 되는 화면이 없음
--%>
<%
String mid=request.getParameter("mid");
session.setAttribute("mid", mid);
response.sendRedirect("a.jsp");
%>
E 로그아웃
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.removeAttribute("mid");
session.removeAttribute("cart");
response.sendRedirect("a.jsp");
%>
[a.jsp]
div id =header
1.로그인과 관련된 기능
2.( session.getAttribute("mid") == null )
→ 로그인이 안되어있다면
<form action="d.jsp">
1.d.jsp로 값을 넘겨주는 폼
2.아이디를 입력받는다.
3.로그인 기능이다.
로그인이 되어있다면
000님 안녕하세요 | 로그아웃(하이퍼링크) → e.jsp
id VS class
아이디는 유일한 값
클래스는 여러개 겹치는거
<hr>
<div id="content">
<form action="b.jsp"> → b로 넘어가는 폼
selectAll :여러개 read → 배열 리스트에 담아서
for each를 사용해서 출력
<option>
넘어가는것은 실제 value값인데 PK를 담아서 넘김
==================================================
d.jsp
스크립트는 string 값으로 값을 넘겨준다
request.getParameter → 사용자가 넘겨준 아이디를 가져온다.
========================================
장바구니 추가 누르면 → 현재 선택된 option값을 b.jsp
<jsp:useBean id="pDAO" class="test.ProductDAO" />
<jsp:useBean id="pVO" class="test.ProductVO" />
==================================
<jsp:setProperty property="*" name="pVO" />
자동으로 setter를 사용한다.
사용자로부터 넘어온 값을 세팅해주는 역할
사용자가 넘기는 폼의 name을 보고 세팅을 해준다
VO에 name에 적혀있는 것과 같은 것이 있으면
알아서 세팅해준다.
value에 들어있는 값을 넘겨줌 (이놈이 진짜)
사용자가 넘겨주는 태그의 이름을 확인해야한다.
→그 이름과 같은 VO의 멤버변수가 세팅되기 때문에
→근데 뭐로 세팅이되는가?
→이번에는 option 태그에서 값을 넘겨받는데
→스크립트는 객체를 넘길수 없습니다.(스트링)
→v는 객체이기 때문에 따로 num을 빼줄 필요가있다
→value에다가 num을 넣어서 보낸다.
===========================
e.jsp
세션에 저장되어있는 아이디 값을 가져온다