한화시스템 BEYOND SW Camp_0806

퍼킹락스타·2025년 8월 6일

EL/JSTL

1. EL(Expression Language)

: JSP 2.0버전에서 추가된 표현 언어다. 표현식 태그를 대신하여, 클라이언트에 출력하고자 하는 값들을 좀 더 간결학게 사용하는 방법이다. JSTL과 함께 사용하기 권장한다.

  • 표현식 태그(<%= ... %>)의 한계점
    1) 자바 코드가 JSP에 그대로 보인다. -> View 영역이 더럽혀짐
    2) 간단한 출력도 자바 문법을 알아야 해서, 개발자가 아닌 사람은 다루기 어렵다.
    3) JSP가 자바 로직에 의존하기 때문에, MVC 역할 분배가 어려워짐
  • EL 표현식의 장점
    1) 가독성이 향상된다. (ex ${user.name})
    2) 객체 탐색이 쉬워진다.
    3) null이어도 에러가 안 나서, NullPointerException을 방지한다.
    4) 자바 로직은 서블릿, 컨트롤러에 JSP는 출력만 담당해서, MVC 패턴에 적합하다.
  • 기존 JSP가 저런 문제를 갖는 이유
    : HTML에 자바 코드를 섞는 방식으로 만들었기 때문에, 저런 문제들이 생겼음.

EL의 단점
1) 제어문(조건문, 반복문) 불가능하기에, JSTL 같은 태그 라이브러리와 함께 사용해야한다.
2) 자바 코드 직접 호출이 안된다. 속성만 가능하다.
3) 장점이 단점이 되는 순간. JSP는 단순 출력만 가능하다.
4) 삼항 연산자는 가능하지만, 커스텀 로직이나 예외 처리는 불가능하다.

1) EL 내장 객체

: 내장 객체를 가장 많이 활용한다.

객체 명설명
pageScopePage 영역에 저장된 객체에 접근할 때 사용
requestScopeRequest 영역에 저장된 객체에 접근할 때 사용
sessionScopeSession 영역에 저장된 객체에 접근할 때 사용
applicationScopeApplication 영역에 저장된 객체에 접근할 때 사용
param단일 파라미터 값을 가져올 때 사용 (${param.name})
paramValues동일한 이름의 파라미터 여러 개를 배열로 가져올 때 사용 (${paramValues.name[0]} 등)
headerHTTP 요청 헤더 값을 가져올 때 사용 (${header.User-Agent} 등)
headerValues동일한 이름의 요청 헤더가 여러 개 있을 때 배열로 접근
cookie쿠키 정보에 접근할 때 사용 (${cookie.key명.value})
initParamweb.xml에 설정한 초기 파라미터를 가져올 때 사용
pageContextJSP의 PageContext 객체에 직접 접근 (경로, 속성 등 다양한 기능 지원)

2) EL 연산자

연산 종류일반 연산자 (자바 문법)EL 연산자 (기호 or 키워드)설명
덧셈 / 뺄셈+, -+, -숫자 또는 문자열 결합
곱셈 / 나눗셈*, /*, divdiv/ 대신
나머지%modmod% 대신
AND 연산&&and논리 곱
OR 연산``or논리 합
NOT 연산!not논리 부정
작다<ltless than
크다>gtgreater than
작거나 같다<=leless than or equal
크거나 같다>=gegreater than or equal
같다==eqequal
다르다!=nenot equal
null 확인value == nullempty valuenull, "", 0길이 등 비어 있으면 true

3) 연산자 우선순위

우선순위기호 / 키워드설명
1[], .프로퍼티 접근, 배열 인덱스 접근
2( )괄호, 우선순위 묶기
3not, !, empty논리 부정, null/빈 값 확인
4*, /, div, %, mod곱셈, 나눗셈, 나머지 연산
5+, -덧셈, 뺄셈
6<, <=, >, >=, lt, le, gt, ge비교 연산 (크다/작다 등)
7==, !=, eq, ne동등 비교
8&&, and논리 AND
9`, or`논리 OR
10? :삼항 연산자 (조건 ? 참 : 거짓)

2. JSP 액션 태그

: JSP 페이지에서 자바 코드를 직접 입력하지 않고, 특정 작업을 수행하는데 사용하는 태그다.
-> 액션 태그의 경우, 웹 브라우저에서 실행되는 것이 아니라 웹 컨테이너에서 실행된다.

웹 브라우저랑 웹 컨테이너랑 뭐가 다른건데?

  • 웹 브라우저
    - HTML, CSS, JS 등 클라이언트 쪽 코드 렌더링.
    - 사용자 컴퓨터(클라이언트)에서 실행된다.
    - 사용가 URL을 입력하면, 서버에 요청한다.

cf) 렌더링
: 코드를 눈에 보이는 화면으로 바꾸는 과정

  • 웹 컨테이너
    - JSP, Servlet 등 서버 쪽 코드 실행.
    - 웹 서버 내부에서 작동된다.
    - 요청 받은 후, JSP/서블릿을 실행하고, 결과 HTML을 반환한다.
구분웹 브라우저웹 컨테이너
위치사용자 PC서버 컴퓨터
하는 일결과 화면 보여줌 (렌더링)동적 웹 페이지 생성 (JSP 실행 등)
이해하는 것HTML, CSS, JSJSP, Servlet, 자바 클래스
예시Chrome, Safari, EdgeTomcat, Jetty, JBoss

cf) 특정작업
: 웹 컨테이너가 직접 다른 페이지 전달, 객체 생성, 값 설정 등을 수행해야하는 서버 측 동작.

3. 표준 액션 태그

: JSP에서 기본으로 제공하는 액션 태그로, 별도의 라이브러리 설치 없이 바로 사용할 수 있다.
-> 웹 컨테이너가 이해할 수 있는 JSP전용 명령어.
=> JSP에서 자주 쓰는 서버 작업을 HTML 태그처럼, 쓸 수 있게 만든 태그.

왜 배워야하냐고
1. 자바 코드를 안 써도, 동적인 서버 작업이 가능하다.
2. 비즈니스 로직은 서블릿과 컨트롤러가 하고, JSP는 결과 출력에 집중하도록 해줌
3. MVC 구조에서 JSP의 역할을 명확히 해준다.

JSP 표준 액션 태그의 한계
| 구분 | 한계 내용 | 설명 |
| --- | --------------- | ------------------------------------------------------------------------- |
| 1️⃣ | 표현력이 제한적 | if, for, else if 같은 복잡한 제어 흐름은 못함 → JSTL이 필요함 |
| 2️⃣ | 유지보수 어려움 | 태그가 많아질수록 중첩 구조가 복잡해지고 가독성 ↓ |
| 3️⃣ | JSP에 종속됨 | <jsp:useBean>, <jsp:forward> 등은 오직 JSP에서만 작동, 다른 MVC 프레임워크에서는 못 씀 |
| 4️⃣ | 유연성 부족 | 자바 코드처럼 조건 분기, 메서드 호출, 복잡한 객체 조작이 불가능함 |
| 5️⃣ | JSTL/EL에 밀림 | EL과 JSTL이 도입되면서 표현은 더 쉬워지고, 코드도 더 직관적으로 됨 → 요즘은 잘 안 씀 |
| 6️⃣ | 서버 의존성 큼 | 모든 작업을 웹 컨테이너에 의존 → 테스트 어려움, 단위 테스트 불가 |

헷갈려할 수도 있어서, 적는 JSP vs JSTL

  • JSP
    : HTML과 자바를 함께 쓸 수 있는 웹페이지 파일 형식
  • JSTL
    : JSP에서 사용할 수 있는 표준 태그 라이브러리(도구 모음)

1) jsp: include 액션 태그

: 다른 페이지를 포함시킬 때, 사용하는 액션 태그

-> inlude지시자와 다르게 include 액션 태그는 런타임 시에 포함된다. 왜냐하면, 다른 JSP 페이지의 실행 결과를 지금 시점에 포함할 때 사용하기 때문이다.

2) jsp.forward 액션 태그

: 다음 페이지 요청을 전달할 때, 사용하는 액션 태그다.
-> 요청을 다른 JSP나 서블릿으로 전달하고, 자신은 응답을 마무리하지 않고 빠진다.
-> 요청을 전달하는 페이지에서 request, response 객체가 함께 전달되며 URL은 변경되지 않는다.

4. JSTL(JSP Standard Tag Libray)

: JSTL은 JSP Standard Tag Library의 약자로, JSP에서 사용하는 커스텀 태그다.

1) JSTL 라이브러리 등록

  • 메이븐 저장소에서 JSTL 라이브러리를 다운로드한다.
  • JSTL 라이브러리는 JSP 페이지에서 taglib 지시자로 선언해야 사용이 가능하다.

2) JSTL 라이브러리 등록

태그 명설명선언문 (<%@ taglib ... %>)
Core Tags변수 선언, URL 처리, 조건문, 반복문 등 기본 로직 처리 태그를 제공<%@ taglib uri="jakarta.tags.core" prefix="c" %>
Formatting Tags숫자, 날짜, 통화 포맷 및 다국어 메시지 처리 등 형식 관련 태그를 제공<%@ taglib uri="jakarta.tags.fmt" prefix="fmt" %>
Function Tagstrim, substring, contains 등 **문자열 함수(유틸리티 함수)**를 제공<%@ taglib uri="jakarta.tags.functions" prefix="fn" %>
XML TagsXML 문서를 파싱하거나 출력할 수 있는 XML 처리용 태그를 제공<%@ taglib uri="jakarta.tags.xml" prefix="x" %>
SQL TagsJSP에서 직접 DB에 접근하고 SQL 실행을 가능하게 하는 SQL 처리 태그를 제공<%@ taglib uri="jakarta.tags.sql" prefix="sql" %>
profile
메가우쿨렐레는 나의 것

0개의 댓글