다이어트 라이브러리라고 합니다
코드의 양을 줄여주는 라이브러리
VO만들때 반복되는 코드를 줄여줘요!
클래스위 혹은 필드 위에 쓸 수 있어요
@Getter // 클래스 레벨에서의 사용
@NoArgsConstructor
@AllArgsConstructor
public class Member {
private String memberName;
@Setter // 필드 레벨에서의 사용
private int memberAge;
private String memberAddr;
}
@Getter: Getter
@Setter: Setter
@NoArgsConstructor : 기본 생성자
@AllArgsConstructor : 모든 필드를 포함하는 생성자
@RequiredArgsConstructor: 특정 인자만 가지고 생성자 만들기
@RequiredArgsConstructor
public class Member {
@NonNull
private String memberName;
private int memberAge;
@NonNull
private String memberAddr;
}
@ToString: 자동으로 toString 오버라이딩 해주기
@ToString
public class Member {
private String memberName;
@ToString.Exclude // ToString에 제외할 필드에 적용
private int memberAge;
private String memberAddr;
}
@EqualsAndHashCode: Equals method를 오버라이딩 해줘요, 객체를 비교하기 위한 Equals 오버라이딩
@Data : @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 4가지가 자동으로 포함 됩니다. 디폴트와 전체생정자는 따로 추가 해줘야 해요
Tag Library
원래 <% %> if, for문을 JSP에서 이용했어요.
JSP의 기본으로 들어가 있기 때문에 사용은 간편하지만, 유지보수가 힘들어 져요.
이제는 JSTL을 이용할 꺼에요
JSTL을 사용하기 위해서는 taglib라는 directive를 사용해야 해요
앞으로는 JSP구현을 JSTL + EL로 구현할 거에요
// taglib를 이용하기 위한 설정
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
사용 예시
<!-- 변수를 만들고 값을 할당할 수 있어요 -->
<%
int k = 100;
%>
<!-- 태그를 이용한 변수만들기 -->
<c:set var="num1" value="100" />
<!--제어문 중 대표적인 제어문.. if test는 정해져있는 단어에요-->
<c:if test="${ num1 + myNum > 100 }">
비교하는 값이 100보다 커요!
</c:if>
<br>
<!--조건이 여러개인 경우는 c:if 대신 다른것을 써요! -->
<c:choose>
<c:when test="${ num1 + myNum == 50 }">
50보다 커요~
</c:when>
<c:when test="${ num1 + myNum > 100 }">
100보다 커요!
</c:when>
<c:when test="${ num1 + myNum > 300 }">
300보다 커요?!
</c:when>
<c:otherwise>
아무것에도 해당되지 않아요!
</c:otherwise>
</c:choose>
<!-- 반복문! -->
<!-- 기본적인 형태 - 반복횟수를 알려줘서 반복하는 경우 -->
<ul>
<c:forEach var="tmp" begin="0" end="5" step="1">
<li>${ tmp }</li>
</c:forEach>
</ul>
<ul>
<!-- 일반적으로 집합 자료구조를 이용한 반복처리를 많이 해요! -->
<c:forEach var="name" items="${ myList }">
<li>${ name }</li>
</c:forEach>
</ul>
<!-- formatter를 사용하기 위해 변수를 하나 선언해 보아요! -->
<c:set var="number" value="123456789" />
<c:set var="number1" value="0.783" />
<br>
<br>
<!-- 숫자표현할 때 3자리마다 콤마 표시하기 -->
<fmt:formatNumber value="${ number }" />
<br>
<fmt:formatNumber value="${ number }" type="currency" /><br>
<fmt:formatNumber value="${ number1 }" type="percent" />
@RequestParam
@ModelAttributes
HTTP Request 방식
POST 방식은
protocol, method, url
Header
requestBody 여기에 data가 들어가요
그래서 POST 방식은 requestBody안에 data가 들어가기 때문에 많은 양의 data를 전송할 수 있어요
GET 방식은
protocol, method, url 여기에 queryString으로 들어가요
Header
requestBody 여기에 data가 들어가요
그래서 GET 방식은 url의 길이제한(256자)때문에 많은 양의 data를 전송할 수 없어요!
간단하고, 빠르고, 쉬워요
Log4J2
현재는 version 1.x 버전과 2.x 버전이 함께 있는 상태
<!-- Log4j 설정 -->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:/log4j2.xml</param-value>
</context-param>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener
</listener-class>
</listener>
<Configuration>
<Appenders>
<File name="File_1" fileName="c:/log_test/myLog_1.log"
append="true">
<PatternLayout pattern="%t %-5p %c{2} - %m%n" />
</File>
<File name="File_2" fileName="c:/log_test/myLog_2.log"
append="true">
<PatternLayout pattern="%d - %m%n" />
</File>
<Console name="stdout_1" target="SYSTEM_OUT">
<PatternLayout pattern="%p == %m == %d%n" />
</Console>
<Console name="stdout_2" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd:HH:mm} >> %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="case1" level="warn">
<AppenderRef ref="File_1" />
</Logger>
<!-- additivity="false" 상위 appender를 상속받지 않습니다. 즉, 여기서는 Root를 제외시키는 역할을
합니다. 로그가 중복으로 출력되는것을 제어할 목적으로 사용됩니다. -->
<Logger name="case2" level="info" additivity="false">
<AppenderRef ref="File_2" />
<AppenderRef ref="stdout_1" />
</Logger>
<Logger name="case3" level="debug" additivity="false">
<AppenderRef ref="stdout_1" />
</Logger>
<Root level="INFO">
<AppenderRef ref="stdout_2" />
</Root>
</Loggers>
</Configuration>
Maven: Run AS => maven clean
Tomcat: clean
project: project-> clean
parameter Vo로 받을 때
method에 사용할 때
sessionAttributes와 같이 사용할 때
method에 @modelAttributes의 지정
// 메서드에 붙여서 사용했어요!, 이름을 줘야 해요!
// 이 method는 handler가 호출되기 이전에 자동으로 호출되어요!
// 그리고 해당 메섣의 리턴 값이 Model에 자동으로 등록되어요
@ModelAttribute("v1")
public String creaetString() {
log.debug("log={}", "문자열 객체 생성");
return "문자열 객체 생성";
}
@ModelAttribute("v2")
public User creaetUser() {
log.debug("log={}", "VO 객체 생성!");
User user = new User(20, "카즈하", "르세라핌");
return user;
}
@ModelAttribute("data1")
public int creaetNumber1() {
log.debug("log={}", "1번째 숫자 생성");
return 100;
}
@ModelAttribute("data2")
public int creaetNumber2() {
log.debug("log={}", "2번째 숫자 생성");
return 200;
}
@RequestMapping(value ="/modelAttributes1")
public String myMethod1(
@ModelAttribute("data1") int num1, // 밑에서 파라미터로 받아서 사용할 수 도 있어요!
@ModelAttribute("data2") int num2, // VO를 만들 수 도 있고, ModelAttribute로 만들어진 결과를 가져올 수 도 있어요
Model model
) {
log.debug("log={}", "handler method호출!");
model.addAttribute("sum", num1+num2);
return "sample05/modelResult";
}
String, Number, VO등으로 모두 넣어서 사용 가능합니다.
@Autowired -> 자동 주입
기본적으로 type을 기반으로 주입할 Bean을 찾아요
만약 못찾으면 이름 가지고 찾아요!
@Resource => @Autowired기능을 해요!(자동주입)
이름으로 Bean을 기반으로 주입할 Bean을 찾아요
만약 못찾으면 Type을 가지고 찾아요
@Service
@Repository
두개 모두 @Component의 하위 annotation이에요