오봉이와 함께하는 개발 블로그
Servlet - Servlet 개요 본문
728x90
JSP와 Servlet
- JSP (Java Server Pages)
- HTML 내에 Java 언어를 삽입한 문서
- .jsp
- Servlet (Server + Applet)
- Java 언어로 이루어진 웹 프로그래밍 문서
- 자바 코드에 의존적
- .java
JSP 페이지의 실행 과정
서블릿(Servlet)
- 서버 측에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스(응답 : HTML 형식)
- 자바 플랫폼에서 컴포넌트 기반의 웹 애플리케이션을 개발하는 핵심 기술(동적 웹 애플리케이션 컴포넌트)
- 컨테이너 종류에 상관없이 실행됨(플랫폼 독립적)
- 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행
- 자바로 만들어졌기 때문에 자바의 특징(객체 지향)을 가짐
- 스레드 기반
- JSP 페이지처럼 화면에 내용을 표시할 목적으로 사용하는 것이 아니라 MVC 패턴에서 로직인 모델과 화면에 결과를 표시하는 뷰 사이에서 제어를 담당하는 컨트롤로 사용됨
- Servlet을 많이 사용하는 이유는 빠른 응답 속도 때문
- 최초 요청 시 객체가 만들어져 메모리에 로드되고 이후 요청 시 기존 객체 재활용하기 때문에 동작 속도가 빠르다.
- 장점
- 신뢰성
- 확장성(기능 확장 용이)
- 플랫폼과 서버에 독립적(자바 기반)
- 한 번 개발된 애플리케이션은 다양한 서버 환경에서 실행 가능
- Java에서 제공되는 다른 기술 사용 가능
- 예 : Servlet + JDBC 연동
- 생성 과정
- Servlet 클래스 생성
- Servlet 생명주기 메소드 구현
- Servlet 매핑 작업
- 웹 브라우저에서 Servlet 매핑 이름으로 요청
- 서블릿 매핑(mapping)
- 서블릿 경로 연결 (url 주소에 출력될 경로 이름 설정)
- 서블릿 파일 경로 노출로 인한 보안 문제를 없애고, url을 간단하게 줄일 수 있음
- 웹 브라우저에서 서블릿을 요청하기 위해서는 서블릿 매핑 필요
- 방법
- web.xml에서 설정
- 어노테이션 이용 (이클립스에서 자동 지정 ) : 변경 가능
서블릿 처리 순서
- 동일한 Servlet class에 대한 요청을 처리하는 모든 thread(스레드)는 같은 Servlet 객체를 공유해서 동시성 문제가 발생할 수 있지만, 로컬 변수는 각 요청 스레드마다 각각의 스택 영역에 저장되기 때문에 동시성 문제를 발생시키지 않음
- 클라이언트에서 서블릿 요청이
- 서버에서 서블릿 컨테이너 만들고 스레드 생성(요청 시 마다 스레드 생성)
- 서블릿 컨테이너는 스레드를 가동하려 서블릿 객체 생성
- 서블릿 실행 결과가 웹 서버로 전송
- 결과를 웹 서버가 웹 브라우저에게 전송
- 서블릿 객체의 실행이 종료되면 스레드 종료되고 반환
서블릿 패키지
- javax.servlet.*
- 서블릿 작성을 위한 인터페이스와 클래스 제공
- javax.servlet.http.*
- HTTP 프로토콜은 이용한 서블릿 작성에 필요한 인터페이스 제공(GET/POST)
서블릿 클래스
- Servlet 인터페이스
- GenericServlet 추상 클래스
- HttpServlet 클래스 상속 받음
- HttpServlet -> GenericServlet -> Servlet
서블릿 생성 과정
- Servlet 클래스 생성
- 서블릿 생성주기 메소드 구현
- 서블릿 매핑 작업
- 웹 브라우저에서 서블릿 매핑 이름으로 요청
서블릿 매핑 (mapping)
- 서블릿 경로 연결 (url 주소에 출력될 경로 이름 설정)
- 서블릿 파일 경로 노출로 인한 보안 문제를 없애고 url을 간단하게 줄일 수 있음
- 웹 브라우저에서 서블릿을 요청하기 위해서는 서블릿 매핑 필요
- http://localhost:8080/프로젝트명/서블릿 매핑 이름/
- 서블릿 매핑 방법
- web.xml에서 설정
- 어노테이션 이용 (이클립스에서 자동 지정 ) : 변경 가능
HttpServletRequest request, HttpServletResponse response
- 톰캣에서 request 객체와 response 객체 생성해서 doGet() 메소드 안에 인자 값으로 넣어줌
- request 객체 : 요청 처리 객체
- 클라이언트에서 입력한 데이터가 request 객체에 담겨져서 서버로 전달
- response 객체 : 응답 처리 객체
- 서버 측에서 처리한 결과를 response 객체에 담아서 클라이언트로 전달
- doGet()과 doPost() 둘 다 매개변수로 request/ response 객체를 갖음
- 클라이언트 요청 처리
- 클라이언트에게 응답 처리
서블릿 동작 과정
컨텍스트 (Context)
- 톰캣의 server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라고 함
- 즉, 톰캣 입장에서 인식하는 한 개의 웹 애플리케이션에 해당
- 웹 애플리케이션 당 하나의 컨텍스트가 등록됨
- 웹 애플리케이션 이름과 같을 수도 다를 수도 있음
- 컨텍스트 이름은 중복되면 안 됨 (유일한 이름)
- 대소문자 구분
- server.xml에 등록
- 이클립스에서 프로젝트 생성하면 자동으로 server.xml에 추가됨
- 최종 실행 시 포함된 프로젝트가 Context로 남게 됨
- <Context docBase="Servlet01" path="/Servlet01" reloadable="true" source="org.eclipse.jst.jee.server:Servlet01"/>
- 구성 요소
- path : 웹 애플리케이션의 컨텍스트 이름, 웹 애플리케이션 이름과 다를 수도 있으며 웹 브라우저에서 실제 웹 애플리케이션을 요청하는 이름
- docBase : 컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로. WEB-INF 상위 폴더 까지의 경로를 나타낸다.
- reloadable : 실행 중 소스 코드가 수정될 경우 바로 갱신할지를 설정. 만약 false로 설정하면 톰캣을 다시 실행해야 추가한 소스 코드의 기능이 반영
URL / URI / ContextPath / ServletPath
- URL : 전체 주소
- http://localhost:8080/Servlet01/second
- 프로토콜 + IP + 포트 번호 + URI
- URI : ContextPath + ServletPath
- /Servlet01/second
- 프로젝트명 + 서블릿 매핑 이름
- ContextPath : 프로젝트명
- /Servlet01
- ServletPath : 서블릿 매핑 이름 (원래 : 패키지명 + 파일명) 임의로 변경해서 용
- /second
- 간결성 / 보안 유지
728x90
'BE > Servlet' 카테고리의 다른 글
Servlet - 포워딩 (0) | 2021.12.29 |
---|---|
Servlet - Servlet DB연동(Connection Pool) (0) | 2021.12.28 |
Servlet - Servlet DB 연동(기본 JDBC) (0) | 2021.12.28 |
Servlet - DOM 객체, name 속성, jQuery 사용 (0) | 2021.12.28 |
Servlet - Servlet 요청 API (0) | 2021.12.27 |
Comments