ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP와 SCOPE 접해보기
    웹 프로그래밍/BE(Back-End) 2021. 6. 3. 17:35

    오늘은 JSP와 SCOPE에 대해 배웠다.

    먼저 JSP가 무엇인지부터 알아보고 간단한 예제 코드를 보면서 설명해보겠다.

     

    JSP는 JavaServer Pages의 약어로 Java 언어를 기반으로 하는 스크립트 언어로 HTML 코드에 Java 코드를 넣어 동적인 웹 페이지를 생성하는 웹 어플리케이션 도구이다.

    우리는 HTML을 통해 웹 페이지를 구현하려고 하면 기능이 정해진 태그 안에 텍스트를 넣거나 링크를 걸거나 파일의 위치를 지정한 등 정적인 기능만 구현이 가능하다.

    HTML 안에서 다른 언어의 코드를 넣어 동작시키는 것은 HTML이 제공하는 기능만으로는 불가능하다.

    하지만 JSP를 사용하게 되면 HTML과 동적으로 생성된 contents를 혼합하여 사용할 수 있다. 즉, 사용자가 요청하는 것에 맞게 동적인 웹 페이지를 생성할 수 있다는 것이다.

    이러한 JSP는 왜 개발된 것일까?

    간단히 말하면 마이크로소프트의 ASP(Active Server Page)와의 경쟁에서 이기기에는 기존에 있던 서블릿만으로는 부족하여 썬마이크로시스템즈에서 JSP를 개발한 것이다.

    마이크로소프트는 조금 더 간편하게 웹을 개발할 수 있게 해주는 ASP라는 스크립트엔진을 1998년에 출시했다.

    ASP가 출시되기 이전에는 1997년에 발표된 서블릿이 있었는데 서블릿은 ASP에 비해 개발방식이 불편하다는 단점이 있었다.

    예를 들어, 서블릿은 웹 페이지에 텍스트를 나타내기 위해서는 print()함수로 HTML코드를 전부 구현해야한다는 점이 있다.

    그래서 서블릿에 비해 ASP의 사용자 수가 늘어났고 ASP를 대항하기 위해 1999년에 썬마이크로시스템즈에서 JSP를 개발하게 된 것이다.

     

    JSP에서 가장 중요하게 알아야 할 부분은 JSP는 실제로 서블릿 기술을 사용한다는 것이다.

    즉, 우리는 JSP를 통해 소스 코드를 만들었지만 실제로 JSP가 실행되면 WAS는 내부적으로 JSP 파일을 Java Servlet(.java)으로 변환한다.

    그러면 아래의 간단한 JSP 코드를 보면서 추가적으로 알아야할 부분을 설명해보겠다.

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>sum10</title>
    </head>
    <body>
    
    <% 
        int total = 0;
        for(int i = 1; i <= 5; i++){
            total = total + i;
        }
    %>
    
    1부터 5까지의 합 : <%=total %>
    
    </body>
    </html>

    이 코드는 1부터 5까지의 합의 결과를 웹 페이지에서 출력하는 것이다.

    HTML코드와 유사해보이지만 추가된 부분들이 보인다.

    먼저, 첫 줄의 <%@ ... %>은 지시자로 JSP 페이지 전체의 속성을 어떻게 처리할것인가? 를 지정하는 역할을 한다.

    위 코드에서의 <%@ page  ... %>는 page 지시자로 페이지의 언어는 무엇으로 되어있는지, 컨텐츠타입은 무엇인지 등의 정보를 알려주는 역할을 한다.

    <% ... %>은 scriptlet(스크립트릿)으로 이 영역 안에는 java코드로 입력되어있다는 것을 알려주는 것이다.

    <%= ... %>은 표현식으로 java코드를 통해 나온 결과를 웹 페이지에서 응답으로 보여주고 싶은 것을 담고있다.

     

    위 JSP코드가 실제로 실행되면 서블릿으로 바뀌어 실행되어 스크립트릿 안에 있는 것은 그대로 java코드로 바뀌게 되고

    표현식은 서블릿에서 실행되므로 out.print()로 바뀌어 실행된다.

     

     

    다음으로 배운 것은 scope이다.

    scope는 한국어로 번역하면 범위이다. 어떠한 범위를 말하냐하면 우리가 코드 내에서 선언한 변수에 접근할 수 있는 범위를 말한다.

    servlet과 JSP로 웹 페이지를 개발하기 위해서 다수의 변수를 사용할 수 있다.

    각각의 변수는 사용되어지는 범위가 다를 수 있고 이 범위에 따라 스코프로 나누어 얘기한다.

    웹 프로그래밍에서는 page scope, request scope, session scope, application scope 총 4가지의 scope이 존재한다.

    먼저, page scope은 변수가 선언된 페이지 내에서만 사용가능한 것을 의미한다.

    JSP에서는 pageContext라는 내장 객체로 사용가능하며 forward가 될 경우 page scope에 지정된 변수는 사용할 수 없다.

    다른 scope와 달리 마치 지역변수처럼 사용되는 것으로 JSP나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용된다.

     

    request scopehttp요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용하는 것을 의미한다.

    서블릿에서는 HttpServletRequest객체를 사용하여 변수를 선언할 수 있고 JSP에서는 request내장 변수로 사용가능하다.

    보통 forward 시에 값을 유지하고자 사용한다.

     

    session scope은 세션 객체가 생성되고 세션 객체가 소멸될 때까지 사용가능한 것으로 웹 브라우저 별로 변수를 관리하고자 할 경우에 사용한다.

    request scope은 하나의 요청이 들어오고 응답이 나갈 때까지 사용하는 변수의 범위를 뜻했지만 session scope은 요청이 하나가 아닌 여러 개의 요청이 들어와도 남아있는 것을 의미한다.

    웹 브라우저는 클라이언트라고 할 수 있는데 하나의 서버에 요청하는 클라이언트는 여러 개일 수 있다.

    이러한 여러 개의 클라이언트 중 하나의 클라이언트마다 하나의 객체를 만들어 관리하는 것이 세션이다.

    session scope의 특징 중 하나는 웹 브라우저에서 탭간에는 세션정보가 공유된다는 것이다.

    이에 대한 예시로는 우리가 chrome을 열어 네이버에 로그인을 하고 새로운 탭을 열어 네이버에 접속을 하면 로그인이 유지되어 있는 것을 볼 수 있다.

    서블릿에서는 HttpSession인터페이스를 구현한 객체를 사용하고 JSP에서는 session내장 변수를 사용한다.

     

    마지막으로 application scope 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용는 것이다.

    서블릿에서는 ServletContext 인터페이스를 구현한 객체를 사용하고 JSP에서는 application 내장 객체를 사용한다.

    웹 어플리케이션 하나당 하나의 appication객체가 사용되고 주의해야할 점은 모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 이 application을 사용해야한다는 것이다.

     

    댓글

Designed by Tistory.