톰캣이 HttpServletRequest 객체를 만든다.
이곳에 요청한 정보를 답는다
톰캣이 main 메서드 매개변수로 넘겨줌
클라이언트 : 서비스를 요청하는 애플리케이션
서버 : 서비스를 제공하는 애플리케이션
WAS : 웹 애플리케이션을 서비스하는 서버
WEB Server : Web을 서비스
Web Application Server :
Tomcat의 내부구조
Thread Pool : 쓰레드들을 미리 만들어 두었다가 요청이 오면 이 중에 하나의 쓰레드가 맡아서 요청을 처리
Server(Tomcat)안에 Service가 있고 Service안에 실제로 서비스를 처리하는 Engine이 있다.
Context : 하나의 웹 애플리케이션
Servlet : Context안에 서블릿이 존재한다. 서블릿은 작은 서버 프로그램이라는 뜻이다. 컨트롤러 = 서블릿 / 둘 다 서버 픞로그램
<정리> Tomcat Server 안에 Service가 있고 Service를 처리하는게 Engine. Engine안에는 Host가 여러 개 있을 수 있고 Host안에도 Context가 여러개 있을 수 있다. Context = Spring Projet, 그 안에 있는 프로그램 Servlet
Tomcat의 설정 파일 - server.xml, web.xml
프로토콜 : 서로 간의 통신을 위한 약속, 규칙. 주고 받을 Data에 대한 형식을 정의한 것.
HTTP(Hyper Text Transfer Protocol) : 텍스트를 전송하기 위한 프로토콜(약속, 규칙)
ㄴ특징 : 단순하고 읽기 쉽다. - 텍스트 기반의 프로토콜
상태를 유지하지 않는다.(stateless) - Client 정보를 저장 X
이것을 보완하기 위해서 사용하는 것이 쿠키와 세션
GET - read : 단순히 서버 리소스를 가져온다. 즉 읽기
POST - write : 서버에 데이터 제공. body에 들어감
텍스트 파일 : 문자만 저장되어있는 파일
바이너리 파일 : 문자 + 숫자가 저장되어 있는 파일
MIME : HTTP는 텍스트 기반이다. 그럼 텍스트밖에 전송을 못할까? 아님. 우리는 이미 브라우저에서 이미지, 동영상을 다보고 있음. 전송할 때 MIME(전송할 데이터의 타입)을 적어주면 됨.
Base64 : 바이너리 데이터를 텍스트 데이터로 변환할 때 사용
관심사의 분리
OOP 5대 설계 원칙 - SOLID
SRP - 단일책임원칙 : 하나의 메서드 하나의 책임(관심사)
코드의 분리 : 관심사 분리, 변하는 것, 자주 변하지 않는 것의 분리, 공통(중복)코드의 분리
입력의 분리
출력의 분리
MVC 패턴
DispatcherServlet이 앞에서 입력처리, Model을 만든 다음에 그걸 Controller에게 넘겨줌 Controller가 그걸 받고 결과를 저장해서 주면 그걸 View에 전달. 뷰에서는 작업한 결과를 가지고 최종 응답을 만들어서 Client에게 보냄.
<MVC>
1. 입력받을 값들을 매개변수로 선언
2. Model을 선언해서 작업을 처리
3. Model에 작업 결과를 저장
4. 이 작업 결과를 보여줄 View 반환
5. DispatcherServlet이 작성 결과가 저장되어있는 Model을 View에다 전달.
6. 그래서 View는 Data가 담겨있는 Model 객체에서 값을 읽을 수 있음.
servlet-context.xml : 웹 관련되지 않은 설정파일
Singleton : default. 1개
Prototype : 요청할 떄마다 객체 생성. iv 사용 가능(서버의 부담이 큼)
JSP(HTML 안에 Java) : 자바를 기반으로 한 웹 개발 기술로, HTML 코드 안에 Java코드를 삽입하여 동적인 웹 페이지를 생성할 수 있게 해줌
서블릿(Java안에 HTML) : Java를 기반으로 한 웹 애플리케이션 기술로, 서버 측에서 실행되는 프로그램. 주로 HTTP 프로토콜을 통해 브라우저의 요청과 응답을 처리하는 데 사용.
JSP의 기본 객체 : 생성없이 사용할 수 있는 객체
- request : 요청 정보가 담겨있는 객체
- response : 요청에 응답을 작성할 때 사용
- session : HTTP session을 구현한 객체. 세션 정보 저장에 사용
유효범위 4개
1.pagecontext 저장소 : EL에서 사용하는 정도
접근 범위 페이지안, data 저장소, map 형태
2. application
접근 범위 : web app 전체에서 접근 가능한 저장소, 1개만 존재(전역 저장소) map 형태
3.session : client마다 1개씩 있는 개별 저장소. 쿠키를 이용해서 이 세션 객체가 누구인지 연결해주는 역할
4.request : 요청 시마다 생기고 서로 독립적이다.
app>session>request>page : 가능하면 request에 저장하는게 제일 좋다. session은 서버부담이 높음
@URL 패턴 : @WebServlet으로 서블릿을 URL에 매핑할 때 사용
서블릿 등록 시 childern에 저장된다. 또 url 패턴하고 서블릿을 연결해줌.
스프링에서는 모든 요청을 Dispatcherservlet이 받는다.
EL : request 객체에 저장을 해야지만 EL로 읽을 수 있다.${}
JSTL
Filter : 코드분리, 중복제거 / 요청 또는 응답에 대해 추가 작업을 수행하거나 흐름을 제어할 수 있는 기능.
@RequestParam(기본형, String(생략가능)) : 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션, 생략가능
@ModelAttritubte(참조형(생략가능, 기본적으로 붙어있다고 보면됨) : 적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션
WebDataBinder : 브라우저를 통해서 요청받은 값이 실제 객체에 Binding될 때 중간 역할을 해주는 것
역할
1. 타입변환
2. 데이터 검증
3. 결과 or 에러를(BindingResult에 저장)
4. Controller에 넘겨준다.
@RequestMapping : 맵핑될 URL의 공통 부분을 해당 애너테이션을 클래스에 적용한다.
@GetMapping,@PostMapping 특정 HTTP 메서드 전용
<URL 패턴 매핑>
@WebServlet : 서블릿
@RequestMapping : 스프링
URL 인코딩을 하는 이유?
- 요청을 받는 서버가 어떤 OS를 쓰고 어떤 인코딩을 쓰는지 모른다. 그래서 요청할 때 쓰는 URL에 포함된 글자들은 전부 ASCII여야 함.
redirect : 요청 2, 응담 2
forward : 요청 1, 응답 1
쿠키 : 클라이언트 식별 기술, 아스키 문자만 가능, 서버에서 생성 후 전송, 브라우저에 저장
세션 : 서로 관련된 요청들을 하나로 묶은 것. 쿠키를 이용 개별저장소(session객체)를 서버에서 제공
ㄴ수동종료, 자동종료(타임오버/web.xml 설정 필수)
@ExceptionHandler를 이용한 예외 처리 : 컨트롤러 내에서 발생하는 특정 예외를 처리한다.
@ControllerAdvice : 공통 예외처리 : 여러 컨트롤러에서 공통으로 예외처리 가능하게 해줌
@ResponseStatus : 응답 메시지의 HTTP 상태 코드를 변경할 떄 사용한다.