서버가 제공하는 리소스는 두가지가 있다
정적리소스 / 동적리소스
: 파일의 형태로 변하지 않는 것들( IMG , HTML , JS,CSS)
: 프로그램들이 생성해 내는 모든 것들 + 스트리밍들 (리소스의 내용이 정적이지 않은 모든 것들)
클라이언트가 요청하면 요청받은 서버에 잇는 톰캣이 받아 요청한 주소에 맞는 클래스를 찾아 매핑한다.
요청에 대한 정보가 필요할때는 HttpServletRequest 객체를 매개변수로 받으면된다.
?뒤의 내용은 QueryString으로 불린다.(Get일때)
모든 전달값은 String이다 , 정수로받고 싶으면 int로 형변환 해야한다.
request.getParameter("name속성") : 파라미터 값
request.getParameterValues("name속성") : 여러 파라미터 값들(배열)
Enumeration enum = request.getParameterNames() : 파라미터의 이름
request.getParameteMap() : 파라미터를 Map형태로 가져옴
클라이언트 : 서비스를 요청하는 애플리케이션
서버 : 서비스를 제공하는 애플리케이션
서버 : 어떤 서비스를 제공하느냐에 따라 서버의 종류가 나뉜다
Email Server : 이메일 서비스를 제공
File Server : 파일 서비스를 제공한다.
Web Server : 웹 서비스들을(웹에서 가능한 모든 것들) 제공한다
1대의 PC에 여러 서버가 있을때 특정 서버를 찾는 역할을 하는것이 포트번호이다
웹서버는 기본이 80 이라 생략 가능하다.
ex ) tomcat 8080은 생략 불가.
1588-0000 라는 대표 번호에서
내부의 여러 부서의 내선번호가 따로 있는 것 같은 느낌
0~1023은 사용 불가 1023 ~ 65535까지
클라이언트에 프로그램을 설치할 필요성 없이 서버에서 제공하도록 도와주는 역할.
서버에만 프로그램이 설치되어있으면 서버에있는 프로그램만 업데이트하면 되서 굉장히 유용하다.
그래서 클라이언트에서는 원격으로 프로그램을 호출하고
서버에 설치되어 있는 프로그램에서 결과만 전달 받으면 된다.
브라우저를 요청하면 톰캣포트(8080)을 찾아가면
쓰레드가 쓰레드풀에서 기다리고 있다가 요청을 받아 처리한다.
서비스 안에 Connector이 있다
어떤 프로트콜로 요청이 들어왔냐에 따라 수행하는 커넥터가 다르다
HTTP1.1
HTTP2
AJP
..
어느 커넥터로 요청이 들어왔는지 확인하고 Engine으로 전달한다.
host 가 있다.(여러개의 호스트가 있을 수도 있다. 보통은 한개)
이 안에 Context가 있다
context는 각각의 WebApp이다
Ch2 , Community , ch3등등 여러 어플리케이션이 있을 수 있다.
하나하나가 프로젝트다
각각의 Context는 서로간에 영향을 끼치지 않는다
또 이 Context안에 Servlet이 존재한다
요청받은 url과 연결된 서블릿이 수행되고 그 수행결과가
클라이언트에게 돌아가는 구조가 톰캣의 구성이다.
요청 => 서버(tomcat) =>
Service(프로토콜 확인) =>
Engine(Host 주소를 확인후 Context(프로젝트) 찾아감.) =>
Context내부의 Servlet(작은 프로그램)을 찾아간다.=>
Servlet 수행후 결과를 클라이언트에게 반환한다.
브레이크포인트 찍고 보는데
프로토콜이 Request와 Response객체를 만든댄다 개신기...
내부뜯으니깐 진짜 무서울정보로 뭐가 많아서 헷갈린다.ㅋㅋ
강의들으면서 적으니깐 조금 난잡하게 적은것 같다
나중에 한번더 정리하는 과정이 필요할 것 같다.