반응형

2. 서블릿(Servlet)

 

 

서블릿은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램이다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스 파일이고 주로 Dynamic Web Project을 만들 때 사용된다. 

jsp(java server page, Html과 유사)가 Html 문서 안에 자바 코드를 포함한다면 서블릿은 자바 코드 안에 Html을 포함하고 있다. 

 

다음 그림은 jsp와 서블릿의 작동과정을 나타낸 그림이다.

 

서블릿 운영환경은 자바 가상머신을 내장하고, 자체 웹 서버 기능도 있으나 분리하기도 한다. 서블릿을 이용하여 웹페이지를 가동할 때는 apache tomcat을 이용한다. 

 

다음은 서블릿의 작동과정을 나타낸 것이고, 

서블릿의 소스코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package controller;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class Test
 */
@WebServlet("/PageAddress")//여기에 주소 입력
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Test() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());//주로 여기서 실행내용을 작성한다.
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
 
}
cs

서블릿의 장점

1. 쓰레드(Thread)를 기반으로 하므로 웹 프로젝트 운영에 효율적이다.

2. 자바를 기반으로 하므로 자바의 기능을 사용할 수 있다.

3. 운영체제나 하드웨어의 영향을 받지 않으므로 한 번 개발된 프로젝트는 다양한 서버 환경에서도 실행이 가능하다.

4. 컨텐츠와 비즈니스 로직을 분리할 수 있다.

5. 컨트롤러(controller)와 뷰(view)의 역할 분담을 한다. 따라서 웹 디자이너와 개발자간의 원활한 공동작업이 가능해진다. 

6. 유지보수가 수월하고 기능의 확장이 용이하다. 

 

서블릿의 구조와 생명주기(LifeCycle)

 

서블릿은 앞서 말했듯이 자바 프로젝트이고 javax.servlet.http.HttpServlet구조로 되어있다. 

일반적으로 서블릿은 javax.servlet.http.HttpServlet을 상속하고, service()메소드는 컨테이너에서 호출, doGet(), doPost()메소드를 오버라이드(재정의)해서 처리에 필요한 기능을 구현한다. 

GET, POST방식

GET방식: 서버에 있는 정보를 가져오기 위해 설계되었고, Query_String환경변수를 통해 전달해 주소창(URL)에 파라미터들을 노출시킨다. 때문에 보안이 요구되는 경우에는 사용할 수 없고, 주로 검색엔진에서 많이 사용한다.

POST방식: 서버로 정보를 올리기 위해 설계되었고, 데이터 크기의 제한은 없으며 URL에 파라미터가 노출되지 않아 보안이 요구될 때 사용된다. 

 

서블릿 생명주기

 

최초 클라이언트 요청 시 init()메소드가 호출되며 메모리에 적재된다. 다음으로 service()메소드가 컨테이너에 의해 호출되고, doGet(), doPost()메소드에 의해 처리 수행된다. 마지막으로 destroy()메소드에 의해 종료된다. 

HttpServletRequest 클래스 주요 메소드 

메소드 설명
getParameterNames() jsp에서 현재 요청된 파라미터 이름을 Enumeration형태로 전달
getParameter(name) jsp에서 문자열 name과 같은 이름을 가진 파라미터의 값을 가져온다.
getParameterValues(name) jsp에서 문자열 name과 같은 이름을 가진 파라미터의 값을 배열 형태로 가져온다. checkbox, multiple list 등에 주로 사용
getCookies() 모든 쿠기값을 javax.servlet.http.Cookie의 배열형태로 가져온다
getMethod() 현재 요청이 GET, POST인지 가져온다.
getSession() 현재 세션 객체를 가져온다.
getRemoteAddr() 클라이언트의 ip주소를 알려준다.
getProtocol() 현재 서버의 프로토콜을 문자열 형태로 알려준다.

HttpServletResponse 클래스 주요 메소드

setCharacterEncoding 현재 jsp로 전달되는 내용을 지정한 문자설정으로 변환. html form에서 한글 입력 시 정상적으로 처리하려면 반드시 필요하다.
setContentType(type) 문자열 형태의 type에 지정된 MIME Type으로 ContentType을 설정
setHeader(name, value) 문자열 name의 이름으로 문자열 value값을 헤더로 세팅
setDateHeader(name, date) 문자열 name의 이름으로 data에 설정된 millisecond 시간 값을 헤더에 설정
sendError(status,msg) 에러 코드를 세팅하고 메세지를 보낸다.
sendRedirect(url) 클라이언트 요청을 (주소가 url인) 다른 페이지로 보낸다.

 

반응형

'Coding(Java) > 웹프로그래밍기술' 카테고리의 다른 글

비동기통신(Ajax and Axios)  (0) 2022.03.20
Posted by skywalker222