티스토리 뷰

728x90
반응형

 

톰캣과 같은 WAS가 처음 등장하였을 때 웹 브라우저에 요청을 스레드 방식으로 처리하는 기술이 바로 서블릿이었다.

모든 웹 프로그램은 오늘 배울 내용을 뼈대로 하여 동작한다.

따라서 아주 중요한 부분이니 집중해서 공부해 보도록 하자!

 


 

서블릿의 주요 세 가지 기능은 다음과 같다.

 

  1. 클라이언트로부터 요청을 받는다.
  2. 데이터베이스 연동과 같은 비즈니스 로직을 처리한다.
  3. 처리된 결과를 클라이언트에 돌려준다.

 

 

우선 요청이나 응답과 관련된 서블릿의 기능을 알아보자.

요청이나 응답과 관련된 API는 모두 javax.servlet.http 패키지에 있다.

 

  • 요청과 관련된 API : javax.servlet.http.HttpServletRequest 클래스
  • 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스

 

클라이언트가 서버에 요청을 하면 먼저 톰캣 컨테이너가 받는다.

그런 다음 사용자의 요청이나 응답에 대한 HttpServletRequest 객체와 HttpServletResponse 객체를 만들고 서블릿의 doGet()이나 doPost() 메서드를 호출하면서 이 객체들을 전달한다.

 

톰캣이 사용자의 요청에 대한 정보를 모든 HttpServletRequest 객체의 속성으로 담아 메서드로 전달하므로 각 HttpServletRequest 에서 제공하는 메서드들은 매개변수로 넘어온 객체들을 이용하여 사용자가 전송한 데이터를 받아오거나 응답할 수 있는 것이다.

 

 


 

이번에는 <form> 태그를 이용하여 브라우저에서 서블릿으로 사용자의 요청이나 데이터를 전송하는 방법과 서블릿이 데이터를 받아오는 방법에 대해 알아보자.

 

서블릿과 JSP는 HTML, CSS, 자바스크립트에 자신의 기능을 추가하여, 즉 서로 연동하여 동작한다.

특히 사용자의 요청은 HTML <form> 태그나 자바스크립트로부터 전송받아서 처리한다.

 

 

다음과 같은 HTML 코드가 있다고 하자.

 

<form name="frmLogin" method="get" action="login" encType="UTF-8">
    아이디  :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pw"><br>
    <input type="submit" value="로그인">  <input type="reset" value="다시입력">
</form>

 

 

다음과 같이 구성될 것이다.

 

사용자가 자신의 ID와 비밀번호를 입력한 후 로그인을 클릭하면 <form> 태그의 action 속성은 데이터를 전송할 서블릿이나 JSP의 이름을 지정한다.

그러면 지정된 이름이 login인 서블릿으로 ID와 비밀번호가 전송된다.

 

그렇다면 데이터는 어떻게 전송될까?

<input> 태그의 name 속성과 실제 입력한 데이터가 쌍으로 전송된다.

예를들면 아래와 같이 간다고 볼 수 있다.

 

name value
user_id dhlee
user_pw dhleepw

 

이렇게 name 속성과 쌍으로 같이 전송된 데이터를 서블릿이 받게 된다.

 

HttpServletRequest 클래스는 전송된 데이터를 getParameter() 메서드를 사용하여 받는다.

만약 name으로 여러개의 값이 전송되었을 때는 getParameterValues() 메서드를 사용하면 된다.

 

 


 

 

클라이언트가 요청하고 서블릿에서 데이터를 받는 부분까지 대충 알아 보았다.

그럼 이제 서블릿이 처리한 결과를 클라이언트에게 응답하는 기능을 알아보자.

 

서블릿에서 응답을 처리하는 방법은 다음과 같다.

 

  • deGet()이나 doPost() 메서드 안에서 처리한다.
  • javax.servlet.http.httpServletResponse 객체를 이용한다.
  • setContentType() 을 이용해 클라이언트에게 전송할 데이터 종류(MIME-TYPE)를 지정한다.
  • 클라이언트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용한다.

 

서버(서블릿)에서 웹 브라우저로 데이터를 전송할 때는 어떤 종류의 데이터를 전송하는지 웹 브라우저에 알려줘야 한다.

그 이유는 웹 브라우저가 전송 받을 데이터의 종류를 알고 있으면 더 빠르게 처리할 수 있기 때문이다.

따라서 서버(서블릿)에서 웹 브라우저로 데이터를 전송할 때는 톰캣 컨테이너에서 미리 제공하는 여러가지 전송 데이터 종류 중 하나를 지정해서 웹 브라우저로 전송한다.

이처럼 톰캣 컨테이너에서 미리 설정해 놓은 데이터 종류들을 MIME-TYPE(마임타입)이라고 한다.

 

 

서블릿이 클라이언트(웹 브라우저)에 응답하는 과정은 아래와 같다.

 

 

 

httpServletResponse 을 사용하여 응답하는 Java 소스코드만 간단하게 구현해 보면 아래와 같다.

 

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException{
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    String id = request.getParameter("user_id");
    String pw = request.getParameter("user_pw");

    String data = "<html>";
        data += "<body>";
        data += "아이디 : " + id;
        data += "<br>";
        data += "패스워드 : " + pw;
        data += "</body>";
        data += "</html>";
    out.println(data);
}

 

위와같이 구성한다면 화면에

 

아이디 : dhlee
비밀번호 : dhleepw

 

가 보일 것이다.

 


 

이번에는 웹 브라우저에서 서블릿으로 데이터를 전송하는 방식을 알아보자.

웹 브라우저에서 서블릿으로 데이터를 전송하는 방법은 크게 GET 방식POST 방식이 있다.

URL 주소에 데이터를 붙여서 전송하는 방식을 GET 방식이라고 하고, 

반면에 POST 방식은 전송하는 데이터를 숨겨서 전송한다.

그러다 보니 GET 방식에서는 데이터가 노출되므로 개인정보가 유출될 가능성이 높고, 보안에 취약하다는 단점이 있다.

그에 반에 POST 방식은 데이터가 보이지 않으므로 보안에 좋아서 보안과 관련된 데이터를 전송하는 데 많이 사용된다.

 

두 방식의 특징을 살펴보자.

 

GET 방식 POST 방식
- 서블릿에 데이터를 전송할 때는 데이터가 URL 위에
name=value 형태로 전송된다.
- 여러 개의 데이터를 전송할 때는 '&'로 구분해서 전송된다.
- 보안에 취약하다.
- 전송할 수 있는 데이터는 최대 255자 이다.
- 기본 전송 방식이고 사용이 쉽다.
- 서블릿에서는 doGet() 으로 전송된 데이터를 처리한다.
- 서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 
HEAD 영역에 숨겨진 채 전송된다.
- 보안에 유리하다.
- 전송 데이터 용량이 무제한이다.
- 전송 시 서블릿에서는 또다시 가져오는 작업을 해야 하므로 처리속도가 GET 방식보다 느리다.
- 서블릿에서는 doPost() 를 이용해 데이터를 처리한다.

 

두 방식으로 전송된 데이터는 반드시 HttpServlet에서 오버라이딩 된 doGet() 메서드나 doPost() 메서드를 사용해야 한다.

만약 두 메서드가 서블릿에 존재하지 않거나 임의로 만든 메서드를 사용하면 오류가 발생한다.

 

 

웹 프로그램에서는 GET 방식과 POST 방식을 혼합해서 많이 사용한다.

이때 각 방식마다 일일이 구분해서 구현해야 한다면 불편하기 때문에 doGet() 과 doPost()로 호출 되면 각 메서드에서 doHandle()을 호출해 주는 방식으로 구현이 된다.

그럼 두 방식 모두 doHandle() 를 따르게 되는 것이다.

 

 

 

오늘은 서블릿의 기본 기능에 대해 알아보았다.

다음에는 서블릿의 비즈니스 로직을 처리하는 방법에 대해 알아보자.

 

 

 

이상 !

 

 


참고도서

 

  • 자바 웹을 다루는 기술(이병승 저)

 

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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