web( jsp, servlet )/jsp

JSTL 과 EL(Expression Language)으로 다르게 "출력"해보자

읽히는 블로그 2024. 7. 24. 22:54

▤ 목차

     

     

     

    ✔ EL(Expression Language)

     

    jsp페이지에서 데이터를 출력하고 조작하는 간편한 방법을 제공한다.

     

    EL은 주로 jsp 코드 내에서 사용되며 다양한 내장 객체를 통해 데이터를 접근하고 제어할 수 있다.

    jsp 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있다. 

     

     

    ⌨ 기본 개념

    1. 변수 접근

     el을 사용하여 jsp 페이지의 범위(scope)에 있는 변수에 쉽게 접근할 수 있다.

    예를 들어, ${user.name}으로 사용하면 user 객체에 name 속성에 접근할수 있다.

     

    2. 컬렉션 접근

    배열이나 리스트와 같은 컬렉션 객체의 요소에 접근할 때 유용하다.

    ${employees[0].name}과 같이 인덱스를 통해 접근할 수 있다.

     

    3. 속성 접근

    HTML 요소의속성에 접근이 가능하다.

    <input type="text" value = "${user.name}"/>과 같이 사용이 가능하다.  

     

     

    📎주요 내장객체

    내장 객체 설명
    ${pageScope} 현재 페이지 범위에 있는 객체들에 접근할 수 있다. 
    ${pageScope.user} 와 같이 사용하여 현재 페이지의 user 객체에 접근할 수 있다.
    ${requestScope} http 요청 범위에 있는 객체들에 접근할 수 있다.
    ${requestScope.paramName}과 같이 사용하여 HTTP 요청의 매개변수에 접근할 수 있다. 
    ${sessionScope} 현재 사용자 세션 범위에 있는 객체들에 접근할 수 있다.
    ${sessionScope.user}와 같이 사용하여 사용자 세션에 저장된 user 객체에 접근할 수 있다. 
    ${applicationScope} 웹 애플리케이션 범위에 있는 객체들에 접근할 수 있다.
    ${applicationScope.contexxtParam}과 같이 사용하여 웹 애플리케이션 초기화 매개변수에 접근할 수 있다.
    ${parm} http 요처어 매개변수에 접근할 수 있다.
    ${param.paramName}과 같이 사용하여 http 요청의 특정 매개변수에 접근할 수 있다. 
    ${header} http 요청 헤더에 접근할 수 있다.
    ${header.userAgent}와 같이 사용하여 http 요청의 User-Agent 헤더에 접근할 수 있다.

     

     

     

     

    👏 중요

    데이터를 "출력"하는데 유용하다. Jsp 코드를 더욱 간결하고읽기 쉽게 만들어 준다.

    프론트엔트와 백엔드 로직을 효과적으로 분리하고 웹 애플리케이션의 유지보수성을 향상시킬 수 있다. 

    <%= %> 과 같은 표현식을 사용하지 않고 간편하게 출력하기 위한 도구이다.

     

     

     

     


     

     

     

    ✔  jsp scriptlet  VS  jsp 표현식(Expression) VS EL

     

    요즘에는 EL이나 JSTL 을 많이 사용하여 더욱 간결한 코드를 작성한다.

     

    💻 코드로 보기

     

     

     

     

     


     

     

     

    ✔ 여러 사용(연산자, 내장 객체)

     

    🔦 isELIgnored

    페이지 지시자 <%@ page 속성 = 값 %>이 있다. 

    페이지 지시자의 속성은 많은데( import, contentType, errorPage.. 등) el과 관련된 페이지 지시자도 있다.


    <%@ page isELIgnored = "false"%>

    이게 기본값인데 만약, 값은 true로 바꿔놓는다면 해당 페이지에 el은 무시된다. (문자 그대로 출력된다.)

    기본값이기에 따로 적지않아도 된다.

     

    👏 페이지 정의 부분?

    jsp에서는 페이지 지시자가 있다. jsp는 servlet에서 service부분이라고 생각하면 편하다.

    , 주로 사용하는 페이지 지시자에는

     - include 지시자

    다른 파일을 포함하여 현재 페이지에 삽입할 때 사용된다.

    <%@ include file="파일명"%> 해당 파일에 html이 살아서 오는 것이다. 즉, 해당 코드가 그대로 삽입된다고 보면된다.

    (  =>  <jsp:include page=""/> : 이 경우는 html이 모두 적용이 되어 들어온다고 보면된다.) 

     

    - taglib 지시자

    사용자 정의 태그 라이브러리를 정의할 때 사용된다.

    <%@ taglib uri=" -- " prefix="접두사"%>

     : 곧 배울 사용해볼 것이다.

     

     

    📎\${ -- } : 하나의 el 무시하기

     

     

    \${ }이렇게 el태그 앞쪽에 \ 를 붙이면 el 그대로 출력된다.

     

     

     

    👏 연산자 사용

    연산자 사용이 가능하다.

     

     

    관계 연산자, 논리 연산자, 삼항 연산자 등 사용이 가능하다.

    ** div로 사용은 가능한데 eclipse에서 지원을 안해서 에러표시가 나오는것 같다.

    결과는 잘 나온다.

     

    📎내장 객체 ( 생존 범위 관련 )

     

     

    이때, requestScope는 많이 사용되기때문에 객체를 붙이지 않고 사용할 수 있다.

    el에서 .은 배열을 의미한다.

     

     

     

    request, session, application은 각각 다른 범위(scope)에서 데이터를 저장하고 공유한다.

      설명
    request http 요청마다 생성되어 해당 요청에 대한 정보를 담고있다.
    클라이언트가 서버에 요청을 보낼때마다 새로운 요청(request) 객체가 생성된다.
    하나의 http 요청 내에서 유효하며 해당 요청과 관련된 모든 jsp 페이지 및 서블릿에서 접근할 수 있다.
    session 객체는 특정 사용자의 세션을 관리한다. 동일한 사용자가 여러 페이지 간에 데이터를 공유할 수있도록 한다. 즉, 한 사용자의 모든 http 요청에 걸쳐 일관된 데이터를 유지할 수 있다. 
    ex) 장바구니 관리, 로그인 상태 관
    application 웹 애플리케이션 전체에 유일한 객체이다. 모든 사용자가 공유할 수 있는 데이터를 저장한다.
    이때, 범위는 웹 애플리케이션의 생명 주기 동안 유지된다.

     

     

    📎내장 객체 (컬렉션 객체)

     

     

    이렇게 el로 출력하면된다. el에서 .은 배열을 의미한다.

     

     


     

     

    ✔ jstl (javaServer Pages Standard Tag Library)

    jsp에서 자주 사용되는 태그들의 모음이다.

    코드의 가독성을 높이고 재사용 가능한 컴포넌트를 제공하는 데 목적을 둔다.

    xml기반의 태그 라이브러리이다.

    jsp 페이지에서 반복문, 조건문, 데이터 포맷팅 등을 간편하게 할 수 있다.

    HTML 태그 형태로 직관적인 코드를 지원하는 라이브러리이다.

    일반적으로 el과 함께 사용한다.

     

    📌 주요 태그 라이브러리

    • Core 태그 ('<c: >') 
    <c:out> 텍스트 출력을 담당하며, html 인코딩을 자동으로 처리한다.
    <c:set> 변수를 설정하거나 속성 값을 저장할 때 사용한다
    <c:remove> 변수나 속성을 제거할때 사용한다.
    <c:if> if 문으로 조건문을 표현한다.
    <c:choose> java의 switch-case문과 비슷한 역할을 한다. 여러 주건중 하나를 선택할 때 사용한다.
    <c:when> 태그의 조건을 지정하고 조건이 true인 경우 해당 블록의 내용이 실행된다
    <c:otherwise> 모든 when 조건이 false일 경우 실행되는 블록이다.
    <c:forEach> 반복문을 통해 해당 컬렉션을순회한다. 
    <c:import> 외부 자원을 가져오거나 다른 jsp 페이지를 포함한다.

     

     

     

    • Formatting 태그 ('<fmt: >') 
    <fmt:formatDate> 날짜 형식을 지정하여 날짜 데이터를 포맷팅한다.
    <fmt:formatNumber> 숫자 형식을 지정하여 숙자 데이터를 포맷팅한다.
    <fmt:message> 다국어 지원을 위해 리소스 번들(properties 파일)에서 메시지를 가져온다.

     

     

    • SQL 태그 (''<sql: >) 

    DB와 관련된 작업을 수행할때 사용한다.

    주로 데이터베이스에서 데이터를 조회하고 수정하는 기능을 제공한다.

     

     

    💻 코드로 보기

     

     

    👏 추가 설명

    숫자 : <fmt:formatNumber value="12345.67" pattern="#,##0.0"/><br>
    숫자 : <fmt:formatNumber value="12345.67" type="currency"/><br>

     

     

    #와 0의 차이

    • # : 숫자가 있으면 숫자를 표시하고 없으면 생략.
    • 0 : 숫자가 있든 없든 항상 표시

     

    type 속성

    number, currency, percent 말고도 더 있지만 주로 사용된다.

    number 일반 숫자 형식 포맷팅
    currency 통화 형식으로 포맷팅
    percent 백분율 형식으로 포맷팅

     

     

     


     

     

    😊정리

    EL과 JSTL을 배웠다.

    JSP 표현식이 익숙해질만하니 새로운 출력방법을 배웠다.

    개념적으로 어렵다기 보다 익숙하지 않아서인지 헷갈린다.

    이 또한 자주 사용해야겠단 생각을 한다.

    사용하지 않으면 금방 잊어버릴 것 같은 라이브러리이다. 

    "출력"과 관련된 작업이다.