달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

 출처 : http://blog.naver.com/musasin84?Redirect=Log&logNo=60195725004

JSP에서 객체를 초기화하고, DB접속을 하며 수 많은 상단에 선언되었던 내용들이 사라지고, 서블릿에서 request.setAttribute(key, value)에 담았던 값을 getAttribute(key)로 얻어오는 것 이외에는 전혀 달라질 게 없다. 참! *.jsp로 되었던 URL이 *Servlet 으로 바뀐 점!

 

변경된 boardList.jsp 

크게 설명할게 없을 정도로 간결해졌다. 서블릿에서 설정한 값들을 빼와 변수에 담았을 뿐!

약 250line던 소스가 약 110line으로 줄었다.

 

  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

  <%@ page import="model.board.BoardModel, java.util.List" %>

  <%

      List<BoardModel> boardList = (List<BoardModel>)request.getAttribute("boardList");

      BoardModel boardModel = (BoardModel)request.getAttribute("boardModel");

      int totalCount = (Integer)request.getAttribute("totalCount");

      String searchText = boardModel.getSearchText();

      String searchType = boardModel.getSearchType();

      String searchTextUTF8 = new String(searchText.getBytes("ISO-8859-1"), "UTF-8");

      int pageNum = Integer.parseInt(boardModel.getPageNum());

      int listCount = boardModel.getListCount();

      int pagePerBlock = boardModel.getPagePerBlock();

      String pageNavigator = (String)request.getAttribute("pageNavigator");

  %>

 

 

그외 등록, 보기, 수정도 다 이런식이다. 이렇게 간결해지면서 HTML/CSS/SCRIPT에 더 집중할 수 있게 해주고, 뭐랄까? 개발자로서 작성된 소스들이 이뻐보인달까~ 

 

JSTL/EL 활용

JSTL (JSP Standard Tag Library)와 EL (Expression Language)는 위의 boardList.jsp 소스를 더 간결하게 해주는 아주 유용한 것들이다. 서블릿에서 설정했던 값들을 getAttribute()를 통해 일일이 얻어와 사용했던 방법을 짧은 표현식으로 쉽게 얻게 해준다. 이 JSTL과 EL은 지금 시점에도 많이 사용되기 때문에 알아두면 좋다.

 

JSTL (JSP Standard Tag Library)

JSTL를 사용하기위해서는 라이브러리(*.jar)파일이 필요하다. (사이트

사이트에 들어가보면 Servlet/JSP 버젼에 맞게 사용할 수 있다.

 

 

다운을 받는 *.jar 파일을 /WEB-INF/lib 안에 넣어 사용해야 한다. 

 

(board : JSTL이 적용된 파일, board_nouse_jstl : JSTL이 적용되기 전 파일)

 

그리고 최상단에 사용할 태그라이브러리를 선언하자.

 

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

 

Core 태그라이브러리와 Function 태그라이브러리를 선언했다. 올바르게 선언되었다면 JSP에서 "<c:"를 치는 순간 자동완성기능이 표시되는 모습을 볼 수 있다.

 

 

태그라이브러리를 사용하기 위해서는 사용법을 익힐 필요가 있는 데 잘 정리되어 있는 사이트가 있어 이 곳을 참고하자.

  - EL (http://cafe.naver.com/buldon/1057)

  - EL, Function (http://wiki.gurubee.net/pages/viewpage.action?pageId=983139&)

  - Core (http://wiki.gurubee.net/display/DEVSTUDY/2.+Core+Tag)

(일반적으로 사용했던 제어문, 비교문, 반복문 등 문법이 바뀐다는 걸 알아둬야 한다.)

 

JSTL/EL 사용 전

JSTL/EL 사용 후 

  if ('TEST'.equals('TEST')) { }

  <c:if test="'TEST' eq 'TEST'"><c:if> 

  String str = request.getAttribute('key');

  <c:out value="${key}" /> or ${key}

  for (int i=0; i<boardList.size(); i++) {

    BoardModel board = boardList.get(i);

    board.getSubject()

  }

  <c:forEach var="board" items="${boardList}"

           varStatus="status">

       <c:out value="${board.subject}" />

  </c:forEach>

  request.getContextPath()/board/

  <c:url value="/board/" />

 if (true) { } else { }

  <c:choose>

     <c:when test="${true}">

     </c:when>

     <c:otherwise>

     </c:otherwise>

  </c:choose>

 

이 외에도 많다. 다른 문법이기때문에 사용법을 필히 익힐 필요가 있다. 

 

왜 써야하는 지 잘 모를 수 있으니 얼마나 간결해지는 지 한번 더 보자.

 JSTL/EL 사용 전

 

  <%

        BoardModel boardModel = (BoardModel)request.getAttribute("boardModel");

        int totalCount = (Integer)request.getAttribute("totalCount");

        String searchText = boardModel.getSearchText();

   %>

   <p><%=boardModel.getSubject()%></p>

   <p><%=boardModel.getContents()%></p>

   <p><%=totalCount %></p>

   <p><%=searchText %></p>

 

 

 JSTL/EL 사용 후

 

   <p><c:out value="${boardModel.subject}" /></p>

   <p>${boardModel.contents}</p>

   <p>${totalCount}</p>

   <p>${boardModel.searchText}</p>

 

 

확연히 차이가 날 수밖에 없다. 서블릿에서 설정된 속성값들을 바로 쓸 수 있는 큰 장점이 있다. 그리고 이클립스에서 태그라이브러리는 HTML태그와 글자색이 동일해 뭔가 모르게 깔끔한 느낌을 준다. ㅋ 

 

마무리

이번에 작성한 내용은 JSTL/EL의 사용법을 설명하기보다는 사용함으로써의 이점을 설명하는 데 주력했다. (사용법은 위 URL에서 확인)

 

 

 

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|