열심히 끝까지

[코딩 과제] - 8/2 강사님 문제 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)

[코딩 과제] - 8/2 강사님 문제

노유림 2022. 8. 2. 17:37

[session을 이용한 장바구니 예제]
1. index.jsp(표지 페이지)
     로그인 <form>을 제공
     이름(uname)을 입력하면 다음 페이지(main.jsp)로 이동
     method="post"

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<%session.invalidate(); %>
<!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>


2. main.jsp
     uname님, 반갑습니다! :D
     물건을 구매하는 <form>을 제공 / 물건 정보 담아서 보냄
     5가지의 물건 <select> > 우리가 알아서.... 개수 재고 신경 안씀

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

<h1><%=request.getParameter("uname") %>님, 반갑습니다! :D </h1><br>

<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>
<a href ="result.jsp">구매하기</a> 
<!-- 새로운 요청을 했기 때문에 uname이 result에 도달하는 것은 불가능
	 
-->

<%-- 강사님 방법 --%>
<h1><%=session.getAttribute("uname") %>님, 반갑습니다! :D</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>
<a href ="result.jsp">구매하기</a> 


</body>
</html>



     <a> 구매하기</a>
3. 물건을 하나 select해서 전송하게 되면 add.jsp 실행
     구매한 물건을 장바구니에 추가하는 로직]
         장바구니 : 브라우저를 종료하면 사라지는 객체(session)에 저장
     로직을 수행완료하면 다시 main.jsp로 이동    

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>장바구니에 물건을 추가하는 로직(화면 출력 x)</title>
</head>
<body>
 <%-- 내 방법 --%>
<%
	String product=(String)request.getParameter("product");
	ArrayList<String> bproduct = (ArrayList<String>)session.getAttribute("bproduct");
	if(bproduct==null){ // 장바구니가 없을 경우
		bproduct=new ArrayList<String>();
	}
	bproduct.add(product);
	session.setAttribute("bproduct",bproduct);
%>
<%-- 강사님 방법 --%>
<%
	String tproduct=request.getParameter("product");

	ArrayList<String> datas=(ArrayList)session.getAttribute("datas");
	// session 내장 객체에 저장된 장바구니를 불러오는 코드
	if(datas==null){// 장바구니가 생성되지 않은 경우
		datas=new ArrayList<String>();	
		session.setAttribute("datas",datas);
	}
	datas.add(tproduct);
%>

<%-- 스크립트는 같으니 패스 --%>
<script type="text/javascript">
	alert("<%=product%>이(가) 추가되었습니다.");
	history.go(-1);
</script>



</body>
</html>


4. result.jsp
     지금까지 장바구니에 담긴 모든 물건을 화면에 출력
     +) 단, 능력이 된다면 유효성 검사를 수행해주세요!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구매하기(결제페이지)</title>
</head>
<body>

<h1>구매한 상품 목록</h1>
<h2><%=session.getAttribute("uname") %>님이 선택한 상품 목록</h2>
<hr>
<%
	ArrayList<String> bproduct=(ArrayList)(session.getAttribute("bproduct"));
	if(bproduct==null){
		out.println("선택한 상품이 없습니다.");
	}
	else{
		for(String product:bproduct){
			out.println(product+"<BR>");
		}
	}
%>
<br>
<a href="main.jsp">메인으로</a>

<%-- 강사님 방법 --%>
<h1><%=session.getAttribute("uname") %>님이 구매한 상품 목록</h1>
<hr>
<ol>
<%
	ArrayList<String> datas=(ArrayList)session.getAttribute("datas");
	if(datas==null){
		out.println("<h2>구매한 상품이 없습니다!</h2>");
	}
	for(String v : datas){
		out.println("<li>"+v+"</li>"); // li는 숫자 오더리스트 
	}
%>
</ol>

</body>
</html>

 

 

 

[application을 이용한 SNS 예제]
1. index2.jsp
         로그인 form
         로그인한 사람의 이름(id)을 전달

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% request.setCharacterEncoding("UTF-8"); %>
    <%session.invalidate(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>

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

</body>
</html>


2. main2.jsp
         [로그인한 사림 이름]님 : [     (msg)  ] [글쓰기]
        --------------------------------------------------
         banana        하이 :D
         banana        (*^▽^*)
         aaa             ㅎㅇ
         >> application scope에 저장
[글쓰기]버튼  클릭시

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.ArrayList"%>
    <% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SNS 창</title>
</head>
<body>

<% 
	String id = request.getParameter("id"); 
	if(id!=null){ // index2.jsp를 통해서 페이지를 출력할때에만
		session.setAttribute("id", id);
		// session으로 해야한다/ 보안상의 문제로...
	}
%>

<form action="add2.jsp" method="post">
	[<%=request.getParameter("id") %>]님 : <input type="text" name="msg"> <input type="submit" value="글쓰기"><br>
	---------------------------------------------------<br>
	<%
		ArrayList<String> ids = (ArrayList<String>)application.getAttribute("ids");
		ArrayList<String> msgs = (ArrayList<String>)application.getAttribute("msgs");
		if(ids==null && msgs==null){
			out.println("<h3>유저와 메세지가 없습니다.</h3>");
		}
		else{
			for(int i=0;i<ids.size(); i++){
				out.println(ids+"\t"+msgs+"<BR>");	
			}
			
		}
	%>
	<!-- 강사님 방법 -->
	[<%=session.getAttribute("id")%>]님 : <input type="text" name="msg"><input type="submit" value="글쓰기">

</form>
<hr>
<ol>
<%
	ArrayList<String> datas=(ArrayList)application.getAttribute("datas");
	if(datas==null){
		out.println("아직 내용이 없습니다.");
	}
	else{
		for(String v : datas){
			out.println("<LI>"+v+"</LI>");
		}
	}
%>
</ol>

</body>
</html>

 

3. add2.jsp
         누가 어떤 msg를 작성했는지 AL<String>에 저장

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.ArrayList"%>
    <% request.setCharacterEncoding("UTF-8"); %>


<% 
	String id = (String)request.getParameter("id");
	String msg = (String)request.getParameter("msg");

	ArrayList<String> ids = (ArrayList)application.getAttribute("ids");
	ArrayList<String> msgs = (ArrayList)application.getAttribute("msgs");
	if(ids==null && msgs==null){
		ids = new ArrayList<String>();
		msgs = new ArrayList<String>();
	}
	ids.add(id);
	msgs.add(msg);
	application.setAttribute("ids", ids);
	application.setAttribute("msgs", msgs);
	// history.go(-1)을 사용해보았지만.. 
%>
<!--  강사님 방법 -->
<%
	String tmsg=request.getParameter("msg");
	tmsg=session.getAttribute("id")+"      "+tmsg;

	ArrayList<String> datas=(ArrayList)application.getAttribute("datas");
	
	if(datas==null){
		datas=new ArrayList<String>();
		application.setAttribute("datas", datas);
	}
	datas.add(tmsg);
	
	response.sendRedirect("main2.jsp");
%>