[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 에 해당하는 서블릿 클래스가 없는 경우
- 클라이언트 요청
- 해당 JSP 와 관련된 서블릿 클래스가 없는 경우 실행
- JSP 로부터 자바 코드 생성
- Java 코드를 서블릿 클래스로 컴파일 후 서블릿 클래스 실행 하여 처리
- 처리 결과 응답
- 응답 전송
JSP 에 해당하는 서블릿 클래스가 있는 경우
- 클라이언트 요청
- 서블릿에 요청 전달
- 처리 결과 응답
- 응답 전송
💡
단, JSP 파일이 변경 되는 경우에는 기존에 서블릿의 생성과 상관 없이 새로 생성함
출력 버퍼와 응답
JSP 페이지는 응답 결과를 바로 전송하지 않고, 출력 버퍼에 저장 했다가 한 번에 웹 브라우저에 전송함
장점
- 데이터 전송 성능 향상
버퍼 개념을 사용하여 일정 용량 이하 일 경우 사용자에게 응답을 보내지 않음.
버퍼가 일정량 이상 차게 되면 응답을 보냄. 데이터들이 처리 될 때 마다 가 아니라 한 번에 보내기 때문에 네트워크 오버헤드가 감소되는 장점이 존재 - JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능
- 버퍼가 다 차기 전 까지 헤더 변경 가능
단점
- 응답이 느려질 수 있음
버퍼 기능은 특정 용량 미만이라면 사용자에게 응답을 주지 않음. 따라서 사용자 경험이 느려질 수 있음. 특히 파일 다운로드나 긴 시간이 필요한 작업을 수행 할 때는 더 많은 시간을 기다려야 함 - 메모리 사용량 증가 가능성
출력 버퍼의 크기가 적절하지 못하다면 메모리 사용량이 증가 할 수 있음
적정 용량보다 큰 용량을 사용하면 메모리 사용량이 증가 - 일관성 문제
버퍼에 저장하고 전송하기 때문에 일부 화면에서는 이전의 처리 시간이 다를 수 있음 - 버퍼에서 오류가 발생 했을 때 처리가 복잡 해 질 수 있음
- 실시간 업데이트가 어려움