Servlet
1. Servlet 이란 ?
- 웹 기반의 요청에 동적으로 동작하는 서버사이드의 자바 프로그램
1-1. Servlet을 사용한다면
- 사용자의 Input을 수집(Form을 통하여)
- 데이터베이스 혹은 기타 소스로부터 레코드를 읽어 들일 수 있다.
- 동적으로 Web page를 생성 가능하다.
1-2. Static Pages VS Dynamic Pages
1-2-1. Static Pages 흐름
1-2-2. Dynamic Pages 흐름
2. Apache Tomcat
- Servlet/JSP container로 가장 많이 알려져 있다.
- 아파치 톰캣(Apache Tomcat)은 아파치 소프트웨어 재단에서 개발된 서블릿 컨테이너(또는 웹 컨테이너)만 있는 웹 애플리케이션 서버이다.
- 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다.
- 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 한다.
2-1. Apache 이란?
- Apache는 Http Web Server (Http 요청을 처리)
- 클라이언트가 Get, Post 등의 메소드를 이용해 요청을 하면 웹서버가 어떤 기능을 돌려주는 역할
2-2. Tomcat 이란?
- Tomcat은 흔히 말하는 WAS
WAS(Web Application Service)
Web Server와 Web Container의 결합으로, 다양한 기능을 Container에 구현하여 다양한 역할을 수행할 수 있는 서버
웹컨테이너는 클라이언트의 요청이 있을 때, 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에게 전달한다.
2-3. Web Service Architecture
Web Service System environment
- Client -> Web Server (1 Tier)
- Client -> Web Application Server -> Database (2 Tier)
- Client -> Web Server(Load Balancing, L4 Switch) -> Web Application Server -> Database (3 Tier)
3 Tier Architecture는 MSA(Micro Service Architecture) 구조이다.
2-4. 정리
- WAS도 Web Server로서 역할을 수행 할 수 있기 때문에 Apache와 Tomcat을 잘 구별하지 못하면 혼란이 생길 수 있다.
WAS만 쓰지않고 Web Server를 따로쓰는 이유
Web Server는 정적인 데이터를 처리하는 서버이다.
- 이미지나 단순 HTML 파일과 같은 리소스를 제공하는 서버는 웹서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적
WAS는 동적인 데이터를 처리하는 서버이다.
- DB와 연결되어 데이터를 주고받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용해야한다.
두 서버의 목적의 차이 때문에 두 개의 서버를 연동해서 사용하면 더욱 효과적인 서비스를 제공할 수 있다.
사용자의 요청은 HTTP 웹 서버를 통하여 받고 내부 데이터 조작은 WAS를 통해 처리한다면, 정적인 데이터와 동적인 데이터를 효과적으로 처리가 가능하다.
3. web.xml
- web.xml은 배치 설명(deployment descriptor)
- 서블릿 컨테이너에 배포할 서블릿과 서블릿에 연결할 URL을 지정
역할
- Establising aliases : 실제 서블릿 클래스에 이름을 지어줌
- Mapping : URL과 서블릿 이름을 Mapping
4. Servlet Program And Life Cycle
4-1. Servlet Program
- HTTP Request가 오면 서버는 Servlet Container에게 위임시킴
- Servlet Container는 service()메서드를 호출하기 전에 Servlet을 Load
- Servlet Container는 여러 멀티 스레드로부터 다중 요청을 처리한다. (각각의 스레드는 싱글 인스턴스의 서블릿에 의하여 실행된다)
4-2. Servlet Life Cycle
- 서블릿 인스턴스가 생성될 때 init()을 호출해 load
- 매 요청을 받을 때 마다 서블릿이 service()를 호출
- 서블릿이 unload될 때 distroy()를 호출
service()메서드는 HTTP Request Type을 확인(GET, POST, PUT, DELETE, etc) 그리고 그에 맞게 doGet(), doPost(), doPut(), doDelete() 실행
servlet은 적어도 하나의 메서드를 오버라이딩 한다.
5. HttpServletRequest / HttpServletResponse Class
5-1. HttpServletRequest Class
- Form으로 부터 데이터를 읽는다.
- getParameter() : form parameter 값을 얻음
- getParameterValues() : form parameter가 여러개의 값이라면 해당 메서드를 통해 값을 얻음(ex - CheckBox)
- 형 변환을 적절하게 해야 한다.
5-2. HttpServletResponse Class
- getWrite()메서드를 호출하면 PrinterWrite 핸들을 얻는다.
6. Servlet Concurrency
- Java Servlet Container는 보통 다중 스레드 환경이다.
- 상호 배제에 대하여 생각해야함(전역 변수 접근 시)