[국비학원 기록/JSP] 내장 객체, page, request, 세션(session), 애플리케이션(application) 영역
my code archive
article thumbnail
반응형
내장 객체(내장 변수)

-JSP가 서블릿으로 변환 시 컨테이너가 자동으로 생성시키는 서블릿 멤버변수.

-내장 객체는 JSP에서 별다른 선언 없이 바로 사용 가능한(많이 사용되는 기능을 정의한)객체를 의미한다.

-내장 객체는 JSP가 변환된 Java 파일 안에 _jspService( )메서드 내에서 선언되는 지역 변수 => 선언문 안에서 내장 객체 사용 불가

<변환된 java 파일 경로>
워크스페이스_경로\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\프로젝트명

 

영역(Scope)

 

  1. page 영역 : 동일한 페이지에서만 공유됨, 페이지 벗어나면 소멸됨.

 

  2. request 영역 : 하나의 요청에 의해 호출된 페이지와 포워드(요청 전달)된 페이지까지 공유됨.

                      새로운 페이지를 요청(페이지 이동)하면 소멸됨.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setAttribute("name", "이순신");
    request.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>첫 번째 JSP</title>
</head>
<body>
    <%
        RequestDispatcher dispatcher = request.getRequestDispatcher("request2.jsp");
        dispatcher.forward(request, response);
    %>
</body>
</html>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
    String name = (String)request.getAttribute("name");
    String address = (String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>두 번째 JSP</title>
</head>
<body>
    이름은 <%=name%>입니다.<br>
    주소는 <%=address %>입니다.<br>
</body>
</html>
cs

주소 변하지 않음 -> forward됨.

3. session 영역 : 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유됨.

                      포워드나 페이지 이동 시에도 영역은 소멸되지 않음.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("utf-8");
    String name = (String)session.getAttribute("name");        //session 객체에 바인딩된 name값 가져옴.
    session.setAttribute("address", "서울시 서초구");            //session 객체에 address라는 이름으로 새롭게 바인딩함.
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>내장 객체 테스트1</title>
</head>
<body>
    이름은 <%=name %> 입니다.<br>
    <a href="session2.jsp">[두 번째 페이지로 이동]</a>
</body>
</html>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("utf-8");
    String name = (String)session.getAttribute("name");        
    String address = (String)session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>내장 객체 테스트2</title>
</head>
<body>
    이름은 <%=name %> 입니다.<br>
    주소는 <%=address %>입니다.
</body>
</html>
cs

다른 브라우저에서 실행하면 주소 null값으로 나옴. (세션이기 때문에)

4. application 영역 : 한 번 저장되면 웹 애플리케이션이 종료될 떄까지 유지됨.

                           ->서버가 다운되지 않는다면 언제까지든 공유되는 영역.

                           가장 넓은 범위

                           

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    session.setAttribute("name", "이순신");
    application.setAttribute("address", "서울시 서초구");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>내장 객체 scope 테스트1</title>
</head>
<body>
    <h1>이름과 주소를 저장합니다.</h1>
    <a href="appTest2.jsp">[두 번째 웹 페이지로 이동]</a>
</body>
</html>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String name = (String)session.getAttribute("name");
    String address = (String)application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>내장 객체 scope 테스트1</title>
</head>
<body>
    이름은 <%=name %> 입니다.<br>
    주소는 <%=address %> 입니다.
</body>
</html>
cs

다른 브라우저에서도 null값이 아닌 원래 address값이 유지됨.
(범위가 가장 넓은 application)

이름은 session객체이기 때문에 null값으로 나옴.
반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형