📍 3.1 서블릿 개요
서블릿
- 자바를 기반으로 하는 웹 애플리케이션 기술
- JSP는 서블릿 기반의 웹 스크립트 언어로, 내부적으로 서블릿으로 변환되어 실행
서블릿의 장점
- 자바를 기반으로 하기 때문에 자바 API를 모두 사용할 수 있다.
- 운영체제나 하드웨어의 영향을 받지 않는다.
- 다양한 오픈소스 라이브러리와 개발 도구를 활용할 수 있다.
웹 애플리케이션 개발에서 서블릿을 사용할 때 얻는 이점
- MVC 패턴을 쉽게 적용할 수 있으며, 패턴을 적용할 때 콘텐츠와 비즈니스 로직을 분리할 수 있다.
→ 컨트롤러와 뷰의 역할을 분담 - 컨테이너와 밀접한 프로그램을 구현할 수 있다.
MVC 패턴
- Model : 뷰에 필요한 비즈니스 영역의 로직을 처리
- View : 비즈니스 영역에 대한 프레젠테이션 화면을 담당
- Controller : 사용자의 입력 처리와 화면의 흐름 제어를 담당 → 서블릿
서블릿 컨테이너
- 서블릿 실행 환경을 제공하는 서버 소프트웨어
- 대표적으로 아파치 톰캣
웹 서버 vs. 서블릿 컨테이너
구분 | 웹 서버 | 서블릿 컨테이너 |
목적 | 웹 서비스 소프트웨어 | 서블릿 실행 환경 제공과 웹 서비스 소프트웨어 |
콘텐츠 | Html, CSS, JavaScript | 서블릿 클래스 |
JSP | 처리할 수 없어 서블릿 컨테이너로 넘김 | 자체 처리 |
실행 방법 | 콘텐츠가 위치한 URP 요청에 의해 실행되며, 요청할 때마다 매번 디스크를 읽어 처리한다. | 서블릿 클래스 정보를 따라 서버에 매핑된 URL 정보를 읽어 실행되며, 컨테이너에 적재된 상태에서 처리한다. |
서블릿 실행 과정
- 서블릿은 개발자가 소스 작성 후 컴파일 과정을 거친 뒤, 컨테이너에 배치된다.
- 이후 컨테이너에 의해 실행되고 관리된다.
서블릿 동작 과정
- 서블릿 컨테이너가 서블릿의 생명주기를 관리
- 생명주기란 서블릿이 컨테이너에 의해 실행, 서비스 종료되는 일련의 과정
- 서블릿 개발은 해당 생명주기 메서드를 오버라이딩하거나
- doGet(), doPost()와 같은 사용자 요청 처리 메서드를 구현
📍 3.2 서블릿 구조와 생명주기
서블릿 구조와 API
- 서블릿은 일반적으로 자바 클래스 구조
- 서블릿은 컨테이너에 의해 실행되므로, 특정 클래스를 상속받아야만 구현할 수 있는 구조
→ 일반적으로 서블릿은 javax.servlet.http.HttpServlet 클래스를 상속받아 구현 - 서블릿 API는 서블릿과 서블릿 컨테이너 사이의 인터페이스를 정의
javax.servlet.http.HttpServlet 동작 구조
- HttpServlet는 javax.servlet.GenericServlet을 상속받는다.
GET 방식
- 서버에 있는 정보를 가져오기 위해 설계된 데이터 전달 방법
- 아래와 같은 형식을 따른다. (속성=값 형태)
http://www.xxxxx.co.kr/servlet/login?id=kim&name=jiyoon - URL에 정보가 노출되기 때문에 보안 문제가 생길 수 있다.
POST 방식
- 서버로 정보를 올리기 위해 설계된 데이터 전달 방법
- HTML 폼에 입력한 내용을 서버에 전달할 때 사용하며, 메시지 바디에 내용을 포함시킨다.
- URL에 정보가 노출되지 않는다.
서블릿 생명주기
서블릿 초기화 init() 메서드
- 서블릿 실행시 호출되는 메서드로, 초기에 한 번만 실행된다.
요청/응답 service() 메서드
- 사용자 요청에 따라 스레드로 실행되는 메서드
- service() 메서드를 통해 doGet() 혹은 doPost() 메서드가 호출된다.
- 파라미터인 HttpServletRequest 와 HttpServletResponse를 통해 요청을 처리한다.
서블릿 종료 destroy() 메서드
- 컨테이너로부터 서블릿 종료 요청이 있을 때 호출되는 메서드
📍 3.3 서블릿 예제
서블릿 클래스 선언
@WebServlet(description = "HelloWorld 간단한 서블릿",
urlPatterns={“/HelloWorldServlet”} )
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
}
- @WebServlet : 컨테이너에 서블릿임을 알리는 어노테이션
- urlPatterns = {"/HelloWorldServlet"} : 서블릿 실행을 위한 요청 URL
- javax.servlet.http.HttpServlet : 클래스를 상속해서 필요한 라이프사이클 메서드를 구현
doGet() 메서드와 doPost() 메서드 구현
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>HelloWorld Servlet</TITLE></HEAD>");
String mesg = request.getParameter("name");
if(mesg == null) {
mesg = "JAVA";
}
String hello = "<BODY><H2>Hello World : " + mesg + "</H2></BODY>" ;
out.println(hello);
out.println("</HTML>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
}
HttpServlet 클래스의 개요
doGet 메서드와 doPost 메서드
- HttpServletRequest와 HttpServletResponse 매개변수는 서블릿과 클라이언트 사이를 연결해 주는 중요한 객체
public void doGet(HttpServletRequest request, HttpServletResponse response)
public void doPost(HttpServletRequest request, HttpServletResponse response)
HttpServletRequest 클래스의 주요 메서드
- getParameter(name)
- getCookies()
- setCharacterEncoding() 등
HttpServletResponse 클래스의 주요 메서드
- setContentType(type)
- setHeader(name, value)
- sendRedirect(url)
'CS > 웹서비스' 카테고리의 다른 글
[웹서비스] JSP 디렉티브 태그와 액션 태그 (0) | 2023.09.30 |
---|---|
[웹서비스] JSP 기본 구조 (0) | 2023.09.29 |
[웹서비스] 웹 기술 환경에 대한 이해 (0) | 2023.09.29 |