✅네이버클라우드 캠프/개발일기

[네이버클라우드캠프] 85일차. 자바 JSTL(JSP Standard Tag Library) 스코프 사용

우동한그릇 2023. 8. 28. 14:44
반응형

*  JSTL(JSP Standard Tag Library)? 

* I18N(Internationalization 의 약자)
=> 프로그램을 짤 때 여러 언어를 고려해서 코딩하는 것을 말한다.
=> 특히 화면에서 버튼에 제목이나 라벨을 출력할 때 특정 언어로 고정된 값을 출력하지 않고,
   외부 파일(예: label_ko_KR.properties)에서 읽어 온 값을 출력하도록 프로그래밍 하는 것.
   
* L10N(Localization 의 약자)
=> 특정 언어에 대해 라벨 텍스트를 담은 프로퍼티 파일(예: label_ko_KR.properties)을 
   작성하는 것을 말한다.

 

  - JSP 확장 태그이다.
  - 기본으로 제공하지 않는다.
  - JSTL API를 구현한 외부 라이브러리를 가져와서 사용해야 한다.
- JSTL 라이브러리 가져오기
  - mvnrepository.com 에서 JSTL 검색하여 라이브러리를 정보를 알아낸다.
  - build.gradle 파일의 dependencies {} 블록에 추가한다.
  - 'gradle eclipse' 실행하여 이클립스 설정 파일을 갱신한다.
  - 이클립스 프로젝트를 리프래시 한다.


- JSTL 라이브러리 모듈
  - Core(c) : http://java.sun.com/jsp/jstl/core
  - XML(x) : http://java.sun.com/jsp/jstl/xml
  - I18N(fmt) : http://java.sun.com/jsp/jstl/fmt
  - Database(sql) : http://java.sun.com/jsp/jstl/sql
  - Functions(fn) : http://java.sun.com/jsp/jstl/functions

 

- JSP 페이지에서 JSTL 라이브러리의 모듈 사용하기
  - JSTL 모듈의 네임스페이스를 가져온다.
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  - JSTL 태그 사용
      <접두어명:태그명 속성="값" 속성="값"/> 


 

Oracle Java Technologies | Oracle

Java Is the Language of Possibilities Java is powering the innovation behind our digital world. Harness this potential with Java resources for student coders, hobbyists, developers, and IT leaders.

www.oracle.com


* Expression (JSP 내부 스크립트let):

<%="<h2>오호라!!!</h2>"%>


이 방식은 JavaServer Pages (JSP)에서 사용되는 스크립트릿 내부에서 HTML 코드를 직접 출력하는 방식입니다. JSP에서 스크립트릿 내부에 표현식을 작성하면 해당 표현식의 결과가 HTML로 출력됩니다.

* Expression Language (EL):

${"<h2>오호라!!!</h2>"}



이 방식은 JSP 페이지에서 Expression Language (EL)을 사용하여 변수나 표현식의 결과를 출력하는 방식입니다. EL은 JSP 내에서 데이터를 가져오고 표현하는 데 사용되며, ${} 형식으로 표현식을 사용합니다.

 

* JSTL <c:out> 태그:

<c:out value="<h2>오호라!!!<h2>"/>


JavaServer Pages Standard Tag Library (JSTL)의 <c:out> 태그를 사용하여 HTML 코드를 출력하는 방식입니다. 이 태그는 특수 문자를 이스케이프하고 HTML 엔티티로 변환하여 안전하게 출력합니다.


#JavaServer Pages (JSP)에서 데이터를 다양한 스코프에 저장하는 방법

 

<%
pageContext.setAttribute("name", "홍길동");
request.setAttribute("name", "임꺽정");
session.setAttribute("name", "유관순");
application.setAttribute("name", "김구");
%>

1: ${pageScope.name}<br>
2: ${requestScope.name}<br>
3: ${sessionScope.name}<br>
4: ${applicationScope.name}<br>



* Application Scope (application 객체):

<% application.setAttribute("name", "김구"); %>
  • 웹 애플리케이션 전체에서 공유되는 데이터를 저장하는 스코프입니다.
  • application.setAttribute("name", "김구"); 코드는 "김구"라는 이름의 데이터를 애플리케이션 스코프에 저장합니다.
  • 모든 사용자가 이 데이터에 접근 가능하며, 웹 애플리케이션의 생명 주기 동안 유지됩니다.

 

* Session Scope (session 객체) :

<% session.setAttribute("name", "유관순"); %>
  • 사용자 세션별로 데이터를 저장하는 스코프입니다.
  • session.setAttribute("name", "유관순"); 코드는 현재 사용자의 세션에 "유관순"이라는 이름의 데이터를 저장합니다.
  • 사용자가 로그인한 세션 동안 유지되며, 세션이 종료되기 전까지 데이터에 접근 가능합니다.


* Request Scope (request 객체):

<% request.setAttribute("name", "임꺽정"); %>
  • 하나의 사용자 요청(Request) 동안 데이터를 저장하는 스코프입니다.
  • request.setAttribute("name", "임꺽정"); 코드는 현재 요청에 대한 응답이 처리되는 동안 "임꺽정"이라는 이름의 데이터를 저장합니다.
  • 해당 요청 처리 동안에만 데이터에 접근 가능하며, 응답이 완료되면 데이터가 사라집니다.

 

* Page Scope (pageContext 객체):

<% pageContext.setAttribute("name", "홍길동"); %>
  • 현재 JSP 페이지에서만 유효한 스코프입니다.
  • pageContext.setAttribute("name", "홍길동"); 코드는 현재 JSP 페이지에서만 "홍길동"이라는 이름의 데이터를 저장합니다.
  • 해당 JSP 페이지 내에서만 데이터에 접근 가능하며, 페이지가 렌더링되는 동안 유지됩니다.
  •  

* JSTL 태그 사용 연습 예제

 

* Board_detail 

 

전)

후)

<c:set var="board" value="${boardDao.findBy(param.category, param.no)}"/>

 

전)

후)

<c:forEach items="${board.attachedFiles}" var="file">

 

전)

후)

<c:set target="${pageScope.board}" property="viewCount" value="${board.viewCount +1}"/>
<c:set var="updateCount" value="${boardDao.updateCount(board)}"/>

전)

후)


전)

후)

<jsp:useBean id="memberDao" type="bitcamp.myapp.dao.MemberDao" scope="application"/>
<c:set var="loginUser" value="${memberDao.findByEmailAndPassword(m)}" scope="session"/>

<jsp:useBean id="loginUser" type="bitcamp.myapp.vo.Member" scope="session"/>
<c:redirect url="/"/>

 

 

반응형