1. JSP 란?
Java Server Page
- HTML 코드에 Java 코드를 넣어 동적 웹페이지를 생성하는 웹 애플리케이션 도구
- JSP가 실행되면, Java Servlet으로 변환되며 웹 애플리케이션 서버에서 동작되면서
필요한 기능을 수행하고 생성된 데이터를 웹 페이지와 함게 클라이언트로 응답한다
- HTML 코드 작성이 편해지지만, 비즈니스 로직 또한 JSP 파일에 같이 존재 (→ SRP 어긴다 → 유지보수가 어려워진다)
2. JSP 호출과정
- 확장자가 *.jsp인 요청은 모두 JspServlet이 받는다
- 첫 번째 호출에만 JSP를 변환 → 컴파일 → 객체 생성 (시간 지연 有)
두 번째 호출부터는 객체 생성 없이 service() 메서드 응답
- JSP가 변경되면 다시 변환 → 컴파일 → 객체 생성
- JSP나 Servlet은 호출됐을 때 객체를 생성하고 초기화
• 첫 호출 시 시간 지연 : Lazy-init
• Spring은 이를 개선하여 요청이 오지 않아도 미리 객체를 만들어 초기화 : Early-init
3. JSP의 기본 객체
- 객체 생성 없이 사용할 수 있는 객체
• service() 메서드의 지역변수로 선언되어 있다
기본 객체 | 타입 | 설명 |
request | javax.servlet.http.HttpServletRequest | 요청 정보가 담겨있는 객체 |
response | javax.servlet.http.HttpServletResponse | 요청에 응답을 작성할 때 사용 |
session | javax.servlet.http.HttpSession | HTTP session을 구현한 객체 세션 정보 저장에 사용 |
application | javax.servlet.ServletContext | Web Application 전체에서 공유하는 객체 |
config | javax.servlet.ServletConfig | JSP 페이지에 대한 설정 정보가 담긴 객체 |
page | java.lang.Object | JSP 페이지 객체 자신 |
pageContext | javax.servlet.jsp.PageContext | JSP 페이지의 context 정보를 제공 |
out | javax.servlet.jsp.JspWriter | 응답에 포함될 내용을 출력할 때 사용 |
exception | java.lang.Throwable | 예외가 발생했을 때 생성되는 예외 객체 |
- 위 표에서 초록색 4개의 기본 객체는 각기 다른 영역(Scope)를 가진다
- 각 영역에 저장되는 데이터(속성; Attribute)는 저장 및 가져오는 메서드가 동일하다
3.1. 기본 객체의 유효 범위(Scope)
- 위 표에서 4개의 기본 객체들은 각각 다른 생명 주기를 가지고 생성 / 소멸된다
• pageContext, request, session, application
pageContext | request | session | application |
1개 JSP 페이지 | 1+개 JSP 페이지 | n개 JSP 페이지 | context 전체 |
페이지당 1개 | 요청마다 1개 | 클라이언트마다 1개 | context마다 1개 |
- JSP 페이지의 시작부터 끝까지 - 페이지 내부에서만 접근 가능 - 요청마다 초기화 |
- 요청의 시작부터 응답까지 - 다른 JSP로 전달 가능 |
- session의 시작부터 종료까지 (로그인 ~ 로그아웃) - 사용자 수만큼 객체 생성 → 서버 부담 큼 |
- Web App 시작부터 종료까지 - context 내부 어디서나 접근 가능 - 모든 클라이언트가 공유 |
3.2. 기본 객체의 속성(Attribute) 관련 메서드
- 위 기본 객체의 데이터는 속성(Attribute)라고 부르며, 각각의 속성에 접근하는 메서드는 동일하다
속성 관련 메서드 | 설명 |
void setAttribute(String name, Object value) | 지정된 값(value)을 지정된 속성 이름(name)으로 저장 |
Object getAttribute(String name) | 지정된 이름(name)으로 저장된 속성의 값을 반환 |
void removeAttribute(String name) | 지정된 이름(name)의 속성을 삭제 |
Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성의 이름을 반환 |
4. EL 표현식
Expression Language
- JSP 2.0에서 추가된 스크립트 언어
- 기존 스크립트 태그의 표현식 <%= 정보%> 태그에서 업그레이드 된 버전 : ${정보}
${requestScope.test.name}
${test.name} <!-- requestScope는 생략 가능 -->
- 주요 특징
• JSP 기본 객체에 저장된 속성(Attribute)의 property를 출력 가능
• 리터럴 데이터, 다양한 연산결과 출력 가능
• JSTL과 연동 가능
- [참고] EL 표현식 잘 정리된 블로그 : https://atoz-develop.tistory.com/entry/JSP-EL-%ED%91%9C%ED%98%84%EC%8B%9D-%EB%AC%B8%EB%B2%95%EA%B3%BC-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95
5. JSTL
JSP Standard Tag Library
- JSP에서 자주 사용하는 기능(반복문, 조건문, 데이터 표현 등)을 미리 구현해 놓은 커스텀 태그 라이브러리 모음
- JSTL 라이브러리 (접두어) : core (c), formatting (fmt), function (fn), database (sql), xml (x)
- JSTL은 EL을 사용하여 표현
- 주요 Core 태그
태그 | 설명 |
<c:set> | JSP에서 사용될 변수 설정 |
<c:remove> | 설정한 변수 제거 |
<c:choose> | 다중 조건 처리 (else if) |
<c:forEach> | 반복문 제어. collection 또는 map의 각 항목을 처리할 때 사용 |
<c:forTokens> | 구분자로 분리된 각각의 토큰을 처리 시 사용 |
<c:url> | URL 생성 |
<c:import> | 지정한 주소로 요청하고 응답 결과를 받아 반환 |
<c:redirect> | Redirect 처리 시 사용 |
📌 References
- [Fastcampus] 나도 할 수 있는 Java&Spring 웹 개발 종합반 강의
- https://creamilk88.tistory.com/117#google_vignette
'Web > Web' 카테고리의 다른 글
[Web] 서버 성능 테스트 종류와 도구 및 대규모 트래픽 상황 대비 (0) | 2024.05.03 |
---|---|
[Web] 서블릿 필터 (Servlet Filter) (1) | 2024.02.01 |
[Web] 서블릿(Servlet)이란? JSP와 MVC 패턴으로의 변화 (1) | 2024.01.31 |
[Web] HTTP 응답 상태코드와 요청 메서드(GET / POST) (0) | 2024.01.31 |
[Web] WAS란? 동적 / 정적 콘텐츠, Tomcat 요청 처리 과정 (0) | 2024.01.10 |