일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- oracle
- Java
- 다형성
- 정수형타입
- 객체 비교
- 컬렉션프레임워크
- abstract
- 어윈 사용법
- 생성자오버로드
- 컬렉션 타입
- 한국건설관리시스템
- 환경설정
- 자동차수리시스템
- 추상메서드
- 제네릭
- 오라클
- exception
- 참조형변수
- 예외미루기
- GRANT VIEW
- cursor문
- 대덕인재개발원
- 인터페이스
- NestedFor
- EnhancedFor
- 집합_SET
- 메소드오버로딩
- 자바
- 사용자예외클래스생성
- 예외처리
- Today
- Total
거니의 velog
231127_SPRING 2 (4-1) 본문
[JSTLHomeController.java]
package kr.or.ddit.controller.jsp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/jstl")
public class JSTLHomeController {
/*
* 5. 표준 태그 라이브러리(JSTL)
*
* - 많은 개발자들이 JSP에서 코드를 깔끔하게 작성하기 위해 커스텀 태그를 만들어왔는데, 이런 중복되는 노력을 없애기 위해서 나온 것이 바로 JSTL이다.
*
* 1) core 태그 라이브러리
*
* 요소 | 설명
* -------------------------------------------------------------------------------------
* <c:out> | JSPWriter에 값을 적절하게 처리한 후에 출력한다.
* <c:set> | JSP에서 사용할 변수를 설정한다. (setter)
* <c:remove> | 설정한 변수를 제거한다.
* <c:catch> | 예외를 처리한다.
* <c:if> | 조건을 지정하고 지정된 조건과 일치하는 처리 내용을 구현한다.
* <c:choose> | 여러 조건을 처리할 때 사용한다.
* <c:when> | 여러 조건을 지정하고 지정한 조건과 일치하는 처리 내용을 구현한다. <c:choose> 요소에서 사용한다.
* <c:otherwise> | <c:when>요소에서 지정한 조건에 모두 일치하지 않은 때 처리할 내용을 구현한다. <c:choose> 요소에서 사용한다.
* <c:forEach> | 컬렉션이나 배열의 각 항목을 처리할 때 사용한다.
* <c:forTokens> | 구문자로 구분된 각각의 토큰을 처리할 때 사용한다.
* <c:import> | URL을 사용하여 다른 자원을 삽입한다.
* <c:url> | URL을 재작성한다.
* <c:redirect> | 지정한 URL에 리다이렉트한다.
* <c:param> | 파라미터를 지정한다.
* -------------------------------------------------------------------------------------
*
* [ taglib 지시자 사용 ::: <%@ tablib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ]
*
* 2) fmt 태그 라이브러리
*
* 요소 | 설명
* -------------------------------------------------------------------------------------
* <fmt:formatNumber> | 숫자를 형식화한다.
* <fmt:parseNumber> | 문자열을 숫자로 변환한다.
* <fmt:formatDate> | Date 객체를 문자열로 변환한다.
* <fmt:parseDate> | 문자열을 Date 객체로 변환한다.
* -------------------------------------------------------------------------------------
*
* [ taglib 지시자 사용 ::: <%@ tablib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> ]
*
* 3) function 태그 라이브러리
*
* 요소 | 설명
* -------------------------------------------------------------------------------------
* <fn:contains> | 지정한 문자열이 포함되어 있는지 판단한다.
* <fn:containsIgnoreCase> | 지정한 문자열이 대문자/소문자를 구분하기 않고 포함되어 있는지 판단한다.
* <fn:startsWith> | 지정한 문자열이 시작하는지 판단한다.
* <fn:endsWith> | 지정한 문자열로 끝나는지 판단한다.
* <fn:indexOf> | 지정한 문자열이 처음으로 나왔을 때의 인덱스를 구한다.
* <fn:length> | 컬렉션 또는 배열의 요소 개수, 문자열 길이를 구한다.
* <fn:escapeXml> | 지정한 문자열을 XML 구문으로 해석되지 않도록 이스케이프한다.
* <fn:replace> | 문자열을 치환한다.
* <fn:toLowerCase> | 문자열을 소문자로 변환한다.
* <fn:toUpperCase> | 문자열을 대문자로 변환한다.
* <fn:trim> | 문자열을 trim 한다.
* <fn:substring> | 지정한 범위에 해당하는 문자열을 잘라낸다.
* <fn:substringAfter> | 지정한 문자열에 일치하는 이후의 문자열을 잘라낸다.
* <fn:substringBefore> | 지정한 문자열에 일치하는 이전의 문자열을 잘라낸다.
* <fn:join> | 문자열 배열을 결합해서 하나의 문자열을 만든다.
* <fn:split> | 문자열을 구분자로 분할해서 문자열 배열을 만든다.
* -------------------------------------------------------------------------------------
*
* [ taglib 지시자 사용 ::: <%@ tablib uri="http://java.sun.com/jsp/jstl/function" prefix="fn" %> ]
*
* 6. 코어 태그
*
* - 조건분기나 반복처리 그리고 변수의 지정 등과 같이 논리적인 처리를 위해 사용되는 스크립트 코드를 대체하기 위한 태그를 제공한다.
*
* 1) <c:out>
*
* - JSPWriter에 값을 적절하게 처리한 후에 출력한다.
* - 단순히 값을 출력하는 것에 끝나는게 아니라, 값의 형태에 따라 출력되는 최종 결과가 달라질 수 있다. (데이터 입력값 확인차)
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | Object | 출력할 값
* escapeXml | boolean | 특수 문자를 변환할지의 여부
* defalut | Object | value의 결과값이 null인 경우 출력할 값(대신 출력함)
* -------------------------------------------------------------------------------------
*
* 2) <c:set>
*
* - JSP에서 사용할 변수를 설정한다.
* - VO의 setter와 같은 기능을 담당한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* var | String | EL 변수 이름
* value | Object | 변수에 할당할 값
* scope | String | 변수를 생성할 영역, 기본값을 page
* target | Object | 프로퍼티 값을 설정할 객체 지정
* property | String | 프로퍼티 이름
* -------------------------------------------------------------------------------------
*
* 3) <c:remove>
*
* - 설정한 변수를 제거한다.
* - 프로퍼티에 설정되어 있는 변수를 제거할 수 있다. (var에 설정된 변수)
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* var | String | 삭제할 EL 변수 이름
* scope | String | 삭제할 변수가 포함된 영역
* -------------------------------------------------------------------------------------
*
* 4) <c:catch>
*
* - 예외를 처리한다.
* - 예외처리는 EL안에서 발생하는 에러는 catch 문 안에서 설정이 어렵다(EL안에서 발생하는 에러는 EL이 알아서 처리)
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* var | String | 예외를 저장할 EL 변수 이름
* -------------------------------------------------------------------------------------
*
* 5) <c:if>
*
* - 조건을 지정하고 지정된 조건과 일치하는 처리 내용을 구현한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* test | boolean | 검사 조건
* var | String | 검사 조건의 계산 결과값을 저장할 EL 변수
* -------------------------------------------------------------------------------------
*
* 6) <c:choose>
*
* - 여러 조건을 처리할 때 사용한다.
*
* *** 유의사항 : 주석을 달면 안된다. (구문 에러가 발생한다.)
*
* 7) <c:when>
*
* - 여러 조건을 지정하고 지정한 조건과 일치하는 처리 내용을 구현한다. <c:choose> 요소에서 사용한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* test | boolead | 출력할 값
* -------------------------------------------------------------------------------------
*
* 8) <c:otherwise>
*
* - <c:when> 요소에서 지정한 조건에 모두 일치하지 않을 때 처리할 내용을 구현한다. <c:choose> 요소에서 사용한다.
* - <c:when> 과 셋트
*
* 9) <c:forEach>
*
* - 컬렉션이나 배열의 각 항목을 처리할 때 사용한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* var | String | 몸체에서 사용할 EL 변수 이름
* items | Object | 반복 처리할 데이터
* varStatus | String | 루프 상태를 저장할 EL 변수 이름 (index, count를 얻을 수 있다)
* begin | int | 시작 인덱스 값
* end | int | 끝 인덱스 값
* step | int | 인덱스 증분 값
* -------------------------------------------------------------------------------------
*
* 10) <c:forTokens>
*
* - 구분자로 구분된 각각의 토큰을 처리할 때 사용한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* var | String | 몸체에서 사용할 EL 변수 이름
* items | Object | 구분자로 구분 처리할 데이터
* delims | String | 구분자
* varStatus | String | 루프 상태를 저장할 EL 변수 이름
* begin | int | 시작 인덱스 값
* end | int | 끝 인덱스 값
* step | int | 인덱스 증분 값
* -------------------------------------------------------------------------------------
*
* 11) <c:import>
*
* - URL을 사용하여 다른 자원을 삽입한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* url | String | 읽어올 URL
* var | String | 읽어온 결과를 저장할 변수 이름
* scope | String | 변수를 저장할 영역
* charEncoding | String | 결과를 읽어올 때 사용할 캐릭터 인코딩
* -------------------------------------------------------------------------------------
*
* 12) <c:url>
*
* - URL을 재작성한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | Object | 읽어올 URL
* var | String | 읽어올 결과를 저장할 변수 이름
* scope | String | 변수를 저장할 영역
* -------------------------------------------------------------------------------------
* value 속성값의 두 가지 타입
* - 절대 URL : 완전한 URL이다.
* - 상대 URL : > 웹 애플리케이션 내에서의 절대 경로 : '/' 로 시작하는 경로 (ex) /board/list.jsp
* > 현재 JSP에 대한 상대 경로 : '/' 로 시작하지 않는다. (ex) ../board/list.jsp
* 웹 애플리케이션 내에서의 절대 경로를 사용할 경우 실제로 생성되는 URL은 컨텍스트 경로를 포함한다.
*
* 13) <c:redirect>
*
* - 지정한 URL에 리다이렉트한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* url | String | 리다이렉트 할 URL
* context | String | 컨텍스트 경로
* -------------------------------------------------------------------------------------
*
* 14) <c:param>
*
* - url 내 셋팅 파라미터가 존재하는 경우, <c:param>을 이용해 파라미터를 설정할 수 있다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* name | String | 파라미터 이름
* value | Object | 파라미터 값
* -------------------------------------------------------------------------------------
*/
}
// c:out escapeXml과 default 속성을 활용한 테그스 (excapeXml 속성의 기본값은 true이다.)
// default 속성은 전달받은 값이 null인 경우 대체할 값이다.
@RequestMapping(value = "/home0101", method = RequestMethod.GET)
public String home0101(Model model) {
Member member = new Member();
member.setUserId("<p>hongkd<>&%0101</p>");
member.setPassword(null);
model.addAttribute("member", member);
return "home/jstl/home0101";
}
[home0101.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0101</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>1) escapeXml 속성의 기본값은 true이고, 특수문자를 변환한다.</p>
<table border="1">
<tr>
<td>member.userId</td>
<td>${member.userId }</td>
</tr>
<tr>
<td>member.userId</td>
<td><c:out value="${member.userId }" /></td>
</tr>
<!--
escapeXml 속성의 기본값은 true이고, 특수문자를 변환하여 출력한다(태그가 포함되어 있다면 태그가 함께나옴)
escapeXml 속성을 false로 설정하면 태그를 인식하여 출력한다(태그가 태그의 역할을 하도록 출력된다.)
-->
<tr>
<td>member.userId(escapeXml false)</td>
<td><c:out value="${member.userId }" escapeXml="false" /></td>
</tr>
<!--
default 속성을 설정하면, 넘어온 값이 null인 경우에 default에 설정되어 있는 값으로 설정된다.
-->
<tr>
<td>member.password</td>
<td><c:out value="${member.password }" default="12341234" /></td>
</tr>
</table>
</body>
</html>
- http://localhost/jstl/home0101
// c:set을 이용해 값을 출력한다.
// c:set의 몸체를 값으로 사용하여 출력한다.
@RequestMapping(value = "/home0201", method = RequestMethod.GET)
public String home0201(Model model) {
Member member = new Member();
member.setUserId("hongkd0201");
model.addAttribute("member", member);
return "home/jstl/home0201";
}
[home0201.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0201</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>2) c:set을 활용해 값을 출력할 수 있다. (몸체에 값을 설정 후 값을 출력할 수 있다.)</p>
<c:set value="${member.userId }" var="id" />
<table border="1">
<tr>
<td>member.userId</td>
<td>${id }</td>
</tr>
</table>
<c:set var="memId">${member.userId }</c:set>
<table border="1">
<tr>
<td>member.userId</td>
<td>${memId }</td>
</tr>
</table>
</body>
</html>
- http://localhost/jstl/home0201
// c:remove
// c:set 태그로 지정한 변수 memberId를 삭제한다.
@RequestMapping(value = "/home0301", method = RequestMethod.GET)
public String home0301(Model model) {
Member member = new Member();
member.setUserId("hongkd0301");
model.addAttribute("member", member);
return "home/jstl/home0301";
}
[home0301.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0301</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>3) c:remove를 이용해 memberId를 삭제한다.</p>
<c:set value="${member.userId }" var="memberId" />
<table border="1">
<tr>
<td>member.userId</td>
<td>${memberId }</td>
</tr>
</table>
<!--
[참고]
세션 처리 시, 작성한 키가 SessionInfo일 때,
SessionInfo 안에 들어 있는 정보가 member에 해당하는 회원정보 일 때,
세션 안에 들어 있는 회원 정보를 꺼낼 수 있는 방법은? (EL을 활용)
${sessionScope.SessionInfo.userId }
-->
<c:set target="${member }" property="userId" value="hongkildong" />
<table border="1">
<tr>
<td>member.userId</td>
<td>${member.userId }</td>
</tr>
</table>
<c:remove var="memberId"/>
<p>memberId 변수를 삭제 처리 함...</p>
<table border="1">
<tr>
<td>memberId</td>
<td>${memberId }</td>
</tr>
</table>
</body>
</html>
- http://localhost/jstl/home0301
// c:catch
// EL 안에서 발생하는 에러 장보는 EL 안에서 처리하도록 되어 있다보니, var 속성에 설정된 변수로 에러정보를 확인할 수 없다.
@RequestMapping(value = "/home0401", method = RequestMethod.GET)
public String home0401(Model model) {
Member member = new Member();
String[] hobbyArray = {"Music", "Movie"};
member.setHobbyArray(hobbyArray);
model.addAttribute("member", member);
return "home/jstl/home0401";
}
[home0401.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0401</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>4) c:catch</p>
<c:catch var="ex">
${member.hobbyArray[3] }
</c:catch>
<table border="1">
<tr>
<td>에러 발생 내용</td>
<td>
<c:if test="${ex != null }">
${ex }
</c:if>
</td>
</tr>
</table>
</body>
</html>
- http://localhost/jstl/home0401
@RequestMapping(value = "/home0402", method = RequestMethod.GET)
public String home0402(Model model) {
return "home/jstl/home0402";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0401</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>4) c:catch</p>
<%
String[] hobbyArray = {"Music", "Movie"};
%>
<c:catch var="ex">
<%= hobbyArray[3] %>
</c:catch>
<table border="1">
<tr>
<td>에러 발생 내용</td>
<td>
<c:if test="${ex != null }">
${ex }
</c:if>
</td>
</tr>
</table>
</body>
</html>
- http://localhost/jstl/home0402
// c:if
@RequestMapping(value = "/home0501", method = RequestMethod.GET)
public String home0501(Model model) {
Member member = new Member();
member.setForeigner(true);
model.addAttribute("member", member);
return "home/jstl/home0501";
}
// c:when, c:otherwise
@RequestMapping(value = "/home0601", method = RequestMethod.GET)
public String home0601(Model model) {
Member member = new Member();
member.setGender("M");
model.addAttribute("member", member);
return "home/jstl/home0601";
}
[home0501.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0501</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>5) c:if</p>
<c:if test="${member.hobbyArray == null }">
<p>member.hobbyArray == null</p>
</c:if>
<c:if test="${member.hobbyArray eq null }">
<p>member.hobbyArray eq null</p>
</c:if>
<p>test 속성에 true나 false를 값으로 가지는 bool 타입의 변수가 올 수 있다.</p>
<c:if test="${member.foreigner }">
<p>member.foreigner == true</p>
</c:if>
</body>
</html>
- http://localhost/jstl/home0501
[home0601.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0601</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>6) c:when, c:otherwise</p>
<c:choose>
<c:when test="${member.gender eq 'M' }">
<p>남자</p>
</c:when>
<c:when test="${member.gender eq 'F' }">
<p>여자</p>
</c:when>
<c:otherwise>
<p>Others</p>
</c:otherwise>
</c:choose>
</body>
</html>
- http://localhost/jstl/home0601
// c:forEach
@RequestMapping(value = "/home0701", method = RequestMethod.GET)
public String home0701(Model model) {
Member member = new Member();
String[] hobbyArray = {"Music", "Movie"};
member.setHobbyArray(hobbyArray);
model.addAttribute("member", member);
return "home/jstl/home0701";
}
// c:forTokens
@RequestMapping(value = "/home0801", method = RequestMethod.GET)
public String home0801(Model model) {
Member member = new Member();
String hobby = "Music, Movie";
member.setHobby(hobby);
model.addAttribute("member", member);
return "home/jstl/home0801";
}
[home0701.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0701</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>7) c:forEach</p>
<c:forEach items="${member.hobbyArray }" var="hobby">
${hobby }<br />
</c:forEach>
</body>
</html>
- http://localhost/jstl/home0701
[home0801.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0801</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>8) c:forTokens</p>
<c:forTokens items="${member.hobby }" delims="," var="hobby">
${hobby }<br />
</c:forTokens>
</body>
</html>
- http://localhost/jstl/home0801
// c:import
@RequestMapping(value = "/home0901", method = RequestMethod.GET)
public String home0901(Model model) {
return "home/jstl/home0901";
}
[home0901.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0901</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>9) c:import</p>
<p>절대 URL</p>
<c:import url="http://localhost/board/list" />
<c:import url="http://localhost/board/search">
<c:param name="keyword" value="orange" />
</c:import>
<br />
<p>상대 URL - 절대 경로</p>
<c:import url="http://localhost/board/list" />
<p>상대 URL - 상대 경로</p>
<c:import url="../../board/list.jsp" />
</body>
</html>
[BoardController.java]
@RequestMapping(value = "/search", method = RequestMethod.GET)
public String boardSearch(String keyword, Model model) {
model.addAttribute("keyword", keyword);
return "board/search";
}
[search.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>BOARD</title>
</head>
<body>
<h3>SEARCH</h3>
keyword : ${keyword }
</body>
</html>
- http://localhost/jstl/home0901
// c:redirect
@RequestMapping(value = "/home1001", method = RequestMethod.GET)
public String home1001(Model model) {
return "home/jstl/home1001";
}
[home1001.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME1001</title>
</head>
<body>
<h3>7장 JSP</h3>
<p>10) c:redirect</p>
<c:redirect url="http://localhost/board/list"></c:redirect>
<!--
리다이렉트 된 이후엔 아래 내용을 확인할 수 없기 때문에, c:redirect 태그 이후의 코드는 실행되지 않는다.
-->
<p>리다이렉트를 이용하여 list 페이지로 이동합니다.</p>
<h4>페이지 이동방식 : 리다이렉트</h4>
</body>
</html>
- http://localhost/jstl/home1001
[JSPFmttagController.java]
package kr.or.ddit.controller.jsp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/fmttag")
public class JSPFmttagController {
/*
* 7. 숫자 및 날짜 포멧팅 처리 태그
*
* - 숫자 및 날짜의 포맷팅과 관련된 태그이다.
* - 문자열을 숫자로, 문자열을 날짜로 변형하여 사용한다.
*
* 1) <fmt:formatNumber>
*
* - 숫자를 형식화한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | String of Number | 서식에 맞춰 출력할 숫자
* type | String | 어떤 서식으로 출력할지를 정한다.
* pattern | String | 직접 숫자를 출력할 서식을 지정한다.
* var | Stirng | 포맷팅한 결과를 지정할 변수이름
* -------------------------------------------------------------------------------------
* ** type 속성 : number 일 경우 숫자 형식으로, percent일 경우 '%' 형식으로, currency일 경우 통화 형식으로 출력한다.
* 기본 값은 number이다. currency는 속해 있는 국가코드에 맞는 통화 형식이 부여된다.
*
* 2) <fmt:parseNumber>
*
* - 문자열을 숫자로 변환한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | String | 파싱할 문자열
* type | String | value 속성의 문자열 타입을 지정
* pattern | String | 파싱할 때 직접 사용할 서식을 지정한다.
* var | String | 파싱한 결과를 저장할 변수 이름을 지정한다.
* -------------------------------------------------------------------------------------
* ** type 속성 : number, currency, percent가 올 수 있다.
*
* 3) <fmt:formatDate>
*
* - Date 객체를 문자열로 변환한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | java.util.Date | 포맷팅할 날짜 및 시간 값
* type | String | 날짜, 시간 또는 둘 다 포맷팅 할지의 여부를 지정한다.
* dateStyle | String | 날짜에 대해 미리 정의된 포맷팅 스타일을 지정한다.
* timeStyle | String | 시간에 대해 미리 정의된 포맷팅 스타일을 지정한다.
* pattern | String | 파싱할 때 직접 사용할 서식을 지정한다.
* var | String | 파싱한 결과를 저장할 변수 이름을 지정한다.
* -------------------------------------------------------------------------------------
* ** type 속성 : time, date, both 중 한 가지 값을 가질 수 있으며 기본값은 date이다.
* dateStyle 속성 : default, short, medium, long, full 중 한 가지 값을 가질 수 있으며, 기본값은 default이다.
* timeStyle 속성 : default, short, medium, long, full 중 한 가지 값을 가질 수 있으며, 기본값은 default이다.
*
* 4) <fmt:parseDate>
*
* - 문자열을 Date 객체로 변환한다.
*
* 속성 | 타입 | 설명
* -------------------------------------------------------------------------------------
* value | String | 파싱할 문자열
* type | String | 날짜, 시간 또는 둘 다 포맷팅 할지의 여부를 지정한다.
* dateStyle | String | 날짜에 대해 미리 정의된 포맷팅 스타일을 지정한다.
* timeStyle | String | 시간에 대해 미리 정의된 포맷팅 스타일을 지정한다.
* pattern | String | 파싱할 때 직접 사용할 서식을 지정한다.
* var | String | 파싱한 결과를 저장할 변수 이름을 지정한다.
* -------------------------------------------------------------------------------------
* ** type 속성 : time, date, both 중 한 가지 값을 가질 수 있으며 기본값은 date이다.
* dateStyle 속성 : default, short, medium, long, full 중 한 가지 값을 가질 수 있으며, 기본값은 default이다.
* timeStyle 속성 : default, short, medium, long, full 중 한 가지 값을 가질 수 있으며, 기본값은 default이다.
*/
}
// 1) type 속성을 지정하거나 pattern 속성을 지정하여 숫자를 형식화한다.
@RequestMapping(value = "/home0101", method = RequestMethod.GET)
public String home0101(Model model) {
int coin = 100;
model.addAttribute("coin", coin);
return "home/fmttag/home0101";
}
[home0101.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0101</title>
</head>
<body>
<h4>1) type 속성을 지정하거나 pattern 속성을 지정하여 숫자를 형식화한다.</h4>
<p>coin : ${coin }</p>
<p>currency : <fmt:formatNumber value="${coin }" type="currency" /></p>
<p>percent : <fmt:formatNumber value="${coin }" type="percent" /></p>
<p>pattern : <fmt:formatNumber value="${coin }" pattern="000000.00" /></p>
</body>
</html>
- http://localhost/fmttag/home0101
// 2) type 속성이 지정되지 않으면 기본값은 number이다.
@RequestMapping(value = "/home0201", method = RequestMethod.GET)
public String home0201(Model model) {
String coin = "1000";
model.addAttribute("coin", coin);
return "home/fmttag/home0201";
}
[home0201.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0201</title>
</head>
<body>
<h4>2) type 속성이 지정되지 않으면 기본값은 number이다.</h4>
<p>coin : ${coin }</p>
<fmt:parseNumber value="${coin }" var="coinNum" />
<p>coinNum : ${coinNum }</p>
</body>
</html>
- http://localhost/fmttag/home0201
// 3) type 속성이 currency이다.
// 만약, type 속성이 percent인 경우에 넘겨받아야 할 값이 '1000%'과 같이 % 스타일 형태의 값이 넘어가야 한다.
// 그래서 type 속성과 일치하여 값을 파싱할 수 있다.
@RequestMapping(value = "/home0202", method = RequestMethod.GET)
public String home0202(Model model) {
String coin = "₩1000"; // ㄹ + 한자
model.addAttribute("coin", coin);
return "home/fmttag/home0202";
}
[home0202.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0202</title>
</head>
<body>
<h4>3) type 속성이 currency이다.</h4>
<p>coin : ${coin }</p>
<fmt:parseNumber value="${coin }" var="coinCurrency" type="currency" />
<p>coinCurrency : ${coinCurrency }</p>
</body>
</html>
- http://localhost/fmttag/home0202
// 4) pattern 속성을 사용하여 직접 사용할 서식을 지정한다.
@RequestMapping(value = "/home0204", method = RequestMethod.GET)
public String home0204(Model model) {
String coin = "1,000.25";
model.addAttribute("coin", coin);
return "home/fmttag/home0204";
}
[home0204.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0204</title>
</head>
<body>
<h4>4) pattern 속성을 사용하여 직접 사용할 서식을 지정한다.</h4>
<p>coin : ${coin }</p>
<fmt:parseNumber value="${coin }" var="coinPattern" pattern="0,000.00" />
<p>coinPattern : ${coinPattern }</p>
</body>
</html>
- http://localhost/fmttag/home0204
// 6) type 속성을 date로 지정하여 날짜 포멧팅을 한다.
// 7) type 속성을 time으로 지정하여 시간 포멧팅을 한다.
// 8) type 속성을 both로 지정하여 날짜 및 시간 둘 다 포멧팅을 한다.
@RequestMapping(value = "/home0301", method = RequestMethod.GET)
public String home0301(Model model) {
Date date = new Date();
model.addAttribute("now", date);
return "home/fmttag/home0301";
}
[home0301.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0301</title>
</head>
<body>
<h4>6) type 속성을 date로 지정하여 날짜 포멧팅을 한다.</h4>
date default : <fmt:formatDate value="${now }" type="date" dateStyle="default"/><br />
date short : <fmt:formatDate value="${now }" type="date" dateStyle="short"/><br />
date medium : <fmt:formatDate value="${now }" type="date" dateStyle="medium"/><br />
date long : <fmt:formatDate value="${now }" type="date" dateStyle="long"/><br />
date full : <fmt:formatDate value="${now }" type="date" dateStyle="full"/><br />
<h4>7) type 속성을 time으로 지정하여 시간 포멧팅을 한다.</h4>
time default : <fmt:formatDate value="${now }" type="time" timeStyle="default"/><br />
time short : <fmt:formatDate value="${now }" type="time" timeStyle="short"/><br />
time medium : <fmt:formatDate value="${now }" type="time" timeStyle="medium"/><br />
time long : <fmt:formatDate value="${now }" type="time" timeStyle="long"/><br />
time full : <fmt:formatDate value="${now }" type="time" timeStyle="full"/><br />
<h4>8) type 속성을 both로 지정하여 날짜 및 시간 둘 다 포멧팅을 한다.</h4>
both default : <fmt:formatDate value="${now }" type="both" dateStyle="default" timeStyle="default" /><br />
both short : <fmt:formatDate value="${now }" type="both" dateStyle="short" timeStyle="short"/><br />
both medium : <fmt:formatDate value="${now }" type="both" dateStyle="medium" timeStyle="medium"/><br />
both long : <fmt:formatDate value="${now }" type="both" dateStyle="long" timeStyle="long"/><br />
both full : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/><br />
</body>
</html>
- http://localhost/fmttag/home0301
// 9) pattern 속성을 지정하여 날짜를 포맷팅한다.
@RequestMapping(value = "/home0304", method = RequestMethod.GET)
public String home0304(Model model) {
Date date = new Date();
model.addAttribute("now", date);
return "home/fmttag/home0304";
}
[home0304.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0304</title>
</head>
<body>
<h4>9) pattern 속성을 지정하여 날짜를 포맷팅한다.</h4>
<p>now : ${now }</p>
<!--
y : 년
M : 월
d : 일
H : 시간
m : 분
s : 초
z : 나라 표기 시
a : 오전/오후
-->
pattern1 : <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/><br />
pattern2 : <fmt:formatDate value="${now }" pattern="a h:mm"/><br />
pattern3 : <fmt:formatDate value="${now }" pattern="z a h:mm"/><br />
</body>
</html>
- http://localhost/fmttag/home0304
// 11) dateStyle 속성을 각 스타일로 지정하여 문자열을 Date객체로 변환한다.
@RequestMapping(value = "/home0402", method = RequestMethod.GET)
public String home0402(Model model) {
String dateValueShort = "20. 2. 1"; // style short 형태로 지정
String dateValueMedium = "2020. 2. 1"; // style medium 형태로 지정
String dateValueLong = "2019년 2월 1일 (금)"; // style long 형태로 지정
String dateValueFull = "2019년 2월 1일 금요일"; // style full 형태로 지정
model.addAttribute("dateValueShort", dateValueShort);
model.addAttribute("dateValueMedium", dateValueMedium);
model.addAttribute("dateValueLong", dateValueLong);
model.addAttribute("dateValueFull", dateValueFull);
// 각 dateStyle로 지정한 값이 페이지로 넘어가 parsing이 진행될 때, parseDate내에
// dateStyle을 각 값과 일치하는 스타일 형태로 지정해주어야 값이 파싱된다.
return "home/fmttag/home0402";
}
[home0402.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0402</title>
</head>
<body>
<h4>11) dateStyle 속성을 각 스타일로 지정하여 문자열을 Date객체로 변환한다.</h4>
<p>dateStyle 속성을 short로 지정하여 문자열을 Date 객체로 변환한다.</p>
<p>dateValueShort : ${dateValueShort }</p>
<fmt:parseDate value="${dateValueShort }" type="date" dateStyle="short" var="dateShort" />
<p>date : ${dateShort }</p>
<p>dateStyle 속성을 medium로 지정하여 문자열을 Date 객체로 변환한다.</p>
<p>dateValueMedium : ${dateValueMedium }</p>
<fmt:parseDate value="${dateValueMedium }" type="date" dateStyle="medium" var="dateMedium" />
<p>date : ${dateMedium }</p>
<p>dateStyle 속성을 long로 지정하여 문자열을 Date 객체로 변환한다.</p>
<p>dateValueLong : ${dateValueLong }</p>
<fmt:parseDate value="${dateValueLong }" type="date" dateStyle="long" var="dateLong" />
<p>date : ${dateLong }</p>
<p>dateStyle 속성을 full로 지정하여 문자열을 Date 객체로 변환한다.</p>
<p>dateValueFull : ${dateValueFull }</p>
<fmt:parseDate value="${dateValueFull }" type="date" dateStyle="full" var="dateFull" />
<p>date : ${dateFull }</p>
</body>
</html>
- http://localhost/fmttag/home0402
// 12) pattern 속성을 지정하여 문자열을 Date 객체로 변환한다.
@RequestMapping(value = "/home0403", method = RequestMethod.GET)
public String home0403(Model model) {
String dateValue = "2020-02-01 15:00:24";
model.addAttribute("dateValue", dateValue);
return "home/fmttag/home0403";
}
[home0403.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0403</title>
</head>
<body>
<h4>12) pattern 속성을 지정하여 문자열을 Date 객체로 변환한다.</h4>
<p>dateValue : ${dateValue }</p>
<fmt:parseDate value="${dateValue }" pattern="yyyy-MM-dd HH:mm:ss" var="date" />
<p>date : ${date }</p>
</body>
</html>
- http://localhost/fmttag/home0403
[JSPELController.java]
package kr.or.ddit.controller.jsp;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/el")
public class JSPELController {
/*
* 8. EL함수
*
* - JSTL의 표현언어(EL)에서 사용할 수 있는 함수를 제공한다.
*
* fn:contains(str1, str2)
* - 지정한 문자열이 포함되어 있는지 판단한다.
*
* fn:containsIgnoreCase(str1, str1)
* - 지정한 문자열이 대문자/소문자를 구분하지 않고 포함되어 있는지 판단한다.
*
* fn:startsWith(str1, str2)
* - 지정한 문자열로 시작하는지 판단한다.
*
* fn:endsWith(str1, str2)
* - 지정한 문자열로 끝나는지 판단한다.
*
* fn:indexOf(str1, str2)
* - 지정한 문자열이 처음 나왔을 때의 인덱스를 구한다.
*
* fn:length(obj)
* - 컬렉션 또는 배열의 요소 개수, 문자열 길이를 구한다.
*
* fn:escapeXml(str)
* - 지정한 문자열을 XML 구문으로 해석되지 않도록 이스케이프한다.
*
* fn:replace(str, src, dest)
* - 문자열을 치환한다.
*
* fn:toLowerCase(str)
* - 문자열을 소문자로 변환한다.
*
* fn:toUpperCase(str)
* - 문자열을 대문자로 변환한다.
*
* fn:trim(str)
* - 문자열을 trim한다. (공백제거)
*
* fn:substring(str, idx1, idx2)
* - 지정한 범위에 해당하는 문자열을 잘라낸다.
*
* fn:substringAfter(str1, str2)
* - 지정한 문자열에 일치하는 이후의 문자열을 잘라낸다.
*
* fn:substringBefore(str1, str2)
* - 지정한 문자열에 일치하는 이전의 문자열을 잘라낸다.
*
* fn:join(array, str2)
* - 문자열을 구분자로 분할해서 하나의 문자열로 만든다.
*
* fn:split(str1, str2)
* - 문자열을 구분자로 분할해서 문자열 배열을 만든다.
*/
@RequestMapping(value = "/home0101", method = RequestMethod.GET)
public String home0101(Model model) {
String str = "<font>Hello World!</font>";
model.addAttribute("str", str);
return "home/el/home0101";
}
}
[home0101.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME0101</title>
</head>
<body>
<p>str : ${str }</p>
<p>contains : ${fn:contains(str, 'Hello') }</p>
<p>containsIgnoreCase : ${fn:containsIgnoreCase(str, 'Hello') }</p>
<p>startsWith : ${fn:startsWith(str, 'Hello') }</p>
<p>endsWith : ${fn:endsWith(str, 'World!') }</p>
<p>indexOf : ${fn:indexOf(str, 'World!') }</p>
<p>length : ${fn:length(str) }</p>
<p>escapeXml : ${fn:escapeXml(str) }</p>
<p>replace : ${fn:replace(str, 'Hello', 'Hi') }</p>
<p>toLowerCase : ${fn:toLowerCase(str) }</p>
<p>toUpperCase : ${fn:toUpperCase(str) }</p>
<p>trim : ${fn:trim(str) }</p>
<p>substring : ${fn:substring(str, 7, 12) }</p>
<p>substringAfter : ${fn:substringAfter(str, 'World!') }</p>
<p>substringBefore : ${fn:substringBefore(str, 'World!') }</p>
<p>split : ${fn:split(str, ' ') }</p>
<c:set value="${fn:split(str, ' ') }" var="strArray" />
<p>join : ${fn:join(strArray, '-') }</p>
</body>
</html>
- http://localhost/el/home0101
'대덕인재개발원 > 대덕인재개발원_웹기반 애플리케이션' 카테고리의 다른 글
231128_SPRING 2 (5-1) (0) | 2023.11.28 |
---|---|
231127_SPRING 2 (4-2) (0) | 2023.11.27 |
231124_SPRING 2 (3-2) (1) | 2023.11.24 |
231124_SPRING 2 (3-1) (2) | 2023.11.24 |
231123_SPRING 2 (2-3) 과제 (0) | 2023.11.23 |