Servlet

1. Servlet 이란 ?

  • 웹 기반의 요청에 동적으로 동작하는 서버사이드의 자바 프로그램

1-1. Servlet을 사용한다면

  • 사용자의 Input을 수집(Form을 통하여)
  • 데이터베이스 혹은 기타 소스로부터 레코드를 읽어 들일 수 있다.
  • 동적으로 Web page를 생성 가능하다.

1-2. Static Pages VS Dynamic Pages

1-2-1. Static Pages 흐름

StaticPages

1-2-2. Dynamic Pages 흐름

DynamicPages

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

WebServiceArchitecture

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

ServletProgramLifeCycle

4-1. Servlet Program

  1. HTTP Request가 오면 서버는 Servlet Container에게 위임시킴
  2. Servlet Container는 service()메서드를 호출하기 전에 Servlet을 Load
  3. Servlet Container는 여러 멀티 스레드로부터 다중 요청을 처리한다. (각각의 스레드는 싱글 인스턴스의 서블릿에 의하여 실행된다)

4-2. Servlet Life Cycle

  1. 서블릿 인스턴스가 생성될 때 init()을 호출해 load
  2. 매 요청을 받을 때 마다 서블릿이 service()를 호출
  3. 서블릿이 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는 보통 다중 스레드 환경이다.
    • 상호 배제에 대하여 생각해야함(전역 변수 접근 시)
Share :

Comments