다연이네

[days08] c태그들 (c:if, c:choose, c:forEach, c:forTokens, c:url, c:redirect c:out, c:catch) 본문

JSP

[days08] c태그들 (c:if, c:choose, c:forEach, c:forTokens, c:url, c:redirect c:out, c:catch)

 다연  2021. 1. 5. 13:49
반응형

 c:if 

흐름 제어 태그

<c:if test="조건식"></c:if>
<c:if test="true"></c:if> true면 실행
<c:if test="어떤 문자열 "></c:if> 항상 false
<c:if test="${EL 표현식 } "></c:if> EL표현식의 참거짓에 따라
<c:if test="<%= 표현식%> "></c:if> 표현식의 참거짓에 따라

주의

<c:if test="어떤 문자열 "></c:if> 항상 false

<c:if test="${param.name}">  
    name: ${param.name }<br>
 </c:if>
 <!-- 그냥 문자열일 경우 항상 false (파라미터 념겨줘도 안뜸) -->

 

c:if 의 var 값은 그 조건의 결과값(T/F)을 담는다.

<c:if test="${param.age ge 20 }" scope="page" var="result">
    20살 이상이다.<br>
 </c:if>
 
 result =  ${result } <br> <!-- 위 조건의 결과값(true/false 담음, 쓸 일은 그닥) -->

 

- 파라미터 값 홀 짝 판단하기

 <c:set var="num" value="${param.num }"></c:set>
 <c:if test="${ num mod 2 eq 0 }">
 짝수
 </c:if>
 <c:if test="${ num mod 2 ne 0 }">
 홀수
 </c:if>

 

 c:choose 

java의 switch case문

 

- 국어점수 수우미양가 판단하기

<form action="">
  국어 점수 : <input type="text" name="kor" value="${param.kor }" />
</form>
<p id="demo">
<c:choose>
 <c:when test="${90<= param.kor && param.kor<=100 }">수</c:when>
 <c:when test="${80<= param.kor && param.kor<90 }">우</c:when>
 <c:when test="${70<= param.kor && param.kor<80 }">미</c:when>
 <c:when test="${60 le param.kor and param.kor < 70 }">양</c:when>
 <c:otherwise>가</c:otherwise>
</c:choose>
</p>

 

 c:forEach 

배열, 컬렉션, 맵에 저장되어 있는 값들을 순차적으로 처리할 때 사용

 

-맵 출력

<%
Map<String, String> map = new HashMap<>();
map.put("id","admin"); 
map.put("addr","seoul");
%>

<c:forEach var="entry" items="<%=map %>">
<li>${entry.key }-${entry.value }</li>
</c:forEach>

-배열(을 변수에 담기)

 배열 길이 출력

<%@ page import="days07.ELTest"%>

<c:set var="m" value="<%=new int[] {1,3,5,4,2} %>"></c:set>
배열 크기: ${fn:length(m) }<br> <!-- fn 지시자 추가 필요 -->
배열 크기: ${ELTest.getLength(m) }<br> <!-- 어제만든 메소드 -->

c:forEach의 varStatus: 반복할때 상태값 저장

<c:forEach items="${m}" var="n" varStatus="status"> 
${status.first} - ${status.last} - m[${status.index}] - ${status.count} : ${n }<br>
</c:forEach>

${status.first} 첫번째 값인지 물음

${status.last} 마지막 값인지 물음

${status.index} 위치값 반환 0, 1, 2, ...

${status.count} 앞부터 1, 2, 3, ..

 

-sum 변수를 선언 후 1~10=55 출력

1번방법

<c:set var="sum" value="0"></c:set>
<c:forEach begin="1" end="10" step="1" var="i">
<c:if test="${i ne 10 }">
${i}+
</c:if>
<c:if test="${i eq 10 }">
${i}
</c:if>
<c:set var="sum" value="${sum + i }"></c:set>
</c:forEach>
=${sum }

2번방법

<c:set var="sum" value="0"></c:set>
<c:forEach begin="1" end="10" step="1" var="i">
${i} 
 <c:if test="${i lt 10 }">+</c:if>
<c:set var="sum" value="${sum + i }"></c:set>
</c:forEach>
=${sum }

3번방법(권장)

<c:set var="sum" value="0"></c:set>
<c:forEach begin="1" end="10" step="1" var="i">
${i += (i eq 10 ? "":"+" )}
<c:set var="sum" value="${sum + i }"></c:set>
</c:forEach>
=${sum }
</body>

 

 

 

 c:forTokens 

마치 split 하듯이 사용

<c:forTokens items="빨간색, 녹색, 파란색" delims="," var="color">
	${color }<br> <!-- 마치 split하듯이 사용 (잘쓰진 않음) -->
</c:forTokens>

 

 

 

URL 처리 태그

- c:url 태그
- c:redirect 태그

 

 <%
    String url = "http://search.daum.net/search?w=blog";
    response.sendRedirect(url);
 %>

해당 코딩이 있으면 해당 url로 페이지가 열린다. 

 

강사님은 이렇게 많이 사용하지만, c:를 사용하는 방법도 알고있자.

<c:url var="searchUrl" value="http://search.daum.net/search"></c:url>
 <c:redirect url="${searchUrl }">
   <c:param name="w" value="blog"></c:param>
   <c:param name="q" value="test"></c:param>
 </c:redirect>

 

 c:out 

<%
   String name = "<b>admin</b>";
   //		&lt;b&gt;admin&lt;/b%gt; 문자변환이 이루어진 후 출력하는게 c:out (태그로 인식 안함)

%>
name: <%=name %><br>
name: <c:out value="<%=name %>"></c:out><br>
<!-- c:out에 담으면 <b>문자가 그대로 출력 -->
name: <c:out value="<%=name %>" escapeXml="false"></c:out><br>
name: <c:out value="<%=name %>" escapeXml="true" default="value속성값x 출력할 기본값"></c:out><br>

 

파라미터를 통해 파일 읽기

<%
    FileReader reader = null;
    try{
    	//http://localhost/jspPro/days08/ex04_02.jsp?path=days07/ex01.jsp
    	//getServletContext().getRealPath(path) 기억
        String path = request.getParameter("path");
        reader = new FileReader( getServletContext().getRealPath(path)  );
 %>
    <pre>
        소스 코드 = <%= path %>
        <br>
        <c:out value="<%= reader %>" escapeXml="true"></c:out>
    </pre>
 <%       
    }catch(Exception e){
 %>
     에러 : <%= e.getMessage() %>
 <%       
    }finally{
       if( reader!= null){
          try{
          reader.close();
          }catch(IOException ex){}
       }
    }
 %>

파라미터 입력시
입력하지 않은 경우

 

 c:catch 

 

반응형
Comments