ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Servlet / JSP ] 8. JSP el, jstl 태그
    스타터스 백엔드 3기 2023. 1. 9. 17:46

    하루입니다.

     


     

    • el 태그에는 ${ 문자열, 실수, 정수, true/false, null }만 가능하다.
    • 왜냐면 el태그의 목적은 새로운 값을 만드는 것이 아닌 이미 만들어진 값을 간단하게 들고 오는 것이기 때문이다.

     

    bean

    • jsp에서 사용하는 <jsp:useBean> : 자바 클래스 하나 . 그런데 규칙이 많삼. 기본 생성자 가지고, 패키지 가지고, setter getter 가지고 ... 

     

    el로 삼항연산자 (!empty 이용)

    ${!empty paramValues.lunch[0] ? paramValues.lunch[0] : '없음'} <br />

     

     


     

    pageContext.setAttribute()로 속성을 부여하면, jsp태그에서도 el태그에서도 사용 가능하다.

    • pageContext, request, session, application에 각각 잡았다.
    • jsp의 변수는 el에서 바로 사용 불가하므로, pageContext에 담는다.

     




    scopetest1에서 조회

    scopetest2에서 조회(동브라우저) scopetest2에서 조회(다른 브라우저)

     

     

     

     

    만약 setAttribute에 'a'라는 값만 담겨있다면 어떡할까? (el의 scope)

    • <jsp: > 내장객체를 사용한다면 request.getAttriburte()와 같이 앞에 scope를 적어주기에 상관 없다.
    • 하지만 el은 ${ a} 와 같이 앞에 scope를 적지 않는다.
    • 따로 XXXscope를 붙여야 한다. 
    • jsp 내장객체와 다르게 pageScope, requestScope, sessionScope, applicationScope와 같이 뒤에 Scope를 붙여야 한다.

     

     

     

    현재 jsp 주소 아는 법 ${pageContext.request.requestURI }

    • forward로 인해 결과값은 scopetest2.jsp가 출력되지만 URI에는 scopetest1이 보인다.
    • 이 경우,  ${pageContext.request.requestURI }를 사용하면 현재 jsp 주소를 알 수 있다.
    • el 전달 변수 해석 출력 순서 : pageScope - request - request - application

     

     


     

     

    아정리할거너무많아!!!!!!!!!

     

    내가 궁금한 점 : 왜 href로 받으면 request가 null로 뜨나요?

    • <jsp:forward page="scopetest2.jsp"></jsp:forward>
    • forward로 보냈을 때는 request로 객체를 받을 수 있었다. (상단 사진들 참고)
    • <a href="scopetest2.jsp">링크이동</a>
    • 그런데 왜 href로 보낼 때는 request로 객체를 받을 수 없을까?

     

    왜냐면!!!!!!!!!!!!! 새로운 요청 객체가 생기니까요!!!!!!!!!!!!!!!

     

      • 생각해보자. 서블릿의 포워드 방법 중 서블릿으로 요청객체를 넘기는 것은 RequestDispatcher뿐이다. 
      • 나머지(location, redirect)의 이동 방법은 클라이언트를 거쳐 다시 요청하는 것이다.
      • 즉, 이미 생성된 요청객체를 넘기는 것이 아닌(RequestDispatcher) 새로운 요청을 하기 때문에 전달되는 객체에 값이 없는 거다.

     

     

     


     

     

     

    action 태그와 el의 비교

     

     

     


     

     

    EL의 collection 

    1. array[] 사용하기

    • 앞서 얘기했듯, jsp의 변수는 el에 바로 담을 수 없기에 pageContext에 먼저 담는다.
    • 문자열끼리 더하기 위해서는 += 를 사용해야 한다.
    • colors[ ] 배열에서 꺼낸 값은 String이므로, String 메소드를 사용할 수 있다.

     

     

    2. ArrayList

    • ${list[0] } 은 해당 객체의 toString()을 반환한다.

     

     

    3. HashMap

    • 한글이라서 colormap.빨강 이렇게는 못 적는다. (꽤나 억울해요)
    • colormap.engcolor는 가능하다.
    • 여기서도 pageContext에 set 해줘야 한다!!

     

     


     

     

    커스텀태그

    https://mvnrepository.com/


    JSTL을 사용하기 위해 maven jar 사용

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    반드시 사용해야 한다!!

    앞의 c는 접두사이다.
    <c:forEach></c:forEach> 이런식으로 사용한다.

     

     

     

     

     

    Core 태그 라이브러리

    1. <c:set>


    < 
    c:set var="변수이름" value="변수값"  (scope="scope중 하나")  />


     

     

     

    2. <c:remove>


    < c:remove
    var="변수이름"  />

    var는 ${ } 안 사용한다. 바로 이름 때려박으면 됨.


     

     

     

    3. <c:out>


    < c:out value="${변수값 }"   />





    결과

     

     

     

    4. <c:if>

    <c:if test="${조건식 }" var="변수이름" scope="scope 중 하나"



    결과 (!empty인 경우, empty인 경우)




     

     

     

    5. <c:choose>  <c:when>  <c:otherwise> 


    <c:set var="sum" value="${100 + 200 }" />
    <c:choose>
         <c:when test="조건식1">
              본문내용
         </c:when>
         <c:otherwise>
              본문내용
         </c:otherwise>
    </c:choose>









     

     

     

    6. <c:foreach>


    <c:foreach    var="변수 이름"    items="반복할 객체 이름"   begin="시작값"    end="마지막값"   
                          step="증가값"   varStatus="반복상태속성이름">
          본문내용
    </c:foreach>









    ${loop.first }        ${loop.last}        ${loop.current}      ${loop.count}
     







     

     

     

    html5 상단부 설정하는 법 (워크스페이스에만 설정됨)



    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <script src="${pageContext.request.contextPath}/js/jquery-3.6.1.min.js" ></script>
    <script> $(document).ready(function(){ }); </script>







     

     

     

     

     

     


    jsptest 프로젝트 - el - scopetest, eltest, collection / jstl

     

     

Designed by Tistory.