Dev/JSP & Servlet

JSP - scope과 attribute

창문닦이 2019. 2. 18. 21:25

 

영역(scope) : 속성을 공유할 수 있는 유효범위

속성(attribute): 공유되는 데이터

객체 범위 종류

1. application 영역

서버가 유지되고 있는 동안 상태 유지 (ex. 모든 어플리케이션이 공유할 자원). 같은 애플리케이션 내에서 요청되는 페이지들은 애플리케이션 영역을 공유

- JSP : Context클래스

- Servlet : ServletContext클래스

 

2. session 영역

세션이 설정되서 세션이 종료할 때까지 상태 유지(ex. 로그인정보,  장바구니). 같은 브라우저 내에서 요청되는 페이지들은 세션 영역을 공유

- JSP : session  내장객체 사용

- Servlet : HttpSession 클래스를 이용 세션 객체 얻기

  HttpSession session=request.getSession();

 

3. request 영역

 다음 페이지까지 상태 유지 (1:1의 관계) (ex. 게시판, 방명록). 요청을 받아서 응답하기가지 객체가 유효.

- Servlet 

RequestDispatcher rd  = request.getRequestDispatcher("상대경로/파일명");
request.setAttribute("세션명",객체명);
rd.forward(request, response);

 

4. page 영역

현재 페이지에서만 상태 유지 (해당 JSP 페이지)


Scope 테스트 해보기

- app.jsp 생성

페이지를 접속할 때마다 동일 애플리케이션 상에 같은 객체를 공유하고 있기 때문에 누적되어 카운트 되는 것을 확인할 수 있다.

<%@ page contentType="text/html; charset=UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	//Scope(영역)
	//page , request, session, application영역

	//application영역
	int n=0;
	String count = (String) application.getAttribute("count");
	if(count!=null){
	n = Integer.parseInt(count);
	}
	n++;

	application.setAttribute("count", Integer.toString(n));

	//실제 접속자의 주소
	String realPath = application.getRealPath("/");
	application.log("접속자 : " + request.getRemoteAddr());
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
총 접속자 : <%=n %><br/>
웹서버 실제 경로 : <%=realPath %>
</body>
</html>

 

- 출력 페이지