The Debugging Chronicles : "코드의 미학"

예제와 함께 알아 보는 파라미터를 옮길 수 있는 내장객체들 본문

서버프로그래밍 JSP

예제와 함께 알아 보는 파라미터를 옮길 수 있는 내장객체들

sweetseonah1004 2024. 8. 7. 17:40

Request vs Session vs Application

 

3개의 내장객체들은 scope(유효기간)에 차이점이 있다!

 

1. Request 

Request의 scope == 1 요청 (동안 살아 있을 수 있다)

=> 새로운 요청을 수행하면 기존의 정보들이 사라짐

 

.getParameter();
ex)리다이렉트는 새로운 요청
   .sendRedirect(); 하니까 기존의 apple 값이 사라져버렸다
    요청을 할때 마다 (버튼을 누를때마다) 데이터가 사라져버리면 안됨!!

 2. Session

Session 의 scope == 1브라우져

=> 기존의 창을 닫으면 기존의 정보들이 사라짐

 

+시간이 정해져있음 - > 기존의 창이 유지되더라도, 일정 시간이 지나면 기존의 정보들이 사라짐

 

.getAttribute();
.setAttribute();

ex) 네이버의 로그인 정보
ex) 금융권 어플의 로그인 연장 버튼 30분

 


예제 

a.jsp 에서는 방문자의 이름을 등록합니다.
a 페이지에서 설정한 이름으로 b.jsp 에서 댓글을 쓸수있습니다.
c.jsp 에서 댓글을 등록하는 로직을 구현해주세요.
사용자가 a<->b 페이지를 이동해도 댓글을 써왔던 목록들은 유지됩니다.

 

a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="b.jsp" method="POST">
		방문자 이름<input type="text" name="visitor">
		<input type="submit" value="방문자 등록"/>
	</form>
</body>
</html>

 

b.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>
<%
	// "name"의 데이터를 가져오기
	String name=request.getParameter("name");
	// name에 데이터가 있을때 즉 세션에 이름이 존재하면
    if(name != null){
    	// member변수에 name데이터를 넣어 줘라
		session.setAttribute("member", name);
	}
    //member변수에 세션에서 member의 데이터를 가져와서 넣어라
	String member=(String)session.getAttribute("member");
    
	ArrayList<String> datas=(ArrayList<String>)session.getAttribute("datas");
%>

<a href="a.jsp">처음으로 돌아가기</a>
<hr>
	<form action="c.jsp" method="POST">
		<%=member%>님의 댓글 : <input type="text" name="msg" required> <input type="submit" value="댓글작성">
	</form>
<hr>
<%
	if(datas != null){
%>
		<ul>
			<% for(String data:datas){ %>
				<li><%= data %></li>
			<% } %>
		</ul>
<%
	}
	else{
		out.println("아직 작성된 댓글이 없습니다...");
	}
%>

</body>
</html>

 

c.jsp

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
/* 		
	String member = 세션에 저장된 meber값;
	String msg = request.getParameter("msg");
	String msg = 현재 로그인한 사용자 이름+ b.jsp에서 건네준 msg
	세션에 저장된 datas.add(msg); 
*/
	
	String member= (String)session.getAttribute("member"); //현재 로그인한 사용자 이름
	String msg= request.getParameter("msg"); //b.jsp에서 건네준 msg
	msg = member + "님 >> " + msg;
	ArrayList<String> datas = (ArrayList<String>)session.getAttribute("datas");
	if(datas == null){
		datas= new ArrayList<String>();
		session.setAttribute("datas", datas);
	}
	datas.add(msg);
	
	response.sendRedirect("b.jsp");
%>