JSTL
- JSTL(JSP Standard Tag Library)?
- 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 태그 사용
<접두어명:태그명 속성="값" 속성="값"/>
https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/
https://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm
* I18N(Internationalization 의 약자)
=> 프로그램을 짤 때 여러 언어를 고려해서 코딩하는 것을 말한다.
=> 특히 화면에서 버튼에 제목이나 라벨을 출력할 때 특정 언어로 고정된 값을 출력하지 않고,
외부 파일(예: label_ko_KR.properties)에서 읽어 온 값을 출력하도록 프로그래밍 하는 것.
* L10N(Localization 의 약자)
=> 특정 언어에 대해 라벨 텍스트를 담은 프로퍼티 파일(예: label_ko_KR.properties)을
작성하는 것을 말한다.
처음부터 프로그램 짤 때 다국어로(국제화) 짜야함.
값을 바로 넣는 하드코딩 말고 프로퍼티 값이 출력되게 최초에 코딩해야함.
새로운 언어가 추가되면 라벨 추가를 하면됨.
.properties 파일에 라벨이 들어있음
//jstl 라이브러리
implementation 'jstl:jstl:1.2'
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h2>오호라!!!</h2>
<%
out.println("<h2>오호라!!!</h2>"); //scirptlet
%>
<%="<h2>오호라!!!</h2>"%> //expression element
${"<h2>오호라!!!</h2>"} //expression language
<c:out value="<h2>오호라!!!<h2>"/> //JSTL
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>JSTL - c:out</h1>
<%--
- 출력문을 만드는 태그이다.
<c:out value="출력될 값" default="기본 값"/>
<c:out value="출력될 값>기본값<c:out>
--%>
<%
pageContext.setAttribute("name", "유관순");
%>
<c:out value="임꺽정"/><br>
<c:out value="${null}" default="홍길동"/><br>
<c:out value="${null}">홍길동</c:out><br>
<c:out value="${'임꺽정'}" default="홍길동"/><br> // 문자열 임꺽정이 출력됨
<c:out value="${name}" default="홍길동"/><br>
<c:out value="${name2}" default="홍길동"/><br>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>JSTL - c:set</h1>
- 보관소에 값을 저장한다.
<%--
scope을 생략하면 기본이 PageContext 이다. --%> <c:set scope="request" var="name1" value="홍길동2"/> 1: ${requestScope.name1}<br> 2: ${pageScope.name1}<br> //pageContext에 저장한적없음 3: ${name1}<br> |
<%-- scope을 생략하면 기본이 PageContext 이다. --%> <c:set var="name2" value="임꺽정"/> 1: ${requestScope.name2}<br> 2: ${pageScope.name2}<br> 3: ${name2}<br> <hr> |
시작 태그와 끝 태그 사이(content)에 값을 넣을 수 있다.
--%> <c:set var="name3">유관순</c:set> 1: ${requestScope.name3}<br> 2: ${pageScope.name3}<br> 3: ${name3}<br> |
**최초 만들어진 m1에 숫자를 넣는거 :내부적으로 m1.setNo(100); 이렇게 바뀜
<jsp:useBean id="m1" class="eomcs.vo.Member"/>
<%--
Member m1 = (Member) pageContext.getAttribute("m1");
if (m1 == null) {
m1 = new Member();
pageContext.setAttribute("m1", m1);
}
--%>
<jsp:setProperty name="m1" property="no" value="100"/>
<%--
m1.setNo(100); **
--%>
target : expression language 꼭 사용해야함.
<c:set target="${pageScope.m1}" property="email" value="hong@test.com"/>
<%--
Object obj = pageContext.getAttribute("m1");
Method m = obj.getClass().getMethod("setEmail", String.class);
m.invoke(obj, "hong@test.com");
=> m1.setEmail("hong@test.com");
--%>
${pageScope.m1.no}<br>
${pageScope.m1.email}<br> |
<h1>JSTL - c:remove</h1>
<pre>
- 보관소에 저장된 값을 제거한다.
<h1>JSTL - c:if</h1>
<pre>
- 조건문을 만든다.
=> pagecontext에 저장됨.
JSTL - c:choose
- 다중 조건문을 만든다.
- 자바의 switch와 유사하다.
JSTL - c:forEach
- 반복문을 만든다.
<%
pageContext.setAttribute("names", new String[]{"홍길동", "임꺽정", "유관순"}); %> <hr> <ul> <% String[] names = (String[]) pageContext.getAttribute("names"); for (String n : names) {%> <li><%=n%></li> <%} %> </ul> <hr> <ul> <c:forEach items="${names}" var="n"> <li>${n}</li> </c:forEach> </ul> |
|
<h2>Collection 객체</h2>
<% List<String> names2 = new ArrayList<>(); names2.add("홍길동"); names2.add("임꺽정"); names2.add("유관순"); pageContext.setAttribute("names2", names2); %> <ul> <c:forEach items="${names2}" var="n"> <li>${n}</li> </c:forEach> </ul> |
|
<h2>Map 객체</h2> <% Map<String,Object> names3 = new HashMap<>(); names3.put("s01", "홍길동"); names3.put("s02", "임꺽정"); names3.put("s03", "유관순"); pageContext.setAttribute("names3", names3); %> <ul> <%-- Map 객체에 대해 반복문을 돌리면 var로 저장되는 것은 key와 value를 갖고 있는 Entry 객체이다. --%> <c:forEach items="${names3}" var="n"> <li>${n.getKey()} : ${n.getValue()} => ${n.key} : ${n.value}</li> </c:forEach> </ul> |
|
<h2>CVS(comma separated value) 문자열</h2> <% pageContext.setAttribute("names4", "홍길동,임꺽정,유관순,김구"); %> <ul> <c:forEach items="${names4}" var="n"> <li>${n}</li> </c:forEach> </ul> |
JSTL - c:forTokens
- 반복문을 만든다.
- cvs 꺼내기
<h2>CVS 문자열</h2> <% pageContext.setAttribute("names1", "홍길동,임꺽정,유관순,김구"); <ul>
<c:forTokens items="${names1}" var="n" delims=","> <li>${n}</li> </c:forTokens> </ul> |
|
<h2>Query String 문자열</h2> <% pageContext.setAttribute("qs", "name=홍길동&age=20&tel=1111-2222"); %> <ul> <c:forTokens items="${pageScope.qs}" var="n" delims="&"> <li>${n}</li> </c:forTokens> </ul> |
JSTL - c:url
- 복잡한 형식의 URL을 만들 수 있다.
JSTL - c:import
- HTTP 요청을 수행하는 코드를 만든다.
JSTL - c:redirect
- redirect 응답하기
<c:if test="${param.search == 'naver'}"> <c:redirect url="http://www.naver.com"/> <%-- response.sendRedirect("http://www.naver.com"); --%> </c:if> <c:if test="${param.search == 'daum'}"> <c:redirect url="http://www.daum.net"/> </c:if> <p>search 라는 이름으로 검색 엔진을 지정하세요!<br> 유효한 엔진은 'naver', 'daum' 입니다.</p> |
localhost:8888/jstl/~~ naver 하면 naver로 가버림 |
JSTL - fmt:parseDate</h1>
- 문자열로 지정된 날짜 값을 java.util.Date 객체로 만들기
<fmt:parseDate value="2020-04-14" pattern="yyyy-MM-dd" var="d1"/> <fmt:parseDate value="04/14/2020" pattern="MM/dd/yyyy" var="d2"/> <% Date date1 = (Date)pageContext.getAttribute("d1"); Date date2 = (Date)pageContext.getAttribute("d2"); out.println(date1.toString() + "<br>"); out.println(date2.toString() + "<br>"); %> |
JSTL - fmt:formatDate
- java.util.Date 객체의 값을 문자열로 만들기
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
8/29 프로젝트 (0) | 2023.08.29 |
---|---|
8/28 프로젝트 (0) | 2023.08.28 |
[NC7기-84일차(8월25일)] - 웹프로그래밍 65일차 (0) | 2023.08.25 |
[NC7기-83일차(8월24일)] - 웹프로그래밍 64일차 (0) | 2023.08.24 |
8/24 프로젝트 63- mvc 모델 1 (계속) (0) | 2023.08.24 |