Servlet 파일을 생성하여 사용할 때
HttpServlet 클래스를 상속 받아서 사용했음
생명 주기가 있음
객체가 만들어지고
init() (1번만 호출됨) → service() doGet(), doPost() → destroy()
GET = url에 데이터를 전달
POST = HttpBody에 데이터를 전달
페이지 지시자를 통해 JSP 자체에서 response에 대한 것을 인코딩함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Redirect = 요청을 종료하고 다시 서버에 요청을 보냄, response 객체를 이용 = 결과를 돌려주기만 하면 됨
Forward = 요청을 이어나감, request 객체를 이용 = 요청에 대한 값을 유지해야함
Form을 이용해서 서버에 데이터를 전달함
전역 변수
web.xml에 설정하고 사용함
Servlet 객체가 사용할 수 있도록 어노테이션 사용
init 과정에서 ServletConfig객체를 통해 변수를 등록함
로컬(지역) 변수
doGet, doPost 에서 사용하는 변수
Cookie = 클라이언트의 시스템에 저장
setMaxAge() : 쿠키의 지속시간을 설정
getName(), getValue() 를 통해 key와 value로 사용
new Cookie() = 쿠키 생성
response.addCookie(testCookie); response 객체에 쿠키를 저장함
클라이언트에 저장되기 때문에 클라이언트가 쿠키를 변경할 수 있었음
서버가 살아있는 한 Session은 유지됨 (서버가 관리), 서버에 부담
HttpSession 객체를 통해 request.getSession() 세션 객체를 만듦
invalidate() 를 통해 세션을 무효화 시켰음
Java Server Page (자바 데이터를 화면에 출력할 수 있게 제시된 스펙)
Java를 사용하기 때문에 내장 객체가 존재함
out - PrintWriter
request - HttpServlet
session - HttpSession
pageContext - this
<% %> = scriptlet 자바 코드 사용
${ } = EL, 출력 전용 로직, 다양한 로직을 수행할 수 없어서 JSTL을 사용함
JNDI가 없으면
context.xml에 Resource에 DB 관련 정보를 설정함
Front Controller : 하나 컨트롤러에서 요청을 전부 받고 하위 컨트롤러에 연결시킴
서블릿에 가기전에 또는 요청이 끝난 후 특정 로직을 처리함
Encoding 설정, 사용자 인증 (Session)
Restful API를 사용하기 위해 PUT, DELETE를 사용 이를 사용하기 위해서
web.xml에 HiddenHttpMethodFilter 를 이용함
특정 이벤트에 대해 특정 로직을 처리함
JPA (Java Persistent API): Java의 ORM API 표준 명세
ORM (Object Relation Mapping): 객체가 테이블이 되도록 매핑 시켜주는 기술
대표 프레임 워크 : (Mybatis, Hibernate)
Hibernate 구현체가 SQL 쿼리를 만들어 줌
사용하기위해 Maven이 필요함 (라이브러리 의존성, 모듈, 빌드)
pom.xml에 라이브러리를 설정함
resources 하단에 persistence.xml에 DB 관련 정보를 설정함
ddl에 대한 관리를 create, none로 사용함
Entity : DB 테이블과 매핑되는 Java의 객체
EntityManagerFactory : EntityManager 생성 및 관리
EntityManager : Entity 관리
EntityTransaction : 작업 단위 관리 (begin ~ )
Entity Life 사이클 :
manager, removed, new, detached 사이클로 관리함
DTO를 @Entity 로 관리하여 컬럼화 시켰음
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
객체를 개발자가 아닌 컨테이너가 관리 (Context = 영역)
DI = 의존성 관계 주입, @Autowired = "필요한 객체니까 넣어줘"
Bean = 스프링 컨테이너가 관리하는 객체 (xml에 등록하고 사용할 수 있었음)
생성자, 프로퍼티(set)를 이용하여 객체를 생성함
생성자 주입 방식 (객체)
@RequiredArgsContrutor 어노테이션을 이용하여 사용
해당 필드에 final을 이용함
필드 주입 방식 (객체)
@Autowired(required = false)
@Conponent = 스프링 컨테이너가 관리하는 컴포넌트 (Bean 보다 큰 단위)
servlet-context.xml = conponent scan을 해야함
IoC = 제어의 역전
mybatis, mybatis-spring, ojdbc8 라이브러리가 필요했음
mybatis-config.xml에 설정값을 지정
mybatis-mapper.xml에 Mapper를 등록함
서비스에서 @Transactional 을 통해 하나의 작업단위로 설정할 수 있었음
DispatcherServlet 을 통해 FrontController로 전부 받을 수 있음
@Controller, @Service, @Mapper 어노테이션을 통해 스프링이 제어함
관점 지향적 프로그래밍
해당 메소드가 시작할 때, 실행되고난 후 실행되는 방식
필터는 서블릿을 기준으로 실행, AOP는 컨트롤러 기준의 실행
Pointcut = 특정 조건에 의해 필터링된 조인포인트 (기준)
Advice = 실행 시점
Aspect = Pointcut + Advice
@Around = 전부 처리함
JoinPoint 객체에 excution을 받음
proceed() 로 실행
? = 쿼리스트링
@RequestParam = request.getParametr
@ModelAttribute : 해당 값을 객체에 매핑해서 넘겨줌
@PathVariable : mapping url의 #{} 변수를 받음
객체를 리턴할 때 ResponseEntity 타입으로 리턴함
Jackson 라이브러리를 통해 이것을 json 객체로 리턴함
스프링 컨테이너 자체에서 사용
컨트롤러에 도달 전, 도달 후 특정 로직을 처리
인증, 인가 등과 같은 공통 작업
consumes = 컨트롤러 입장에서 어떤 데이터를 소비할거냐
produces = 컨트롤러 입장에서 어떤 데이터를 보내줄거냐
@CrossOrigin(origins = {*}) = 해당 아이피 요청을 허가함