출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

JSP는 HTTP 프로토콜의 사용하는 웹 환경에서 구동되는 프로그램이다. HTTP는 비연결형으로 사용자가 서버에 특정 페이지를 요청하고 요청결과를 응답받으면 서버와의 연결이 끊기는 형태이다. 예를 들어 게시판에 글을 작성하는 페이지에서 작성한 내용은 다른 jsp에서 처리해야 하고 서버는 방금 글을 작성한 사람이 누구인지 모를 수 있다. 또 다른 예로 쇼핑몰에서 여러 상품 페이지를 이동하면서 장바구니에 물건을 담아 두고 한꺼번에 구매하고자 할 때 접속된 사용자별로 선택된 상품을 처리하는 경우 지금까지 배운 JSP 문법만 가지고는 이를 처리하기 어렵다. JSP 에서  page, request, session, application 내장객체를 통해 서로 다른 페이지에서 처리된 값을 저장하고 공유하기 위한 방법을 제공한다. 이는 컨테이너 기반 프로그램의 특징 중 하나로 실제 프로그램 구현 시 매우 중요한 기법이다.

 

➊ application은 모든 사용자가 공유하는 데이터를 저장할 수 있으며 톰캣이 종료될 때 까지 데이터를 유지할 수 있다(맨 위의 user1, user2 해당).
➋ session의 경우 사용자마다 분리된 저장 영역이 있으며 Page1, Page2, Page3 모두에서 공유되는 정보를 관리할 수 있다. 물론 이 데이터는 각자 공유 영역에서 관리되며 사용자 간에는 공유되지 않는다.
➌ 페이지 흐름이 Page1, Page2, Page3순으로 진행된다고 할 때, 한 페이지에서 다른 페이지로 데이터를 전달하려면 request 내장객체를 이용해야 한다(맨 아래의 user1에 해당한다). page 마다 생성됨.

 

  • request, session, application 은 각각 생성 시점과 소멸시점이 다르며 이를 잘 이해하고 적절한 내장객체를 이용해야 한다.
  • 각각의 내장객체는 모두 getAttribute(), setAttribute() 메서드를 통해 속성을 저장하거나 가져올 수 있다.

 

 

request, session, application을 이용한 속성 관리


- request, session, application은 맵 형태의 속성 관리 기능을 제공 한다.
- 속성을 저장하기 위해서는 setAttribute(String name, Object value) 형태를 취한다.
- 반대로 속성에 저장된 값을 가져오는 getAttribute(String name) 메서드는 name에 해당하는 Object 를 리턴한다.
- 리턴되는 타입이 Object 이므로 속성을 가지고 올 때에는 적절한 형 변환이 필요하다.
- 예를 들어 page1에서 session.setAttribute("name,"홍길동")으로 문자열 객체를 저장한다면.

  page3에서는 session.getAttribute("name")으로 저장된 값을 참조할 수 있다.

 

– PAGE 영역 - 하나의 JSP 페이지를 처리할 때 사용되는 영역 
– REQUEST 영역 - 하나의 HTTP 요청을 처리할 때 사용되는 영역 
– SESSION 영역 - 하나의 웹 브라우저와 관련된 영역 
– APPLICATION 영역 - 하나의 웹 어플리케이션과 관련된 영역

 

 

 

 

application 속성확인 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
   application.setAttribute("name", "김태형");
   application.setAttribute("age", "26");

   %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1><a href="applicationAttrView.jsp">application 속성 확인</a></h1>
	
</body>
</html>

applicationAttrView.jsp

 

<%@page import="java.util.Enumeration"%>
<%@ 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>


<%
	Enumeration<String> attrNames = application.getAttributeNames();
	
	while(attrNames.hasMoreElements()){
		
		String attrName = attrNames.nextElement();
		Object value = application.getAttribute(attrName);
		out.println(attrName + " = " + value.toString()+"<br>");
				
	}
	
%>

</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	request.setAttribute("lang", "ko");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


	<%-- <jsp:forward page="forward.jsp" /> --%>

	<!-- ko가 나온다  리퀘스트공유 > 포워드 or 인클루드 -->
	<%
		response.sendRedirect("forward.jsp");
	/* null이나온다 */
	%>



</body>
</html>

forward.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>

	<h1><%= request.getAttribute("lang") %></h1>

</body>
</html>

forward page와 response의 차이

 

 

 

+ Recent posts