728x90
JSTL JSP안에서 사용하고 있는 자바코드를 없애기 위해서 사용하는 태그 라이브러리
JSTL이란?
JSTL + EL의 조합을 말한다.
JSTL의 정식 명칭은 자바서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library)이고
줄여서 JSTL이라 부른다.
JSP 내에 if문, for문 등의 구문을 처리가 가능케 한다.
EL이란?
EL의 정식 명칭은 표현 언어(Expression Language)라고 하며 줄여서 EL이라고 부른다.
EL을 사용하면 값이 없거나 형 변환 등에 전혀 신경 쓸 필요 없이 서버로 전송해서 형변환 없이 사용할 수 있다.
변수를 표현하기 위한 언어 (예) ${변수명}
EL에 대해 알아보자
EL의 사용법
<%= name %>
${name}
EL의 내장 객체
객체명설명
${pageScope} | page Scope에 접근하기 위한 객체 |
${reqeustScope} | request Scope에 접근하기 위한 객체 |
${sessionScope} | session Scope에 접근하기 위한 객체 |
${applicationScope} | application Scope에 접근하기 위한 객체 |
${param} | 파라미터 값을 가져오기 위한 객체 |
${header} | 헤더 값을 가져오기 위한 객체 |
${cookie} | 쿠키 값을 가져오기 위한 객체 |
${initParam} | JSP 초기 파라미터를 가져오기 위한 객체 |
${pageContext} | pageContext 객체에 접근하기 위한 객체 |
EL의 연산자 종류 및 표현법
연산부호연산자
+ | + |
* | * |
/ | div |
\&\& | and |
|| | or |
== | eq |
!= | ne |
< | ge |
> | lt |
<= | ge |
>= | le |
JSTL에 대해 알아보자
스프링에는 JSTL이 자동등록 되어있다
JSTL은 라이브러리이기 때문에 jstl을 사용하려면 아래와 같은 태그라이브러리 선언만 해주면된다.
태그라이브러리 선언
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
JSTL 사용방법
<c:if test=""></c:if>
<c:forEach items=""></c:forEach>
JSTL core의 태그들
태그명설명
<c:set> | 변수명에 값을 할당 |
<c:out> | 값을 출력 |
<c:if> | 조건식에 해당하는 블럭과 사용될 scope설정 |
<c:choose> | 다른 언어의 switch와 비슷 |
<c:when> | switch문의 case에 해당 |
<c:otherwise> | switch문의 default에 해당 |
<c:forEach> | 다른언어의 loop문 items 속성에 배열을 할당할 수 있음 |
정리참고사이트 : https://daesuni.github.io/jstl/
예제1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!-- jstl 상단에 tagLibrary가 있어야 동작한다.-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>el 과 jstl <br>
el 화면출력방법<br>
jstl 데이터처리 화면 구성 방법</h2>
<br>
<p>
${num} 모델에 num 이라는 키값이 들어있다면 num 키에 들어있는 값이 출력된다. <br>
${object.name} 객체.필드 형태로 객체데이터 출력 모델에 담겨져 있는 데이터가 객체일때 사용 <br>
${10+20} 연산 가능
</p>
<!-- jstl문법 c: -->
<c:set var="income" value="${400*3}" /> <br>
<c:out value="${income}" />
<br>
<!-- scope는 변수의 생명주기를 말한다. 종류: request , session , page application-->
<h3>if</h3> <!-- 참이면실행 -->
<c:if test="${income > 800}">
<P>${income}값은 800이상</P>
</c:if>
<br>
<h3>choose (스위치문)</h3>
<c:choose>
<c:when test="${income <= 1000}">1000보다 작음</c:when>
<c:when test="${income <= 2000}">2000보다 작음</c:when>
<c:when test="${income <= 3000}">3000보다 작음</c:when>
<c:otherwise>모두조건에 안맞음</c:otherwise>
</c:choose>
<br>
<h3>반복문</h3>
<ol>
<c:forEach var="j" begin="1" end="3">
<li><c:out value="${j}" /></li>
<%--또다른 출력방법 : <li>${j}</li> --%>
</c:forEach>
</ol>
</body>
</html>
예제1 출력화면
예제2
home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!-- jstl 상단에 tagLibrary가 있어야 동작한다.-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>그냥가져오기</h4>
name: ${name}<br>
age: ${num}<br>
<br>
<h4>객체로가져오기</h4>
human.name : ${human.name}<br>
human.age : ${human.age}<br>
<br>
<h4>리스트로가져오기</h4>
<c:forEach var ="item" items="${list}" varStatus="status">
<p>
ㅇ현재 몇번째 휴먼객체인가 ? : inex:${status.index} <br>
name : ${item.name} / age : ${item.age} <br>
-첫번째 휴먼객체인가? : ${status.first} <br>
-마지막 휴먼객체인가? : ${status.last} <br>
<!-- (ture false 값을 가짐 ) -->
</p>
</c:forEach>
<br>
<!-- items 라는 속성으로 어레이리스트를 가져올수있다
items개수만큼 돌면서 item은 휴먼객체를 차례대로 가르킨다.-->
<!-- varStatus 상태정보를 얻어올수있음 -->
<c:forEach var="cnt" begin="1" end="10" step="2" varStatus="status">
<ul>
<li>index (2step): ${status.index }</li>
<li>count : ${status.count }</li>
<li>첫번호인가요 ?: ${status.first }</li>
<li>마지막번호인가요 ?: ${status.last }</li>
</ul>
</c:forEach>
</body>
</html>
humanContoller.java
package com.human.ex;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
String name ="hello";
int age = 10;
Human human = new Human("홍길동", "10");
ArrayList<Human> list = new ArrayList<Human>();
list.add(new Human("홍길동1" , "11"));
list.add(new Human("홍길동2" , "12"));
list.add(new Human("홍길동3" , "13"));
list.add(new Human("홍길동4" , "14"));
model.addAttribute("name", name);
model.addAttribute("age", age);
model.addAttribute("human", human);
model.addAttribute("list", list);
return "home";
}
}
Human.java 휴먼객체 생성
package com.human.ex;
public class Human {
private String name;
private String age;
//setter getter, to string , using filed
public Human() {}
public Human(String name, String age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Human [name=" + name + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
예제2 출력화면
예제3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!-- jstl 상단에 tagLibrary가 있어야 동작한다.-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>마지막에는 콤마를 찍기싫을때 방법</h4>
<c:forEach var="item" items="${list }" varStatus="status">
${item }<c:if test = "${not status.last }">,</c:if>
</c:forEach>
<br>
<h4>쉼표에서 끊어지게 나오고싶을때</h4>
<c:forTokens var="city" items="서울.인천,대구.부산" delims=",">
${city }<br>
</c:forTokens>
<h4>쉼표와 온점에서 끊어지게 나오고싶을때</h4>
<c:forTokens var="city" items="서울.인천,대구.부산" delims=",.">
${city }<br>
</c:forTokens>
</body>
</html>
예제3 출력화면
예제4
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
formatNumber을 사용하려면 상단에 추가해주어야한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!-- jstl 상단에 tagLibrary가 있어야 동작한다.-->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- formatNumber를 위한 추가-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--3자리 마다 컴마로 표시한 숫자 -->
<p>
<fmt:formatNumber value="1234567.89" /> <br>
<!--groupingUsed="false" 부분을 추가하면 3자리 마다 컴마로 표시 하지 않음 -->
<fmt:formatNumber value="1234567.89" groupingUsed="false"/> <br>
<!--숫자를 퍼센트로 출력 1이 100% 이다. -->
<fmt:formatNumber value="0.5" type="percent" /> <br>
<!-- 돈단위를 넣어서 출력 -->
<fmt:formatNumber value="10000" type="currency" /> <br>
<!-- 원하는 돈표시 선택 -->
<fmt:formatNumber value="10000" type="currency" currencySymbol="$"/> <br>
</p>
<!--패턴대로 출력하는 방식 #해당 자리가 없으면 출력하지 않음 0 해당 자리가 없으면 0으로 출력-->
<p>
<fmt:formatNumber value="1234567.8912345" pattern="#,#00.0#"/> <br>
<fmt:formatNumber value="1234567.8912345" pattern=".000"/> <br>
<fmt:formatNumber value="1234567.10" pattern=".00"/> <br>
<fmt:formatNumber value="1234567.10" pattern=".0#"/> <br>
<fmt:formatNumber value="1234567.0" pattern=".0"/> <br>
<fmt:formatNumber value="1234567" pattern=".#"/> <br>
</p>
<p>
<c:set var="now" value="<%=new java.util.Date()%>" /> <br>
<fmt:formatDate value="${now }" pattern="yyyy"/> <br>
<fmt:formatDate value="${now }" pattern="yyyy년 MM월 dd일 HH시 mm ss"/> <br>
</p>
</body>
</html>
예제4 출력화면
728x90
'STUDY > SpringLegacy' 카테고리의 다른 글
[Spring] 글 목록·상세 출력 / 입력·등록·삭제·수정 만들기 (0) | 2022.09.17 |
---|---|
[Spring] DTO,DAO,mapper생성과 DB연결 설정하기 (0) | 2022.09.17 |
[Spring] Spring 기초 어노테이션 다루기 (0) | 2022.09.14 |
[Spring] Controller 생성하기 (0) | 2022.09.14 |
[Spring] Spring Legacy 시작하기 (2) | 2022.09.14 |