-
[ 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
'스타터스 백엔드 3기' 카테고리의 다른 글
[ Spring ] 3. 스프링 AOP 관점 지향 프로그래밍 (필터?) (0) 2023.01.12 [ Servlet / JSP ] 9. AJAX (0) 2023.01.10 [ Servlet / JSP ] 7. JSP action tag (0) 2023.01.09 유데미 스타터스 취업 부트캠프 3기 - 백엔드 7주차 (0) 2023.01.06 [ Servlet / JSP ] 5. 필터 (0) 2023.01.05