+ @RequestParam에서 name과 value의 차이 : 똑같음!!
@RequestParam, name vs value attributes
+ 보통 서비스 단위(controller) 위주로 파일을 관리한다! 값을 받아오는지 저장하는지에 따라 구분하지는 않음
퀴즈 피드백
public class ResponseDto {
// getter, setter를 통해서만 접근할 수 있게 private을 걸어서 사용함
// spring 입장에선 public인지 private인지 상관X -> getter, setter 있어야만 dto에 값을 저장하고 불러올 수 있음
// public으로 열어놔도 spring에서는 접근할 수 X
// getter, setter => get + 필드이름 / set + 필드이름 -> spring에서 인식할 수 있는 이름 (다르게 설정할 경우 오류 발생)
private String name;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "ResponseDto [name=" + name + ", type=" + type + "]";
}
}
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- test안에 조건문 -->
<c:if test="${memberType =='admin'}" >
<h2>관리자입니다.</h2>
</c:if>
<c:if test="${type == 'morning'}" >
<h2>아침입니다.</h2>
</c:if>
<c:if test="${type != 'morning'}" >
<h2>아침이 아닙니다.</h2>
</c:if>
<c:if test="${type == 'lunch'}" >
<h2>점심입니다.</h2>
</c:if>
<p>jstl choose (switch와 비슷)</p>
<c:choose>
<c:when test="${type== 'morning'}">choose 아침</c:when>
<c:when test="${type== 'lunch'}">choose 점심</c:when>
<c:otherwise>
아침도 점심도 아닙니다
</c:otherwise>
</c:choose>
<p>jstl forEach (반복문)</p>
1~10까지 반복
<c:forEach var="i" begin="1" end="10" step="1">
<p>${i}</p>
</c:forEach>
3-1. 향상된 for문
<p>데이터 리스트 확인</p>
<c:forEach var="dataItem" items="${dataList}">
<p>${dataItem}</p>
</c:forEach>
<c:forEach var="memberItem" items="${memberList}">
<tr>
<td>${memberItem.id}</td>
<td>${memberItem.pw}</td>
<td>${memberItem.name}</td>
</tr>
</c:forEach>
<c:set var="변수명" value="값"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>url 작성</p>
<!-- 변수 미리 선언해놓고 아래에서 써먹기 -->
<c:set var="var1" value="${pageContext.request.servletContext.contextPath}"/>
<!-- 이렇게 이동하면 원래 이동하려고 했던 /SpringProject/jstl3가 아닌 /jstl3로 바로 이동하게됨-->
<a href="/jstl3">jstl3 페이지로 이동!!</a>
<!-- jtsl 자체에서는 contextPath를 제공하지만 그냥 a태그는 제공하지 않아서 변수선언 후 붙여줘야함 -->
<a href="${var1}/jstl3">jstl3 페이지로 이동!!</a>
</body>
</html>
<c:url var="jstlurl" value="${var1}/jstl3">
<c:param name="data1" value="abc" />
<c:param name="data2" value="def" />
</c:url>
<a href="${jstlurl}">jstl3로 이동</a>
<c:redirect url="/jstl1">
<c:param name="data1" value="이거파람전달" />
</c:redirect>
<!-- 값에 <나 >와 같이 태그에서도 사용하는 문자가 포함되어 있는 경우 그 문자 자체로 인식할 것인지에 대해 설정해줄 수 있음 -->
<!-- 기본 값이 true -->
<c:out value="${str2}" escapeXml="true" />
<c:out value="${str1}" escapeXml="false" />
+ jstl에서 숫자 formatting
1. 라이브러리 태그 추가
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="money" value="1507498415600" />
${money}
<fmt:formatNumber type="number" value="${money}" />
<br />
<!-- true가 기본값 -->
<fmt:formatNumber type="number" value="${money}" groupingUsed="true"/>
<br />
<!-- 콤마로 자릿수 구분 필요없는 경우에 false -->
<fmt:formatNumber type="number" value="${money}" groupingUsed="false" />
+ jstl에서 문자열 formatting
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
ex. model에 저장된 데이터의 길이를 가져와서 반복문 돌리기
<c:forEach var="i" begin="0" end="${fn:length(memberList)}" step="1">
<p>${memberList[i].id}</p>
<p>${memberList[i].pw}</p>
<p>${memberList[i].name}</p>
</c:forEach>
jstl fn 정리 / jstl functions 정리
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>fn length</h1>
fn:length ${fn:length('abcdef')}
<hr />
<%-- 대상 문자열의 길이를 보여줌 --%>
주입된 글자 길이 ${fn:length(tempstr)}
<hr />
<%-- 대상 문자열의 글자 타입(대문자, 소문자)을 바꿔서 보여줌 --%>
대문자 ${fn:toUpperCase(tempstr)}
<hr />
<%-- 대상 문자열에 포함되어 있는 특정 문자열을 다른 문자열로 바꿔서 보여줌 --%>
replace ${fn:replace(tempstr, " ", "-")}
<hr />
<%-- 대상 문자열의 시작 인덱스부터 끝 인덱스까지 잘라서 보여줌 --%>
substring ${fn:substring(tempstr, 0, 6)}
<hr />
<%-- 대상 문자열에 어떤 문자가 포함되어 있는지 --%>
contains ${fn:contains(tempstr, "mvc")}
<hr />
<%-- 대상 문자열에 어떤 문자의 index --%>
indexOf ${fn:indexOf(tempstr, "mvc")}
</body>
</html>