본문 바로가기
Full-Stack/JSP

JSP(3)

by IT것저것 2024. 5. 6.

JSTL(JSP Standard Tag Library) 사용하기

 

 

<%
    String ctxPath = request.getContextPath();
    //    /JSPServletBegin 

    String name = (String)request.getAttribute("name");
 	String school = (String)request.getAttribute("school");
 	String color = (String)request.getAttribute("color");
 	String foodes = (String)request.getAttribute("foodes");
    String[] arr_food = (String[])request.getAttribute("arr_food");
%>

 

 

* request.getAttribute()

- Java Servlet에서 사용되는 메서드

- 클라이언트가 HTTP 요청으로 전달한 데이터를 받아오거나 서버에서 처리한 결과를 클라이언트로 전달할 때 주로 사용된

HTTP 요청(request)에서 속성(Attribute) 값을 가져온다

일반적으로 JSP나 Servlet에서 클라이언트로부터 전달된 데이터를 받아오거나, 서버에서 생성된 데이터를 클라이언트로 전달할 때 사용된다

클라이언트로부터 전달된 데이터는 주로 HTTP 요청의 파라미터로 전달되며, 서버에서 생성된 데이터는 주로 HTTP 요청의 파라미터로 전달되며, 서버에서 생성된 데이터는 주로 HTTP 요청, 응답, 서블릿 컨텍스트등에서 사용된다

 

getAttribute() 메서드는 파라미터로 전달된 이름에 해당하는 속성 값을 반환한다

이속성 값은 Object 형태로 반환되기 때문에 필요한 형변환을 통해 원하는 형태로 사용할 수 있다

해당 이름의 속성이 존재하지 않으면 null로 반환된다 

 

 

1) 스크립틀릿을 사용한 것 

<ol>
			<li>성명 : <%= name%></li>
			<li>학력 : <%= school%></li>
			<li>색상 : <span style="display: inline-block; width: 20px; height: 20px; border-radius: 50%; background-color: <%= color%>;"></span></li>
			<li>음식 : <%--  <%= foodes%>  --%>  
			   <%  for(int i=0; i<arr_food.length; i++) { %>
				     
			   <%  } %>	   
			</li>
		</ol>

 

 

2) EL 및 JSTL(JSP Standard Tag Library) 을 사용한 것

	<ol>
			<li>성명 : ${requestScope.name}</li>
			<li>학력 : ${requestScope.school}</li>
			<li>색상 : <span style="display: inline-block; width: 20px; height: 20px; border-radius: 50%; background-color: ${requestScope.color};"></span></li>
			<li>음식 :  
			    <c:forEach var="food_img" items="${requestScope.arr_food}">
			                         <%-- items="${ }" 에 들어오는 것은 배열 또는 List 이다. --%>
			                         <%-- 반복의 회수는 배열길이 또는 List 의 size 만큼 반복된다. --%>
			        <img src="<%= ctxPath%>/chap04_JSTL/images/${food_img}" width="76.5px" height="57px" />  
			    </c:forEach>
			</li>
		</ol>

 

 

** EL(Expression Language)을 사용하여 현재 페이지의 요청(request) 스코프(request scope)에서 'name'이라는 속성(attribute) 값을 가져오는 것이다

 

* EL을 사용하면 보다 간결하고 가독성이 좋은 코드를 작성할 수 있으며, JSP 스코프에 저장된 데이터를 쉽게 접근 할 수 있다

 

 

* 스코프(scope) - 프로그래밍에서 변수나 객체나 유효한 범위를 나타낸다 특히, 서블릿이나 JSP와 같은 웹 애플리케이션에서는 다양한 종류의 스코프가 존재한다

더보기

✔️ 페이지 스코프(Page Scope): 페이지 스코프에 저장된 변수나 객체는 해당 JSP 페이지 내에서만 유효합니다.

즉, 같은 페이지 내에서만 접근 가능합니다.


✔️ 요청 스코프(Request Scope): 요청 스코프에 저장된 변수나 객체는 한 번의 HTTP 요청과 그에 대한 응답 사이에서만 유효합니다.

따라서 같은 요청 내에서만 접근 가능합니다.

 

✔️ 세션 스코프(Session Scope): 세션 스코프에 저장된 변수나 객체는 특정 사용자와 관련된 세션의 생명주기 동안 유효합니다. 사용자가 웹 애플리케이션과 상호 작용하는 동안에만 접근 가능합니다.

 

✔️ 애플리케이션 스코프(Application Scope): 애플리케이션 스코프에 저장된 변수나 객체는 웹 애플리케이션의 생명주기 동안 유효합니다. 따라서 웹 애플리케이션이 실행되는 동안에만 접근 가능합니다.

 

 

 - 변수나 객체가 어떤 스코프에 저장되어 있는지에 따라 해당 변수나 객체에 접근할 수 있는 범위가 결정되며, 이러한 범위를 통해 변수나 객체의 생존 기간을 제어하고 데이터를 효율적으로 관리할 수 있습니다.

 

 

✅ 전송되어져 온 값을 if를 사용하여 비교한 결과물 출력하기

 

▪️ 같을 때

<c:if test="${param.first eq param.second}">
		${param.first} 와 ${param.second} 은 <span style="color: blue;"> 같습니다 </span>
	</c:if>

 

 

 

* else if 가 없을 때는 (같지 않을 때는)

	
	<c:if test="${param.first ne param.second}">
	${param.first} 와 ${param.second} 은 <span style="color: red;"> 같지 않습니다 </span>
	</c:if>
	
	<hr style="border: solid 1px blue; margin: 20px 0;">
	
	<c:if test="${param.first == param.second}">
	${param.first} 와 ${param.second} 은 <span style="color: red;"> 같지 않습니다 </span>
	</c:if>
	
		<c:if test="${param.first != param.second}">
	${param.first}와 ${param.second} 은 <span style="color: red;"> 같지 않습니다 </span>
	</c:if>

 

 

	<c:if test="${empty param.third }">
		세번째 입력란은 <span style="background-color: black; color: yellow; "> 입력하지 않으셨습니다 .</span> 
	</c:if>
	
	<c:if test="${not empty param.third }">
		세번째 입력란은 <span style="background-color: green; color: yellow; "> 입력하셨습니다.</span> 
	</c:if>
	
		<c:if test="${!empty param.third }">
		세번째 입력란은 <span style="background-color: blue; color: yellow; "> 입력하셨습니다.</span> 
	</c:if>

   

<c:if>는 자바의 if문과 비슷한 기능을 제공합니다.

단지 자바는 if ~ else를 사용하여 여러 가지 중에 하나를 선택적으로 수행할 수 있는 기능을 제공하는 반면 if 태그는 if만 제공됩니다.

<c:if test="조건식">

 조건이 참일 경우 실행할 문장

</c:if>

 

 

 

*fn은 함수

 

* <c:set> 태그는 JSTL에서 변수를 선언하는데 사용된다. 이 태그를 사용하여 변수를 정의하고 값을 할당할 수 있다

<c:set var="jubun" value="${param.jubun}"/>

var = jubun 

➡️ 변수의 이름을 나타낸다 변수의 이름은 jubun이다

 

value = '${param.jubun}'은 변수에 할당할 값이다

${param.jubun}은 HTTP 요청의 파라미터 중 이름이 jubun인 값을 가져온다

따라서 이 코드는 jubun이라는 변수에 http 요청에서 받은 주민등록번호를 할당한다

 

 

 

choose 를 사용하여 전송되어져온 주민번호를 가지고 성별을 파악한 결과물 출력하기

 

<body>
<!-- else가 없다  -->


	<c:set var="jubun" value="${param.jubun}"/>
<!-- 이 jubun이 value="${param.jubun} 입력된 값  -->
	<c:set  var= "gender" value="${fn:substring(jubun,7,8)  }"></c:set>
	<!-- jubun,7,8 7번째 인덱스부터 8번째 인덱스 앞까지 한글자를 나타냄  -->
	주민번호 : ${jubun } <br>
	<c:choose>
		<c:when test="${gender eq '2' or  gender eq '4' }">
		여자입니다 <br>
		</c:when>
	<%--
	<c:when test="${gender eq '1' or  gender eq '2' }">
		남자입니다 <br>
		</c:when>
	 --%>
	 
	 <c:otherwise>
	 남자입니다 <br>
	 
	 
	 </c:otherwise>
	
	</c:choose>
</body>

 

 

 

반복문

<!-- begin="1" end="6"   -->
		<c:forEach var="i" begin="1" end="6">
			<h${i}>반복문 연습</h${i}>
		
		</c:forEach>

 

 

 

forTokens 를 이용하여 친구이름 출력하기, split 함수를 이용하여 친구이름 출력하기

 

for Token는 단일 문자열에서 여러 구분자를 사용해 토큰을 추출할 때 유용하며 split은 비교적 간단한 구분자 사용 시 배열로 쉽게 변환할 수 있다

empty와 not empty 키워드를 사용하여 조건을 검사하고 이를 기반으로 사용자에게 메시지를 표시하거나 데이터를 렌더링 할 수 있다

 

* empty 연산자 

변수가 null인지 빈 문자열("")인지, 빈 컬렉션(ex. 리스트나 맵이 항목 없이 비어있는 경우)인지 또는 빈 배열인지를 검사한다

즉, 변수에 값이 없거나 사용할 수 없는 상태를 확인할 때 사용한다

더보기

<c:if test="${empty list}">
    <p>리스트에 아무 항목도 없습니다.</p>
</c:if>

 -> list가 비어있으면 메시지를 표시한다 

 

 

* not empty 연산자 :  변수에 값이 있거나 비어있지 않을 때 true로 반환한다

이를 사용하여 값이 존재하는 경우에 특정 작업을 수행할 수 있

 

더보기

<c:if test="${not empty list}">
    <p>리스트에 항목이 존재합니다.</p>
</c:if>

--> list에 하나 이상의 항목이 있으면 메시지를 표시한다

 

**  사용자 입력을 검사하거나 데이터베이스에서 가져온 정보가 있는 지를 확인하는 등의 상황에 유용하게 쓰인다

<c:if test="${empty requestScope.friend_name_2 }">
	<div>
		<span style="color: red;">아무것도 하기 싫어요 ~ </span>
	</div>
</c:if>

<c:if test="${not empty requestScope.friend_name_2}">
	<div>
		<ol>
			<c:forTokens var="name" items="${requestScope.friend_name_2 }" delims=",./">
				<%-- forTokens 에서 items="${}" 에 들어오는 것은 배열이나 List가 아닌 하나의 문자열이 들어온다. --%>
				<%--문자열을 , 또는 . 또는 / 로 잘라서 배열로 만들어준다 --%>
			<li>${name }</li>
			</c:forTokens>
		</ol>
		
	</div>

</c:if>

 

<h2 style="background-color: black; color: yellow;">split 함수를 사용하여 배열로 만든 다음 forEach 를 사용하여 친구이름 출력하기</h2>

<c:if test="${empty requestScope.friend_name_1 }">
	<div>
		<span style="color: red;">정신차리세요 ~ </span>
	</div>
</c:if>

<c:if test="${not empty requestScope.friend_name_1}">
	<c:set var="arr_friend_name_1" value="${fn:split(requestScope.friend_name_1, ',') }"/>
	<div>
		<ol>
			<c:forEach var= "name" items="${arr_friend_name_1 }">
				<li>${name }</li>
			</c:forEach>
		</ol>
		
	</div>

</c:if>
	<hr style="border: solid 1px red;">

<c:if test="${empty requestScope.friend_name_2 }">
	<div>
		<span style="color: red;">알아서 할게요 ~ </span>
	</div>
</c:if>

<c:if test="${not empty requestScope.friend_name_2}">
	<c:set var="arr_friend_name_2" value="${fn:split(requestScope.friend_name_2, ',./') }"/>
	<div>
		<ol>
			<c:forEach var= "name" items="${arr_friend_name_2 }">
				<li>${name }</li>
			</c:forEach>
		</ol>
		
	</div>

</c:if>

 

requestScope에서 friend_name_2라는 속성을 확인하고 그 값이 비어있지 않는 경우 처리하는 로직을 구현하고 있다

 

* <c:if> 태그는 'test' 속성에서 주어진 조건이 ture 일때만 내부의 코드를 실행한다

* <c:set> 태그 : friend_name_2에서 가져온 값이 비어있지 않는다면 이 값은 콤마, 점, 슬래시를 구분자로 사용하여 배열로 분리된다

이 배열은 arr_friend_name_2라는 변수에 저장된다

이를 위해 jstl의 함수 fn:split()을 사용한다

 

더보기

fn:split(requestScope.friend_name_2, ',./')의 사용 예를 들면, 사용자가 입력한 friend_name_2 데이터에 이러한 다양한 구분자를 사용하여 친구들의 이름을 입력할 수 있습니다. 예를 들어 "Jane Doe, John.Smith/Bob, Alice/Jane.Doe,Charlie"와 같은 문자열이 있다면, fn:split 함수는 이를 ,, ., / 각각을 구분자로 사용하여 ["Jane Doe", "John", "Smith", "Bob", "Alice", "Jane", "Doe", "Charlie"]로 분리합니다. 이렇게 분리된 각 요소는 목록 형태로 화면에 표시됩니다.

 

 

JSTL 사용하기

      === 함수 태그(functions) ===
  
  JSTL은 EL에서 사용할 수 있는 함수 태그를 제공한다.
 
 -------------------------------------------------------------------------------------   
     함수                                                   설명
 -------------------------------------------------------------------------------------   
  length(obj)                      obj가 Conllection인 경우 저장된 항목의 개수를, 문자인 경우 문자열의 길이를 반환
  toUpperCase(str)                 str을 대문자로 변환
  toLowerCase(str)                 str을 소문자로 변환
  substring(str, idx1, idx2)       str.substring(idx1, idx2)의 결과를 반환, idx2가 -1일 경우 str.substring(idx1)과 동일
  substringAfter(str1, str2)       str1에서 str1에 포함되어 있는 str2 이후의 문자열을 구함
  substringBefore(str1, str2)      str1에서 str1에 포함되어 있는 str2 이전의 문자열을 구함
  trim(str)                        str 좌우의 공백 문자를 제거 
  replace(str, src, dest)          str에 있는 src를 dest로 변환
  indexOf(str1, str2)              str1에서 str2가 위치한 인덱스를 구함
  startsWith(str1, str2)           str1이 str2로 시작할 경우 true, 그렇지 않을 경우 false를 반환
  endsWith(str1, str2)             str1이 str2로 끝나는 경우 true, 그렇지 안을 경우 false를 반환
  contains(str1, str2)             st1이 str2를 포함하고 있을 경우 true를 반환
  containsIgnoreCase(str1, str2)   대소문자 구분없이 str1이 str2를 포함하고 있을 경우 true를 반환
  split(str1, str2)                str2로 명시한 글자를 기준으로 str1을 분리해서 배열로 반환 
  join(array, str2)                array에 저장된 문자열을 합침, 각 문자열의 사이에는 str2가 붙음

 

 

JSTL 함수 TAG LIB

<body>
   <h2>JSTL 함수(functions) taglib</h2>
   <table>
      <tr>
         <th>함수</th>
         <th>설명</th>
         <th>결과값</th>
         <th>리턴타입</th>
      </tr>
      <tr>
          <td>fn:length(strList)</td>
         <td>strList 의 크기</td>
         <td>${ fn:length(requestScope.strList) }</td>
         <td>int</td>
      </tr>
      <tr>
          <td>fn:length(subject)</td>
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject의 길이</td>
         <td>${ fn:length(requestScope.subject) }</td>
         <td>int</td>
      </tr>
      <tr>
         <td>fn:toUpperCase(subject)</td>
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject를 대문자로 변환</td>
         <td>${ fn:toUpperCase(requestScope.subject) }</td>
         <td>String</td>
      </tr>
      <tr>
         <td>fn:toLowerCase(subject)</td>
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject를 소문자로 변환</td>
         <td>${ fn:toLowerCase(requestScope.subject) }</td>
         <td>String</td>
      </tr>
      <tr>
         <td>fn:substring(subject, 5, 8)</td>
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 에서 JSP만 추출</td>
         <td>${ fn:substring(requestScope.subject, 5, 8) }</td>
         <td>String</td>
      </tr>
      <tr>
         <td>fn:substringAfter(subject, "JSP")</td>  
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 에서 JSP 다음의 문자열을 추출</td>
         <td>${ fn:substringAfter(requestScope.subject, "JSP") }</td>  <!-- 또는 "JSP" 대신에 'JSP' 를 사용해도 됨.  -->
         <td>String</td>
      </tr>
      <tr>
         <td>fn:substringBefore(subject, 'JSP')</td>  
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 에서 JSP 이전의 문자열을 추출</td>
         <td>${ fn:substringBefore(requestScope.subject, 'JSP') }</td>  <!-- 또는 'JSP' 대신에 "JSP" 를 사용해도 됨.  -->
         <td>String</td>
      </tr>
      <tr>
         <td>fn:trim(lastName)</td> 
         <td>문자열 &quot;&nbsp;&nbsp;&nbsp;길     동&nbsp;&nbsp;&nbsp;&quot; 인 lastName 에서 좌우의 공백 문자를 제거</td>
         <td>${requestScope.firstName}${ fn:trim(requestScope.lastName) }${requestScope.word}</td>  
         <td>String</td>
      </tr>
      <tr>
         <td>fn:replace(subject, "S","에스")</td>  
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 에서 S 를 에스 로 변환</td>
         <td>${ fn:replace(requestScope.subject, "S","에스") }</td>  <!-- 대소문자 구분함  -->
         <td>String</td>
      </tr>
      <tr>
         <td>fn:indexOf(subject, "JSP")</td>  <!-- 대소문자 구분함  -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 에서 JSP 가 위치한 인덱스를 구함</td>
         <td>${ fn:indexOf(requestScope.subject, "JSP") }</td>  <!-- 대소문자 구분함  -->
         <td>int</td>
      </tr>
      <tr>
         <td>fn:startsWith(subject, "JSTL")</td>  <!-- 대소문자 구분함  -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 가 JSTL 로 시작합니까?</td>
         <td>${ fn:startsWith(requestScope.subject, "JSTL") }</td>  <!-- 대소문자 구분함  -->
         <td>boolean</td>
      </tr>
      <tr>
         <td>fn:endsWith(subject, "ary)")</td>  <!-- 대소문자 구분함  -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 가 ary) 로 끝납니까?</td>
         <td>${ fn:endsWith(requestScope.subject, "ary)") }</td>  <!-- 대소문자 구분함  -->
         <td>boolean</td>
      </tr>
      <tr>
         <td>fn:contains(subject, "Tag")</td>  <!-- 대소문자 구분함  -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 속에 Tag 라는 문자열이 포함되어 있습니까?</td>
         <td>${ fn:contains(requestScope.subject, "Tag") }</td>  <!-- 대소문자 구분함  -->
         <td>boolean</td>
      </tr>
      <tr>
         <td>fn:containsIgnoreCase(subject, "tag")</td>  <!-- 대소문자 구분하지 않음 -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 속에 대소문자 구분없이 tag 라는 문자열이 포함되어 있습니까?</td>
         <td>${ fn:containsIgnoreCase(requestScope.subject, "tag") }</td>  <!-- 대소문자 구분하지 않음 -->
         <td>boolean</td>
      </tr>
      <tr>
         <td>fn:split(subject, ' ')</td>  <!-- 대소문자 구분하지 않음 -->
         <td>문자열 &quot;JSTL(JSP Standard Tag Library)&quot; 인 subject 를 공백을 구분자로 하여 배열명 array 로 만들기</td>
         <td><c:set var="array" value="${ fn:split(requestScope.subject, ' ') }" /></td>  <!-- 대소문자 구분하지 않음 -->
         <td>String[]</td>
      </tr>
      <tr>
         <td>fn:join(array, '')</td> 
         <td>공백을 구분자로 만들어진 배열명 array 를  하나의 문자열로 만들기(공백을 제거한 결과가 됨)</td>
         <td>${ fn:join(array, '') }</td> 
         <td>String</td>
      </tr>
      <tr>
         <td>fn:join(array, ',')</td> 
         <td>공백을 구분자로 만들어진 배열명 array 를  하나의 문자열로 만들기(구분자를 콤마로 한 것)</td>
         <td>${ fn:join(array, ',') }</td> 
         <td>String</td>
      </tr>
   </table>
</body>

 

 

 

fmt 태그는 Formatting 태그로 포맷에 관련된 태그이다

https://sinna94.tistory.com/11

 

JSTL fmt 태그 사용하기

이 글을 보시기 전 참고하시면 좋은 글입니다. JSP EL JSP JSTL 등록하기 JSTL core tag 사용하기 fmt 태그란? fmt 태그는 Formatting 태그로 포맷에 관련된 태그입니다. fmt 태그를 사용하기 위해서는 를 jsp 에

sinna94.tistory.com

 

 

문자열로 되어진 숫자를 누적한 결과값(자동형변환, 형변환) 나타내기 및 정수로 되어진 데이터를 세자리마다 콤마를 찍어서 나타내어주기

 

- - 문자열로 되어진 숫자를 누적한 결과값(자동형변환) 나타내기(JSTL을 사용한것)

 

 <c:set var="sum" value="0" />
		   <c:if test="${not empty requestScope.arr_point_1}">
		       <ul>
		          <c:forEach var="point" items="${requestScope.arr_point_1}">
		             <li>${point}</li>
		             <c:set var="sum" value="${sum + point}" />
		          </c:forEach>
		       </ul>
		       arr_point_1 누적의 합계 : ${sum}
		   </c:if>

 

requestScope에서 arr_point_1 배열을 가져와 각 요소(문자열로 된 숫자)를 숫자로 자동 변환하여 합산

<c:set var = "sum" value="0"/>로 합계를 저장할 변수 sum에 초기화한다

 

<c:forEach>를 사용하여 arr_point_1의 각 요소를 순회하고 각 요소를 sum에 더한다

jsp는 문자열이 숫자로 취급될 수 있는 상황에서 자동 형변환을 시도한다

 

 

-- 문자열 숫자를 정수로 형변환하여 누적한 결과값 나타내기 

 <c:set var="sum" value="0" /> 
   <c:if test="${not empty requestScope.arr_point_1}">
       <ul style="list-style-type: circle;">
          <c:forEach var="point" items="${requestScope.arr_point_1}">
             <li>
                <fmt:parseNumber var="pointInt" value="${point}" integerOnly="true" />  
                <%-- fmt:parseNumber 은 문자열을 숫자형식으로 형변환 시키는 것이다.
                 integerOnly="true" 은 소수점은 절삭해버리고 정수만 취해오는 것이다.
                 정수만 취해온 값을 변수 pointInt 에 넣어줌.
             --%>
                ${pointInt}  
             </li>
             <c:set var="sum" value="${sum + pointInt}" />
          </c:forEach>
       </ul>
       arr_point_1 을 실수를 절삭하여 정수만 취해온 누적의 합계 : ${sum}
   </c:if>

 

fmt:parseNumber 태그를 사용하여 문자열을 명시적으로 정수로 변환한다

integerOnly="true" 속성을 사용하여 소수점이하를 절삭한다

 

fmt:parseNumber를 사용하여 각 포인트를 정수로 파싱하고 pointInt 변수에 저장한다

pointInt를 sum에 더하고 최종적으로 모든 값의 합을 출력한다

 

 

 

 

 

-- 정수로 되어진 데이터를 세자리마다 콤마를 찍어서 나타내어 주기

   <c:set var="sum" value="0" />
   <c:if test="${not empty requestScope.arr_price}">
       <ul>
          <c:forEach var="price" items="${requestScope.arr_price}">
             <li>${price}</li>
             <c:set var="sum" value="${sum + price}" />
          </c:forEach>
       </ul>
       arr_price 누적의 합계 : ${sum}
   </c:if>
   
   <br><br>
   <c:set var="sum" value="0" />
   <c:if test="${not empty requestScope.arr_price}">
       <ul>
          <c:forEach var="price" items="${requestScope.arr_price}">
             <li><fmt:formatNumber value="${price}" pattern="#,###"/></li>
             <c:set var="sum" value="${sum + price}" />
          </c:forEach>
       </ul>
       arr_price 누적의 합계 : <fmt:formatNumber value="${sum}" pattern="#,###"/> 
   </c:if>

fmt:formatNumber 태그를 사용하여 숫자 데이터를 형식화한다

숫자를 세자리마다 콤마로 구분하여 보기 쉽게 표시한다

 

arr_price 배열에서 각 가격을 가져와 누적 합계를 계산한다

 

각 가격을 <fmt:formatNumber>로 형식화하여 <li> 태그 내에 출력한다

최종합계도 세자리마다 콤마를 찍어 형식화하여 출력한다 

 

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- ==JSTL(JSP Standard Tag Library) 사용하기 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	String ctxPath = request.getContextPath();
	// /jspServletBegin
	// img가 어디인지 --> 절대경로
	
	String name = (String)request.getAttribute("name");
	String school = (String)request.getAttribute("school");
	String color = (String)request.getAttribute("color"); 
	String foodes = (String)request.getAttribute("foodes");
	String[] arr_food = (String[])request.getAttribute("arr_food");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개인 성향 테스트 결과 </title>
</head>
<body>
	<h2>개인 성향 테스트 결과</h2>
	
	<h3> 스크립틀릿을 사용한 것 </h3>
	
		<ol>
			<li> 성명: <%= name %> </li>
			<li> 학력: <%= school %></li>
			<li> 색상: <span style ="display: inline-block; width:10px; height:10px; border-radius:50%; background-color:<%= color %>"></span></li>
			<li> 음식: 
			<% 	 for(int i=0; i<arr_food.length; i++) {  %>
					<img src="<%=ctxPath %>/chap03_StandardAction/images/<%=arr_food[i] %>" width="76.5px" height="114px"/> 
				<% 		}   %>
			
			
				
			
			</li>
		
		</ol>	
	
	</div>
	
	<hr style="border: solid 1px blue;">
	<h3> EL 및 JSTL 사용한 것 </h3>
	<div>
		<ol>
			<li> 성명: ${requestScope.name } </li>
			<li> 학력:  ${requestScope.school }</li>
			<li> 색상: <span style ="display: inline-block; width: 20px; border-radius: 50%; background-color:  ${requestScope.color};"></span></li>
			<li> 음식: 
			<c:forEach var="food_img" items=" ${requestScope.arr_food}">
					<%-- items="${ }" 에 들어오는 것은 배열 또는 List 이다. --%>
					<%-- 반복의 회수는 배열길이 또는 List 의 size 만큼 반복된다. --%>
			<img src= "<%= ctxPath %>/chap04_JSTL/images/${food_img}" width= "76.5px" height="57px"/> 
			</c:forEach>
			</li>
		
		</ol>	
	
	</div>
</body>
</html>

 

'Full-Stack > JSP' 카테고리의 다른 글

WAS  (0) 2024.05.06
JSP(2)  (0) 2024.05.05
JSP(1)  (0) 2024.05.05