[F-Lab 모각코 챌린지] 13일차 - JSP 사용법 & 필수 개념

F-Lab 모각코 챌린지 13일차 JSP 사용법 & 필수 개념을 공부하고 정리하였습니다

[F-Lab 모각코 챌린지] 13일차 - JSP 사용법 & 필수 개념

JSP 사용법

jsp 에서는 여러 데이터와 기능을 제공함

  • 디렉티브 (Directive)
  • 스크립트: 스크립트릿(Scriptlet), 표현식(Expression), 선언부(Declaration)
  • 표현 언어(Expression Language)
  • 내장 객체(Implicit Object)
  • 정적인 데이터
  • 표준 액션 태그(Action Tag)
  • 커스텀 태그(Custom Tag) 와 표준 태그 라이브러리(JSTL)

디렉티브(Directive)

JSP 패키지에 대한 설정 정보를 지정 할 때 사용

디렉티브 설명
page JSP 페이지에 대한 지시사항을 설정
ㄴ import Java 클래스나 패키지를 import할 때 사용
ㄴ session JSP 페이지에서 세션을 사용할 수 있도록 지정
ㄴ contentType JSP 페이지의 컨텐츠 유형을 설정
ㄴ language JSP 페이지에서 사용할 스크립트 언어를 설정
ㄴ extends JSP 페이지가 상속할 클래스를 지정
ㄴ buffer 출력 버퍼의 크기를 설정
include 다른 JSP 파일이나 외부 리소스를 현재 JSP 페이지에 포함시킴
taglib JSP 페이지에서 사용할 태그 라이브러리를 선언

사용 방법

<!-- 문법 -->
<%@ page 속성="값" %>

<!-- 예제 -->
<%@ page contentType="text/html; charset=UTF-8" %>

스크립트

동적인 서버 측 로직을 프론트에 작성하기 위한 기능

표현식(Expression)

값을 출력하거나 변수값을 사용

<%=%> 사이에 표현식을 작성

<p>현재 시간: <%= new java.util.Date() %></p>

스크립트릿(Scriptlet)

JSP 페이지에서 Java 코드 블록을 실행

<%%> 사이에 스크립트릿을 작성

<% // 스크립트릿
   String name = "John Doe";
   int age = 30;
%>

<p>이름: <%= name %></p> <%-- 표현식 --%>
<p>나이: <%= age %></p> <%-- 표현식 --%>

선언부(Declaration)

JSP 페이지에서 메서드나 변수를 선언 할 때 사용

<%!%> 사이에 작성

<%! 
   public void printMessage() {
      System.out.println("Hello, World!");
   }
%>

<%
   printMessage(); // 선언된 메서드 호출
%>

표현 언어(Expression Language)

위에서 설명한 표현식을 간단하게 표기하는 방법

${} 사이에 작성

변수 접근

${변수명}

<%-- JSP 스크립트릿 --%>
<% String name = "John Doe"; %>

<%-- EL 사용 --%>
<p>이름: ${name}</p>

프로퍼티 접근

JavaBeans 객체의 프로퍼티에 접근 가능

${객체명.프로퍼티명}

<%-- JSP 스크립트릿 --%>
<% Person person = new Person();
   person.setName("John Doe");
   person.setAge(30);
%>

<%-- EL 사용 --%>
<p>이름: ${person.name}</p>
<p>나이: ${person.age}</p>

메서드 호출

${[객체명].메서드명()}

<%-- JSP 스크립트릿 --%>
<% Person person = new Person();
   person.setName("John Doe");
   person.setAge(30);
%>

<%-- EL 사용 --%>
<p>인사 메시지: ${person.getGreeting()}</p>

내장 객체(Implicit Object)

JSP 페이지에서 추가적인 설정 없이 사용할 수 있는 내장 객체

기본 객체 설명
request 클라이언트의 요청에 대한 정보와 데이터를 담고 있는 객체
response 서버가 클라이언트에게 응답을 보내기 위한 메서드와 속성을 제공하는 객체. 캐시, 리다이렉트,
session 클라이언트의 세션 객체
application 웹 애플리케이션의 전역 정보를 저장하고 검색하는 데 사용되는 객체
out 출력 스트림 객체
pageContext JSP 페이지와 관련된 컨텍스트 정보에 접근하는 객체
config 현재 JSP 페이지의 구성 정보를 저장하고 있는 객체
page 현재 JSP 페이지를 나타내는 객체

표준 액션 태그(Action Tag)

액션 태그 설명
<jsp:include> 다른 JSP 파일이나 외부 리소스를 현재 JSP 페이지에 포함시킵니다.
<jsp:forward> 현재 요청을 다른 JSP 페이지, 서블릿, 혹은 외부 URL로 전달합니다.
<jsp:param> 다른 액션 태그에 전달할 매개변수를 설정합니다.
<jsp:useBean> JavaBeans 객체를 JSP 페이지에서 사용하기 위해 해당 객체를 생성하거나 검색
<jsp:setProperty> JavaBeans 객체의 프로퍼티에 값을 설정
<jsp:getProperty> JavaBeans 객체의 프로퍼티 값을 가져옴

커스텀 태그(Custom Tag)

사용자가 직접 정의 한 태그

커스텀 태그는 두 가지 유형으로 나눌 수 있음: 커스텀 태그(Custom Tag), 커스텀 라이브러리 태그(Custom Tag Library)

  • 커스텀 액션 태그(Custom Action Tag)
    JSP 에서 사용자가 직접 정의한 태그
  • 커스텀 태그 라이브러리(Custom Tag Library)
    여러 개의 커스텀 태그를 그룹화 하여 사용할 수 있는 라이브러리
    TLD(Tag Library Descriptor) 와 Java 클래스로 구분.
    TLD 에는 각 태그의 속성, 동작 등에 대한 정보가 정의되어 있다

JSP 필수 이해 요소

JSP 를 작성하여 프로그램을 만들면 다음의 과정을 거쳐 처리됨

JSP 에 해당하는 서블릿 클래스가 없는 경우

  1. 클라이언트 요청
  2. 해당 JSP 와 관련된 서블릿 클래스가 없는 경우 실행
  3. JSP 로부터 자바 코드 생성
  4. Java 코드를 서블릿 클래스로 컴파일 후 서블릿 클래스 실행 하여 처리
  5. 처리 결과 응답
  6. 응답 전송

JSP 에 해당하는 서블릿 클래스가 있는 경우

  1. 클라이언트 요청
  2. 서블릿에 요청 전달
  3. 처리 결과 응답
  4. 응답 전송
💡
단, JSP 파일이 변경 되는 경우에는 기존에 서블릿의 생성과 상관 없이 새로 생성함

출력 버퍼와 응답

JSP 페이지는 응답 결과를 바로 전송하지 않고, 출력 버퍼에 저장 했다가 한 번에 웹 브라우저에 전송함

장점

  • 데이터 전송 성능 향상
    버퍼 개념을 사용하여 일정 용량 이하 일 경우 사용자에게 응답을 보내지 않음.
    버퍼가 일정량 이상 차게 되면 응답을 보냄. 데이터들이 처리 될 때 마다 가 아니라 한 번에 보내기 때문에 네트워크 오버헤드가 감소되는 장점이 존재
  • JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능
  • 버퍼가 다 차기 전 까지 헤더 변경 가능

단점

  • 응답이 느려질 수 있음
    버퍼 기능은 특정 용량 미만이라면 사용자에게 응답을 주지 않음. 따라서 사용자 경험이 느려질 수 있음. 특히 파일 다운로드나 긴 시간이 필요한 작업을 수행 할 때는 더 많은 시간을 기다려야 함
  • 메모리 사용량 증가 가능성
    출력 버퍼의 크기가 적절하지 못하다면 메모리 사용량이 증가 할 수 있음
    적정 용량보다 큰 용량을 사용하면 메모리 사용량이 증가
  • 일관성 문제
    버퍼에 저장하고 전송하기 때문에 일부 화면에서는 이전의 처리 시간이 다를 수 있음
  • 버퍼에서 오류가 발생 했을 때 처리가 복잡 해 질 수 있음
  • 실시간 업데이트가 어려움