JSTL

5_mi·2021년 3월 11일
0

작성이유

  • 업무를 하다보니 쓰던것만 쓰고, 어느새 원리는 까먹고 그냥 넘어가기 바빴다.
    오늘 질문을 받았는데 내가 명확히 남에게 설명해주지 못하는것을 보고 다시 한번 정리하자 싶어 작성한다.

JSTL

-자바서버 표준 태그 라이브러리, JavaServer Pages(jsp) Standard Tag Library
Java EE 기반 웹 어플리케이션 개발 플랫폼을 위한 컴포넌트의 모음이다.

JSTL CORE

태그명 설명
<c:set>지정된 변수명에 값을 할당<c:set var="변수명" value="설정값" target="객체" property="값" scope="범위" /> var는 저장할 변수, target은 설정할 프로퍼티에 대한 객체, property 값을 설정한 객체의 프로퍼티, scope 유효범위
<c:out>값을 출력<c:out value="출력값" default="기본값" escapeXml="true or false" /> value가 null일 경우 default값 사용. escapeXml은 false가 기본이고, <,>등 특수기호의 출력 형태 설정시 사용
<c:if>조건식에 해당하는 블럭 사용될 scope 설정<c:if test="조건" var="변수명" scope="범위" /> scope는 var 속성에 지정한 변수의 범위 설정
<c:forEachfor문<c:forEach items="객체명" begin="시작인덱스" end="끝 인덱스" step="증감식" var="변수명" varStatus="상태변수" > varStatus : 반복의 상태를 갖게되는 변수. 예) <c:forEach var="i" begin="0" end="10"> , <c:forEach var="{board}" items="boardList"><c:outvalue="{boardList}"> <c:out value="{board.title}">
<c:choose>switch 문<c:choose> <c:when test="조건"> </c:when><c:otherwise></c:otherwise> </c:choose>
<c:when>switch 문의 case
<c:otherwise>switch문의 defualt
<c:param>기본형<c:param name="파라미터명" value="파라미터 값" />
<c:url>쿼리 파라미터로 부터 url 생성<c:url var="생성한 url이 저장될 변수명" value="생성할 url" scope ="변수의 공유 범위" />
<c:import url="/exam1.jsp">
	<c:param name="src1" value="www.naver.com">
	<c:param name="src2" value="www.daum.net">
</c:import>

<%-- exam1.jsp 파일에서 <a:href="${param.sr1}"/> 로 사용가능.

	servlet으로 데이터 넘기는 경우, 
    <c:import url="test.do">
    
    Controller 단에서, @RequestMapping("test.do")
    public ModelAndView test(@RequestParam String src1, @RequestParam String src2) throws Exception {
    	... 
        ModelAndView mv = new ModelAndView();
        mv.addObject("src1", src1);
        mv.addObject("src2", src2);
        mv.setViewName("exam1.jsp");
        return mv;
        
    }
--%>

EL

-Expression Language , jsp 2.0버젼에서 추가된 스크립트 언어.

  • jsp 페이지내에서 <% %>로 자바코드를 바로 사용하지 않고,${expr}로 바로 사용, 로직을 내장하는 효율적인 방법을 제공한다.
    예) <%= student %> 를 ${student}로 바로 접근.
    예) jstl의 core를 이용하여 <%= if %> 를 <c:if> , <%= for%>를 <c:forEach>로 사용가능.

EL 내장객체

객체명 설명
${pageContext}jsp page 기본 객체
${pageScope}pageContext 기본객체에 저장된 <속성,값>매핑을 저장한 map 객체
${requestScope}request객체에 저장된 속성의 <속성,값>매핑을 저장한 map객체
${sessionScope}Session객체에 저장된 속성의 <속성,값>매핑을 저장한 map객체
${applicationScope}application 객체에 저장된 속성의 <속성,값>매핑을 저장한 map객체
${param}요청 파라미터의 <parameter이름, 값> 매핑을 저장한 map 객체, 값의 타입은 String, request.getParameter(이름)과 결과가 동일하다.
${paramValues}요청 파라미터의 <parameter이름, 값배열> 매핑을 저장한 map 객체, 값의 타입은 String[], request.getParameterValues(이름)과 결과가 동일하다.
${header}요청 정보의 <헤더이름, 값> 매핑을 저장한 Map객체, request.getHeader("이름") 과 결과가 동일.
${cookie}<쿠키이름, Cookie> Map. request.getCookies()로 구한 쿠키배열로부터 매핑을 생성.
${initParam}jsp 초기 파라미터를 가져오기 위한 객체, <이름,값>으로 매핑. application.getInitParameter("이름") 과 결과가 동일
	<%@ page contentType = "text/html; charset=utf-8" %>
    <%
    	request.setAttribute("name", "홍길동");
    %>
    <html>
    <head></head>
    <body>
    	<%-- pageContext.getRequest().getRequestURI()-- %>
    	요청 uri : ${pageContext.request.requestURI} <br>
        
        <%-- request.getAttribute("name")-- %>
        request의 name 속성 : ${requestScope.name} <br>
        
        <%-- request.getParameter("code") -- %>
        code 파라미터 : ${param.code} <br>
    </body>
    </html>

사용방법

jsp header에 라이브러리 사용하겠다는 추가 해줘야함.
<% @taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<% @taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

작동 순서

JAVA > JSTL > HTML > JAVASCRIPT

JS에서는 JSTL 사용 가능.
JSTL에서는 JAVASCRIPT 사용 불가.

var list = new Array(); 

<c:foreach items="${TestList}" var="item"> 
    list.push("${item.name}");
</c:foreach>
profile
🔵💻🍻👏✈

0개의 댓글

Powered by GraphCDN, the GraphQL CDN