Day 85

dokiru·2023년 5월 30일
0

학원

목록 보기
46/51

+ @RequestParam에서 name과 value의 차이 : 똑같음!!
@RequestParam, name vs value attributes

  • name이 원래 속성이고 value가 별칭같은거여서 똑같이 사용 가능
  • 하지만 name의 값과 value의 값이 다르면 exception 발생

+ 보통 서비스 단위(controller) 위주로 파일을 관리한다! 값을 받아오는지 저장하는지에 따라 구분하지는 않음


퀴즈 피드백

  • dto에 getter, setter를 설정할 때 source - Generate Getters And Setters로 만들어지는 이름을 기준으로 spring이 인식할 수 있음
  • class 안에 있는 필드가 public이어도 스프링에서는 접근해서 값을 불러오거나 저장할 수 X
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 + "]";
	}
	
}

jstl

  • JavaServer Pages Standard Tag Library의 약어
  • Java 코드를 바로 사용하지 않고 HTML 태그(<>) 형태로 직관적인 코딩을 지원하는 라이브러리
  • pom.xml에 dependency안에 jstl 추가해줘야함
  • jstl을 사용하려고 하는 jsp에 taglib 추가
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. if문 (c:if)
<!-- 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>
  1. switch문 (c:choose)
<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>
  1. 반복문 : controller단에서 저장을 해줘야 view에서도 불러와서 반복문 돌릴 수 있음 (c:forEach)
  • var: 출력할 때 사용하려고 하는 변수 값
  • begin, end : 어디서부터 시작해서 어디에서 끝날건지
  • step : 숫자가 얼마씩 증가할건지
<p>jstl forEach (반복문)</p>
	1~10까지 반복
	<c:forEach var="i" begin="1" end="10" step="1">
		<p>${i}</p>
	</c:forEach>

3-1. 향상된 for문

  • items : 반복 돌릴 리스트
<p>데이터 리스트 확인</p>
<c:forEach var="dataItem" items="${dataList}">
	<p>${dataItem}</p>
</c:forEach>
  • 반복을 돌리는 것이 객체(dto)의 리스트인 경우 -> 객체의 키로 접근
<c:forEach var="memberItem" items="${memberList}">
	<tr>
		<td>${memberItem.id}</td>
		<td>${memberItem.pw}</td>
		<td>${memberItem.name}</td>
	</tr>
</c:forEach>
  1. 변수 선언 (c:set)
  • 형식
<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>
  1. 링크로 parameter 키값 설정 및 보내기 (c:url)
    : a 태그와 달리 contextPath 넣어줄 필요 X
<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>
  1. 리다이렉트 (c:redirect)
    : 파라미터값 전달하면서 리다이렉트 할 수도 있음
<c:redirect url="/jstl1">
	<c:param name="data1" value="이거파람전달" />
</c:redirect>

  1. 화면 상에 출력 (c:out)
<!-- 값에 <나 >와 같이 태그에서도 사용하는 문자가 포함되어 있는 경우 그 문자 자체로 인식할 것인지에 대해 설정해줄 수 있음 -->
					<!-- 기본 값이 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" %>
  1. fmt:formatNumber 태그로 사용
<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>
profile
안녕하세요!

0개의 댓글