Servlet/JSP-2

DeadWhale·2022년 4월 27일
0

Servlet/JSP

목록 보기
2/22
post-thumbnail

HttpServlet을 반드시 상속해야 한다.

doGet(Request , Response) : 요청 , 응답

javax : 자바 외부에서 만드는 외부 확장 코드

Servlet 동작 방식

DD ( 배포 서술자 , Deployment Descript ) : web.xml
xml : 1순위 해석 타겟.

  • 인터넷에서 요청 /응답 할 수 있도록 프로젝트를 인터넷에 올리는 것.



  • 1 ) 클라이언트가 URL을 클릭하면 HttpRequest을 Servlet Container으로 전송

  • 2 )요청을 전달 받은 Sevlet Container은 두 객체를 생성

    • HttpServletRequest (클라이언트 + 요청 정보)
    • HttpServletResponse(응답 관련 객체)
  • 3 ) DD(배포 서술자 , Deployment Descriptor) = web.xml은 사용자가 요청한 url을 분석 해 어떤 서블릿클래스에 요청내용을 전달할 지 탐색

  • 4 ) 탐색된 서블릿에서 init() 메소드를 우선 호출 후 service()메소드를 호출해 클라이언트으로 부터 전송받은 방식인 GET,POST 여부에 따라 해당메소드( doGet, doPost)를 호출한다.

  • 5) 호출받은 메서드(Get,Post)는 동적페이지를 생성 후 HttpServletResponse객체에 응답을 보낸다.

  • 6) 응답 종료시 요청관련 , 응답관련 객체들을 삭제한다.


servlet Container (tomcat)

  • 자동으로 객체를 관리(생성,삭제)해주고 요청 응답을 제어해준다.
  • 웹 서버와의 통신 지원(listen , accept등을 api로 제공한다)
  • 서블릿의 생명 주기 관리(Life Cycle)를 관리해 준다
    • 서블릿의 사용 목적이 달성되는 순간 GC를 호출해 지워버린다.
  • 멀티 쓰레드 지원 / 관리(쓰레드의 안정성데 대해 신경쓸 필요가 없다)
  • 선언적인 보안 관리
    • (보안관련 내용을 서블릿이나 클래스에 구현하지 않아도 된다.)

생명주기

  1. 클라이언트의 요청이 들어오면 컨테이너는 서블릿이 메모리에 있는지 확인하고 없는 경우 init()메소드를 호출해 적재한다

    1.1 init()은 처음 한번만 실행되기 때문에 서블릿의 쓰레드에서 공통적으로 사용해야 하는 것이 있다면 오버라이딩으로 구현

    1.2 실행중 서블릿이 변경될 경우 , 기존 서블릿을 파괴하고 새로운 내용을 다시 메모리에 적재한다.

  2. init() 메소드가 호출된 후 클라이언트 요청에 따라 service( ) 메소드를 통해 요청을 doGet , doPost를 맞쳐 진행한다.

    2.1 이 때 서클릿 컨테이너가 클라이언트의 요청이 오면 가장 먼저 Request와 Response를 생성한다.

  3. 컨테이너가 서블릿에 종료 요청 시 destroy( ) 메서드를 호출하는데 itin( )과 동일하게 한번만 실행된다

    3.1 종료시에 실행되야되는 작업이 있다면 destroy에 오버라이딩해 구현한다.



Get( ) , Post( ) 비교/차이

클라이언트가 서버로 요청을 보내는 방법

Get 방식 : 데이터를 가져오다/얻어오다

  • url에 데이터를 포함시켜 요청
  • 데이터를 HTTP Header에 포함에 전송.
    • GET방식에서 body는 보통 빈상태로 전송된다
  • 전송하는 길이의 한계가 있다( 초과된 데이터는 절삭된다)
  • 캐싱이 가능(즐겨찾기 / 북마크)
    • 한번 접근 후 다시 요청 할 시 빠르게 접근 가능


Post방식 : (데이터를) 붙이다

  • 데이터를 서버로 제출하여 추가 혹은 수정하기 위해 데이터를 전송하는 방식
  • RL에 데이터를 노출하지 않고 요청 데이터를 HTTP Body에 포함해 전송
  • 헤더 필드중 Body에 데이터를 설명하는 'Content-Type'이라는 헤더필드가 들어가고 어떤 데이터 타입인지 명시해 줘야 한다.
  • 전송하는 길이의 제한이 따로 없다
    • but body에 데이터가 들어가기 떄문에 길이의 제한이 없지만 최대 요청을 받는 시간(Time Out)이 존재해 딜레이가 있다
  • 캐싱 불가능 (URL)에 데이터가 노출되지 않음으로 즐겨찾기나 캐싱 불가능

Apache

  • 아파치 재단의 오픈소스 프로젝트
  • 정적 페이지를 응답하는 웹 서버.

Tomcat

  • Dynamic Web을 만들기 위한 웹 컨테이너 (서블릿 컨테이너)

  • 정적 페이지를 제외한 요청(Servlet , JSP)에 대한 수신, 응답을 처리하는 웹응용서버
    (WAS : Web Application Server)

  • 톰캣에 연결시 동적인 데이터의 처리가 가능함으로 DB연결이나 데이터 조작,다른응용프로그램과의 상호작용이 가능하다.

Apache Tomcat

Tomcat == servlet Container == WAS
톰캣 처리 할 수 없은 '정적 페이지'처리를 위해
아파치의 일부 기능을 가져와 함께 제공하는 서버

0개의 댓글