최근 인턴생활하고 있는 회사가 JSP, MyBatis, Spring-Legacy, Eclipse를 사용한다. 모두 사용해본적 없는 것들이기에 많은 시행착오를 겪었다. 이에 여기에 새롭게 배운 기본적인 내용들을 정리한다.
JSP( Java Server Pages )
자바 뷰 템플릿.
단독으로 웹 브라우져에 띄워 확인할수 없다.
일부 전용 태그들이 존재한다.
기본 문법
1.Directives (지시자) <%@ {지시자 속성 = "값" 속성="값"} %>
속성과 값에 따라 자바 코드를 생성한다.
page, taglib, include가 있으며, 주로 jsp 페이지와 관련된 속성이나 라이브러리를 임포트 하는 등의 용도로 사용된다.
2. Scriptlet Elements(스크립트릿) <% {자바 코드} %>
jsp 페이지 안에서 자바 코드를 작성할때 사용한다.
해당 코드는 서블릿 파일이 생성될때 _jspService()메소드 안에 그대로 복사된다.
3. Declarations(선언문) <%! {변수나 메서드 선언} %>
선언문은 서블릿 파일 _jspService() 메서드 밖에 복사되기에 jsp내에서 작성 위치는 상관없다.
4. Expressions(표현식) <%= {변수나 문자열, 값 등} %>
해당 문자열을 출력한다.
JSTL (JSP Standard Tag Library)
반복, 조건 로직, formatting등의 작업을 쉽게 하기 위해 지원하는 기능이다.
라이브러리 종류
Tag Library선언문기능
Core(기본) | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | 가장 자주 사용되는 태그. 일반적인 프로그램의 기능을 제공한다(for, if 등). |
XML | <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> | XML 문서를 생성, 조작하는 방법을 제공한다. |
Formatting(I18N-국제화) | <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | 날짜, 시간, 숫자 텍스트를 포맷하고 표시하는 formatter 기능을 제공한다. |
Database(SQL) | <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> | RDBMS와 상호 작용하는 태그를 제공한다. |
Functions(기타 함수) | <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> | 문자열을 가공하고 조작하는 표준 함수를 제공한다. |
prefix는 접두사로, 태그 라이브러리의 기능들을 사용하기 전 <c:{기능 이름}> 과 같은 방식으로 불러오는 역할을 한다. 쉽게 설명하자면 외부 라이브러리의 함수를 사용하기 위해, 클래스 이름.함수명() 처럼 사용하는 것과 유사하다.
prefix는 개발자 마음대로 선언할수 있으나 어지간하면 라이브러리의 첫글자를 사용하자.
주요 core태그
<c:set>
변수 선언 태그.
변수를 선언한다.
<c:set var="{앞으로 사용될 변수명}" value="{변수에 넣을 값}" />
<c:remove>
변수 태그를 제거한다.
<c:remove var="{제거할 변수명}"/>
<c:out>
태그 안의 텍스트를 value값으로 바꾼다.
만약 value값이 null이라면 기본값이, 기본값이 없다면 빈 문자열이 출력된다.
<c:out value="{출력되길 원하는 문자}" default="{기본값}"/>
<c:if>
test의 내용이 true인지 false인지 판별하여 이에 따라 <c:if> 태그 내부의 내용을 생성하거나 생성하지 않는다.
반드시 모든 내용을 ${}(el문법) 안에 적어야 한다.
<c:if test=${ 조건문 } var ="{해당 조건문의 결과를 담는 변수명( true 아니면 false)}"> 내용 </c:if>
예제
<c:if test=${ 1== 2 } var="result1"> 첫번째 if는 보이지 않는다.</c:if>
첫번째 결과는 ${result1} 이기에 내용이 보이지 않는다.
<c:if test=${ 1== 1 } var="result2"> 두번째 if는 보인다. </c:if>
두번째 결과는 ${result2} 이기에 내용이 보인다.
결과:
첫번째 결과는 false 이기에 내용이 보이지 않는다.
두번째 if는 보인다.
두번째 결과는 true이기에 내용이 보인다.
<c:choose>
스위치 기능을 사용할수 있게 해주는 태그이다.
test 내부 내용이 참인지 거짓이닞 판별한다.
<c:when> 태그는 반드시 한개 이상 존재해야 하며, 여러개의 조건을 줄수도 있다.
<c:otherwise> 태그는 없거나 1개가 존재할수 있으며, else문처럼 앞의 모든 when조건들에 부합하지 않을때 실행된다.
<c:choose>
<c:when test={조건문1} >
내용1
</c:when>
<c:when test={조건문2} >
내용2
</c:when>
<c:otherwise >
앞의 모든 조건이 false입니다.
</c:otherwise>
</choose>
<c:forEach>
반복문을 사용할수 있게 해주는 태그로, 내부 태그 역시 반복되어 생성된다.
bigin 과 end로 반복 횟수를 지정해줄수 있으며, 리스트의 경우 items를 통해 향상된 for문처럼 사용이 가능하다.
1. 횟수 지정
<c:forEach var={count} begin="1" end="3">
<span> ${count} </span>
</c:forEach>
결과:
1 2 3
2. items를 통한 리스트 내부 반복
<% pageContext.setAttribute("num", new String[]{"1", "2", "3"}); %> -- 리스트 선언
<c:forEach items=${num} var="oneNumber"> -- num의 값을 하나씩 빼서 oneNumber에 넣음
<span> ${oneNumber} </span> -- oneNumber 출력
</c:forEach>
결과:
1 2 3
<c:forTokens>
문자열에 포함된 토큰을 기준으로 문자열을 분리해, 분리된 각각에 대해 반복 처리를 수행한다.
<c:forToken var="{분리된 문자 하나가 담길 변수명}" items={문자열} delims={구분 토큰}>
내용
</c:forToken>
예제
<% pageContext.setAttribute("fruits", "사과,배,바나나"); %>
<c:forToken var="one" items=${fruits} delims=",">
<div>${one}</div>
</c:forToken>
결과:
사과
배
바나나
<c:url>
url을 만들때 사용한다. 동적으로 만들어야 할때 사용하면 된다.
<c:url var={변수명} value={url}>
</c:url>
<c:redirect>
리다이렉트로 처리할때 사용한다.
<c:redirect url={url} />
주요 forammting 태그
<fmt:parseDate>
날짜 형식으로 작성된 문자열로 java.util.Date 객체를 생성한다.
문자 ㅡ> 날짜
<fmt:parseDate var={변수명} value={날짜 문자열} patter={날짜 객체의 패턴} />
<fmt:formatDate>
날짜 객체를 원하는 형식으로 표현하고 싶을때 사용한다.
<fmt:formatDate value={날짜 객체} patter={표현하고자 하는 객체} />