공부/JSP

JSP를 사용하면서

샤샤샤샤 2023. 10. 19. 15:38

최근 인턴생활하고 있는 회사가 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={표현하고자 하는 객체} />