Servlet API Documentation
Package javax.servlet.http
Class HttpServlet

Servlet

컨테이너(서블릿 엔진)에 의해서 관리되는 자바기반 웹 컴포넌트로서, 동적인 웹컨텐츠 생성을 가능하게 해준다.

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술

사용자가 로그인 하려고 할 때 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누른다.
서버는 클라이언트의 아이디와 비밀번호를 확인하고 다음 페이지를 띄워주어야 하는데 이러한 역할 수행하는 것이 바로 서블릿

  • 서블릿을 실행시켜 주는 서블릿엔진, 서블릿컨테이너,WAS : 톰캣
  • 서블릿 스펙에 맞춰 개발한 프로그램을 톰캣을 이용해서 실행
  • JSP표준에 앞서 자바에서 웹 어플리케이션 개발을 위해 만들어진 표준
  • 어떻게 만드세요하는 스펙, 인터페이스..
  • HttpServlet을 extends하면 서블릿 프로그램이 된다

Servlet 특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용 => 요청에 응답
  • Java Thread를 이용하여 동작
  • MVC패턴에서 Controller로 이용
  • UDP보다 처리속도가 느리다.
  • HTML변경시 Servlet을 재컴파일해야 하는 단점
  • HTTP 프로토콜을 서비스를 지원하는 java.servlet.http.HttpServlet 클래스를 상속받는다 (아래 사진)

  • javax.servlet.GenericServlet 을 extends한 Class HttpServlet
  • HttpServlet을 상속해서 기능을 다 갖다씀

Servlet 개발 과정

  • 서블릿 규약에 따라 자바 코드를 작성 (HttpServlet 상속 후 필요 메소드 재정의)
  • 자바 코드를 컴파일하여 클래스 파일 생성
  • 클래스 파일을 /WEB-INF/classes 디렉토리에 패키지 구조에 따라 저장
  • web.xml 파일서블릿 클래스 등록 및 리퀘스트와의 매핑
    • 서블릿 3.0규약부터 @WebServlet 어노테이션으로 대체
  • 톰캣등의 컨테이너 재실행(서블릿 리로딩 기능이 있는 경우 생략)
  • 웹 브라우저에서 요청 처리 결과 확인

HTTP방식 (method)별 구현 메소드

  • 요청의 의미와 요청데이터 패키징 방식을 구분하기 위한 방법으로 정의된 Http methodGET,POST,PUT,DELETE,HEAD,OPTION,TRACE등이 있음
  • 대부분의 웹서버와 브라우저에서 지원하며 일반적인 웹에서 사용되는 method는 GET과 POST

GET

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
					throws ServletException, IOException {
	//메서드 방식이 get인경우 호출됨...
	System.out.println("doGet() 호출됨..");
}

POST

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
					throws ServletException, IOException {
	//메서드 방식이 post인 경우 호출됨...
	System.out.println("doPost() 호출됨...");
}

서블릿의 callback 메소드 종류

  • lifeCycle 관련 메소드 :생명주기내에서 단 한번씩 호출되는 메소드 init, destroy
  • request 처리 관련 메소드 : 요청 발생시마다 각 쓰레드 내에서 반복 호출되는 메소드
    service 및 do~ 계열의 메소드

서블릿 동작 방식

  • callback메소드 호출 순서
    init호출 -> 리퀘스트 발생시 service호출 -> service메소드내에서 현재 리퀘스트의 httpmethod 구분 후 해당 do~메소드 호출 -> 객체 소멸 직전 destroy호출
  1. 사용자(클라이언트)가 URL을 클릭하면 HTTP RequestServlet Continer로 전송(요청)한다.
  2. 요청을 전송받은 Servlet Container는 HttpServletRequset, HttpServletResponse객체를 생성
  3. 컨테이너는 web.xml에 정의된 urlpattern을 확인하여 어느 서블릿을 통해 처리해야 할지를 검색한다. (로딩이 안된 경우에는 로딩함. 로딩시, init() 호출됨)
  4. Servlet Container는 요청을 처리할 개별 쓰레드 객체를 생성하여 해당 서블릿 객체의 service()메서드를 호출
    (이 때 HttpServletRequest 및 HttpServletResponse 객체를 생성하여 파라미터로 넘겨준다.)
  5. 해당 서블릿에서 service메소드를 호출한 후 클라이언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출
  6. 요청처리가 완료되면, HttpServletRequest 및 HttpServletResponse객체는 소멸된다.
  7. 컨테이너로부터 서블릿이 제거되는 경우에 destroy()메서드가 호출

서블릿 등록 및 매핑(web.xml, @WebServlet)

  • web.xml 에 직접 등록 및 매핑
    서블릿 등록(servlet엘리먼트 사용)
  • 서블릿을 등록하는 과정에 설정된 모든 정보는 서블릿의 콜백 메소드내에서 ServletConfig객체를 통해 접근 가능
  • servlet-name : 컨테이너 내에서 관리되는 서블릿 인스턴스의 이름을 지정
  • servlet-class: 컨테이너 내에서 관리될 서블릿 클래스를 지정
  • init-param : 서블릿의 초기화 파라미터 설정(param-name, param-value로 구성)
  • load-on-startup : 서블릿의 인스턴스 생성 순위 지정
  • web.xml 아래부분
  <servlet>
    <servlet-name>T02_ServletTest</servlet-name>
    <servlet-class>kr.or.ddit.basic.T02_ServletTest</servlet-class>
<!--     <load-on-startup>1</load-on-startup> -->
  </servlet>
  <servlet-mapping>
    <servlet-name>T02_ServletTest</servlet-name>
    <url-pattern>/T02_ServletTest</url-pattern>
  </servlet-mapping>  
  • 사용자가 http://localhost:9090/14_ServletTest/T02_ServletTest 요청하면
    <servlet-mapping>안에 <url-pattern>확인 => 바로 위에 <servlet-name>에서 서블릿명과 동일한 <servlet>부분에서 <servlet-name>과 일치
  • /14_ServletTest : ContextName

CGI (Common Gateway Interface) 그냥 참고

  • 별도로 제작된 웹서버와 프로그램간의 교환방식
    CGI방식은 어떠한 프로그래밍언어로도 구현이 가능
  • 별도로 만들어놓은 프로그램에 HTML의 Get or Post방법으로 클라이언트의 데이터를 환경변수로 전달, 프로그램의 표준 출력 결과를 클라이언트에게 전송
  • 자바 어플리케이션 코딩하듯 웹 브라우저용 출력화면 만드는 방법

Servlet Container

서블릿을 관리해주는 컨테이너

  • 서블릿 작동을 위해 서블릿을 관리해주는 역할
  • 서블릿 컨테이너는 클라이언트의 요청을 받아주고 응답을 할 수 있게 웹서버와 소켓으로 통신하며 대표적으로 톰캣(Tomcat)이 있음
  • 톰캣은 실제로 웹서버와 통신하여 JSP(Java Server Page)와 Servlet이 작동하는 환경을 제공

Servlet Container 역할

1.웹서버와 통신 지원

  • 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줌

2. 서블릿 생명주기(Life Cycle)관리

  • 서블릿컨테이너는 서블릿 탄생과 죽음을 관리
  • 서블릿 클래스를 로딩하여 인스턴스화하고 초기화메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드 호출

3. 멀티쓰레드 지원 및 관리

  • 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 쓰레드를 생성 => HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 죽게됨

4. 선언적인 보안 관리

  • 보안관리XML 배포 서술자에 기록하므로
    보안에 대해 수정할 일이 생겨도 자바소스코드를 수정하여 다시 컴파일하지 않아도 보안관리가 가능

Servlet 생명주기

  • 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인 => 없을 경우 init()메소드 호출하여 적재, init()메소드는 처음 한번만 실행
  • init()이 호출된 후 클라이언트의 요청에 따라서 service()메소드를 통해 요청에 대한 응답이 doGet()과 doPost()로 분기
  • 클라이언트의 요청이 오면 가장 먼저 처리하는 과정 생성된 HttpServletRequest, HttpServletResponse에 의해 request와 response객체가 제공
  • 컨테이너가 서블릿에 종료 요청을 하면 destroy()메소드가 호출되는데 마찬가지로 한번만 실행되며, 종료시에 처리해야하는 작업들은 destroy()메소드를 오버라이딩하여 구현

JSP(Java Server Page)

Java코드가 들어가 있는 HTML코드

  • 서블릿자바 소스코드속에 HTML코드가 들어가는 형태인데, JSP는 이와 반대로 HTML소스코드 속에 자바 소스코드가 들어가는 구조를 갖는 웹어플리케이션 프로그래밍 기술
    <% 소스코드 %> , <%= 소스코드 %>
  • 자바소스코드로 작성된 이 부분은 웹브라우저로 보내는것이 아니라 웹서버에서 실행되는 부분
  • JSPWAS(Web Application Server)에 의하여 서블릿 클래스로 변환하여 사용되어짐

14_ServletTest 프로젝트 생성 후 Dynamic Web Project 생성 과정

  • Dynamic Web Project 생성
  • Context란? : 애플리케이션 객체(?)에 대한 정보를 관리 (root..)

  • WEB-INF (중요한 폴더)
    jar나 설정파일 web.xml

  • 위사진 실행하면 web.xml 자동생성

  • lib => 여기 들어가있는 jar 라이브러리들은 톰캣이 자동으로 빌드패스 잡음

  • bulid에 있는 classes가 webcontent-> web-inf->classes에 자동으로 복사됨
    build는 자바가 쉽게 이용하려고 둔거고 톰캣으로 보내기 전에? 서버에 배포하기 전에? webcontent로 보냄

  • 웹개발에 필요한건 webcontent에 다 들어있음?..

예제1 14_ServletTest / T01_ServletLifeCycle , web.xml

web.xml

  • 위사진 >> url이 날라오면 톰캣이 구동시켜줌
  • servlet + servlet-mapping을 통해 사용자가 url-pattern에 설정된 url을 요청하면 매핑된 서블릿이 구동되도록 설정
    텍스트
  • init(객체 생성) 한번만 호출됨
    • ex. jdbc할때 제일 먼저 connection 맺어야되는데 이런걸 init()에 넣어주면 호출될때 바로 되서 편함

profile
HI :)

0개의 댓글