JSP - #5 Scope

임다이·2023년 11월 3일
0

Jsp/Servlet

목록 보기
10/10

Scope

JSP페이지에서 사용되는 객체들은 JSP 내장 객체이든 페이지 내에서 만들어졌던 간에 모두 정해진 영역 안에서만 사용 가능


  • Page scope
    실제 선언된 JSP 페이지 내에서만 사용 가능
    • pageContext 내장객체로 사용 가능
    • 저장된 값은 저장한 페이지 내에서 지역변수로 사용

  • 값 저장 방법

  • 주 사용 용도

    • pageScope에 값을 저장한 후 EL 표기법 사용
    • 해당 JSP나 Servlet이 실행되는 동안에만 정보 유지하고자 할 때 사용

  • Request scope
    클라이언트로부터 요청을 받고 응답할 때까지 사용 가능
    • HttpServletRequest객체로 사용 가능
    • service() 메소드가 끝날 때 객체가 없어짐

  • 값 저장 방법

  • 주 사용 용도
    • 클라이언트의 요청을 다룰 때 사용
    • forward로 데이터 넘겨서 유지하고자 할 때 사용

  • Request(forward)

    • forward 방식
      -요청이 들어오면 서버 내에서 이동해야 할 페이지로 알아서 이동
      -요청이 1번, 처음 요청했던 request객체에 담긴 정보(id, pw 등...)가 유효함
      -요청이 1번이라서 네트워크 트래픽이 발생 X, 실행속도가 빠름
      -request객체를 사용하기 때문에 Object타입으로 모든 객체를 담을 수 있음
      -단점 : 서버내에서만 이동이 가능 → 외부서버로 이동 불가능

    • sendRedirect 방식
      -요청이 들어오면 서버에서 이동해야 할 페이지를 응답해서 다시 요청할 수 있도록 함
      -요청이 2번, 서로 다른 request객체이기 때문에 데이터 전송할 때 쿼리스트링 방식을 사용해야 함
      -요청이 2번이라서 네트워크 트래픽이 발생 O, 실행속도가 느림
      -쿼리스트링 방식을 사용하기 때문에 Text형태로만 데이터 전송 가능
      -이동 할 페이지를 새롭게 요청하기 때문에, 다른 서버의 페이지로 이동 가능

  • Session scope
    세션이 유지되는 동안 사용 가능
    • HttpSession객체로 사용 가능
    • 웹 브라우저 별(Chrome, Safari 등) 변수 관리하는 영역

  • 값 저장 방법

  • 주 사용 용도
    주로 로그인 시 사용자 정보를 저장하고 싶을 때 사용

  • Application scope
    웹 어플리케이션이 시작되고 종료될 때 까지 사용 가능
    • ServletContext객체로 사용 가능
    • 웹 어플리케이션 당 한 개의 객체 사용

  • 값 저장 방법

  • 주 사용 용도
    모든 클라이언트들이 공통적으로 사용하는 값 저장



→ EL문법 쓸려면 위에 두 줄 안써도된다.


실습

  • pageScope1.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>
    
        <%
            // page 영역에 값 저장
            // pageContext
            pageContext.setAttribute("nick", "페이지 영역");
    
            // page 영역에서 값 가져오기
            String nick = (String)pageContext.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %> <br>
        닉네임(EL) : ${nick} <br>
    
        <a href="Ex01_pageScope2.jsp"> 2페이지로 이동 </a>
    
    </body>
    </html>

  • pageScope2.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>
    
        <%
            String nick = (String)pageContext.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %>
    
    </body>
    </html>

  • requestScope1.jsp

    <%@page import="org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext"%>
    <%@page import="org.apache.tomcat.util.http.fileupload.RequestContext"%>
    <%@ 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>
    
        <%
            // request 영역에 값 저장하기
            request.setAttribute("nick", "request영역");
            // request 영역에서 값 가져오기
            String nick = (String)request.getAttribute("nick");
    
            // forward 방식으로 페이지 이동
            RequestDispatcher rd = request.getRequestDispatcher("Ex02_requestScope2.jsp");
            rd.forward(request, response);
        %>
    
        <!-- 화면에 출력! + EL문법으로도 출력 -->
        닉네임 : <%= nick %> <br>
        닉네임(EL) : ${nick} <br> <!-- request.setAttribute("nick", "request영역"); 여기꺼 가져오는거임 -->
    
        <a href="Ex02_requestScope2.jsp"> 2페이지로 이동 </a>
    
    </body>
    </html>

  • requestScope2.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>
    
        <%
            String nick = (String)request.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %>
    
    </body>
    </html>

  • sessionScope1.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>
    
        <%
            session.setAttribute("nick", "session영역");
    
            String nick = (String)session.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %> <br>
        닉네임(EL) : ${sessionScope.nick} <br>
    
        <a href="Ex03_sessionScope2.jsp"> 2페이지로 이동 </a>
    
    </body>
    </html>

  • sessionScope2.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>
    
        <%
            String nick = (String)session.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %> 
    
    </body>
    </html>

  • applicationScope1.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>
    
        <%
            application.setAttribute("nick", "application영역");
            String nick = (String)application.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %> <br>
        닉네임(EL) : ${applicationScope.nick} <br>
    
        <a href="Ex04_applicationScope2.jsp"> 2페이지로 이동 </a>
    
    </body>
    </html>

  • applicationScope2.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>
    
        <%
            String nick = (String)application.getAttribute("nick");
        %>
    
        닉네임 : <%= nick %>
    
    </body>
    </html>

  • foward.jsp(foward 정리)

    <%@ 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> forward 방식 </h1>
        <ul>
            <li> 요청이 들어오면 서버 내에서 이동해야 할 페이지로 알아서 이동 </li>
            <li> 요청이 1, 처음 요청했던 request객체에 담긴 정보(id, pw 등...)가 유효함 </li>
            <li> 요청이 1번이라서 네트워크 트래픽이 발생 X, 실행속도가 빠름 </li>
            <li> request객체를 사용하기 때문에 Object타입으로 모든 객체를 담을 수 있음 </li>
            <li> 단점 : 서버내에서만 이동이 가능 -> 외부서버로 이동 불가능 </li>
        </ul>
    
        <% request.getRequestDispatcher("http://www.naver.com").forward(request, response); %>
    
        <hr>
        <h1> sendRedirect 방식 </h1>
        <ul>
            <li> 요청이 들어오면 서버에서 이동해야 할 페이지를 응답해서 다시 요청할 수 있도록 함 </li>
            <li> 요청이 2, 서로 다른 request객체이기 때문에 데이터 전송할 때 쿼리스트링 방식을 사용해야 함 </li>
            <li> 요청이 2번이라서 네트워크 트래픽이 발생 O, 실행속도가 느림 </li>
            <li> 쿼리스트링 방식을 사용하기 때문에 Text형태로만 데이터 전송 가능 </li>
            <li> 이동 할 페이지를 새롭게 요청하기 때문에, 다른 서버의 페이지로 이동 가능 </li>
        </ul>
    
    </body>
    </html>

profile
노는게 제일 좋아~!

0개의 댓글