<< 학습 목표 >>

1. 서블릿을 추가할 수 있다.

2. 서블릿을 등록할 수 있다.

3. 서블릿을 실행할 수 있다.

4. 서블릿을 요청(호출) 할 수 있다.


드디어~! 서블릿을 본격적으로 배워보자

서블릿은 상속을 활용해서 일반적인 자바 프로그램이 웹 프로그램이 된 것을 말함

왼쪽은 일반 자바 프로그램, 오른쪽은 서블릿(웹 프로그램)

package chapter02;

public
class Ex02 {

    public static void main(String[] args) {
        Sysout("일반적인 자바 프로그램입니다.");
    }
}
package chapter02;

import
javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public
class Ex03 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        Sysout("서블릿(웹 프로그램)입니다.");
    }
}

 

두 프로그램의 차이를 비교해보자

차이점1. 일반 자바 프로그램을 실행시키려면 반드시 main이 필요하지만 서블릿을 실행시키려면 main 대신 doGet 또는 doPost 등이 필요함

차이점2. 일반 자바 프로그램은 이클립스 안에서 [ Run AS ] -> [ Java Application ] 으로 실행시지만 서블릿은 서블릿이 속한 프로젝트를 서버에 [ Add And Remove ] 로 등록해두고 서버를 실행시켜야함

차이점3. 일반 자바 프로그램을 실행시키면 main 안에 있는 코드가 바로 실행되지만 서블릿은 실행했다고 해서 doGet 또는 doPost 안에 있는 코드가 바로 실행되지 않음, 클라이언트가 웹 브라우저 등을 사용해서 해당 서블릿을 요청(호출) 해야함


앞서 서블릿을 추가하기 위해 프로젝트를 생성하고 패키지를 추가했는데 앞 글을 못봤다면 보고 오자

 

Chapter02. 웹 프로젝트의 구조 이해와 웹 프로젝트 만들기

> 1. 웹 프로젝트의 구조를 이해할 수 있다. 2. 웹 프로젝트를 생성할 수 있다. JSP/Servlet 웹 프로젝트는 대체로 다음과 같은 구조로 시작함 초록색은 폴더이고 파란색은 파일 웹 프로젝트 폴더 안

codingaja.tistory.com


서블릿을 추가하는 방법을 본격적으로 배워보자

서블릿을 추가하는 방법은 두 가지가 있음

방법1. 서블릿만 추가하는 방법

방법2. 서블릿을 추가하면서 등록하는 방법

 

먼저 첫 번째 방법을 사용해서 서블릿을 추가해보자

첫 번째 방법으로 서블릿을 추가할 때는 [ 패키지 한번 클릭 ] -> Ctrl + N -> class 검색(1) -> [ Next ](2)

 

클래스 이름은 Ex04 로 지정(1) 하고 [ Finish ] (2)

 

클래스 명 옆에 extends HttpServlet 을 붙여서 HttpServlet의 자식이 되도록 하면 이제 클래스가 아닌 서블릿이 된 것

package chapter02;

import javax.servlet.http.HttpServlet;

public class Ex04 extends HttpServlet {

}

 

클라이언트가 브라우저에 이 서블릿의 경로를 입력해 요청(호출)을 하면 서블릿이 동작함

여기서 앞서 배웠던 요청 정보 를 떠올려보자

요청 정보는 요청 줄(Request line), 헤더(Header), 몸통(Body) 가 있었음

여기서 요청 줄의 요청 방식(Method)와 URL을 반드시 기억하라고 했음

사용자가 요청을 할 때 요청 방식을 GET 방식으로 요청할 수도 있고 POST 방식으로 요청할 수도 있음

따라서 이 서블릿이 사용자의 요청 중 어떤 방식의 요청을 처리할 건지 지정해줘야함

 

사용자의 GET 방식 요청을 처리하고 싶다면 doGet 메서드를 오버라이딩 해야함

사용자의 POST 방식 요청을 처리하고 싶다면? doPost 메서드를 오버라이딩 해야함

우선 이 서블릿이 사용자의 GET 방식 요청을 처리하도록 doGet 메서드를 오버라이딩 하자

( 오버라이딩과 관련된 내용은 자바 입문 내용이므로 오버라이딩을 모른다면 자바 입문을 배우고 오자 )

package chapter02;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Ex04 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("사용자의 GET 방식 요청을 처리합니다.");
		System.out.println("...");
		System.out.println("...");
		System.out.println("...");
		System.out.println("처리가 완료 되었습니다.");
	}
	
}

 

doGet 메서드 안에는 사용자의 GET 방식 요청이 들어와 Ex04 서블릿이 동작했다 라는 걸 알기 위해 Sysout 을 넣었음

 

여기까지 첫 번째 방법으로 서블릿을 추가했음

서블릿은 추가만 하면 안되고 등록까지 해야 프로젝트가 "아~ 이런 서블릿이 이런 경로에 있구나" 하고 인식을 하게됨

서블릿을 등록하는 방법을 배워보자

 

서블릿을 등록할 때는 프로젝트 내 src -> main -> webapp -> WEB-INF -> web.xml(1) 에 등록함

 

web.xml 의 web-app 태그 안에 아래와 같이 servlet 태그(1)와 servlet-mapping 태그(2)를 추가하자

 

servlet 태그는 웹 프로젝트가 이러한 서블릿이 있다는걸 인식 시켜주는 태그임

servlet-mapping 태그는 클라이언트가 서블릿에 접근할 수 있게 프로젝트가 인식한 서블릿의 경로를 지정해주는 태그임

 

servlet 태그는 servlet-name과 servlet-class 태그로 이루어져있는데 servlet-class 태그 먼저 해석하고 servlet-name 태그를 해석하는게 편함

servlet-class 태그는 프로젝트가 인식할 서블릿의 전체 이름을 지정해주는 것으로 패키지명.서블릿명 으로 입력함

servlet-name 태그는 servlet-class 태그로 프로젝트가 인식한 서블릿의 별명을 지정해주는 역할을 함

따라서 servlet 태그를 servlet-class, servlet-name 순으로 해석해보면 "이 프로젝트에 chapter02.Ex04 서블릿이 있는데 이 서블릿의 별명을 ex04 로 하겠다" 임

 

만약 servlet 태그내 servlet-name을 아래와 같이 지정하면 어떻게 해석할 수 있을까?

"이 프로젝트에 chapter02.Ex04 서블릿이 있는데 이 서블릿의 별명을 myFirstServlet 으로 하겠다"

( 윗 줄을 드래그 하시면 해석이 보입니다 )

  <servlet>
  	<servlet-name>myFirstServlet</servlet-name>
  	<servlet-class>chapter02.Ex04</servlet-class>
  </servlet>

 

그 다음 servlet-mapping 태그는 servlet-name과 url-pattern 태그로 이루어져있음

servlet-mapping 태그는 클라이언트가 서블릿을 호출할 수 있도록 경로를 지정해주는 역할을 함

servlet-mapping 태그 내 servlet-name 태그는 경로를 지정할 서블릿의 별명임

servlet-mapping 태그 내 url-pattern 태그는 해당 서블릿의 경로임

위 이미지에서 servlet-mapping 태그를 해석해보면 "별명이 ex04 인 서블릿의 경로는 /ex04로 하겠다" 임

 

만약 servlet-mapping 태그 내 url-pattern 을 아래와 같이 지정하면 어떻게 해석할 수 있을까?

별명이 ex04 인 서블릿의 경로는 /first 로 하겠다"

( 윗 줄을 드래그 하시면 해석이 보입니다 )

  <servlet-mapping>
  	<servlet-name>ex04</servlet-name>
  	<url-pattern>/first</url-pattern>
  </servlet-mapping>

 

여기까지~! 길었지만 서블릿을 추가하고 프로젝트에 등록했음

다시 한번 이 글의 처음부터 읽고 내려오자


이제 추가한 서블릿을 동작시켜보자

 

여기서 알아야할 사전 지식! 서블릿이 동작하려면?

서블릿이 동작한다는건 서블릿을 호출한다는 것으로 서블릿을 호출하려면 서블릿이 실행되야함

서블릿이 실행되려면 서블릿이 속한 프로젝트를 서버에 옮겨두고 서버를 실행시켜야함

그리고 클라이언트가 URL를 입력해 서블릿을 호출해야함

 

제 기준으로 이 서블릿은 studyProject 프로젝트에 있으니 studyProject를 웹 서버에 올려두고 웹 서버를 실행시키자

웹서버에 프로젝트를 올려두는 방법은 앞서 언급했지만 다시 알아보자

 

이클립스에서 [ Servers ] 탭(1) -> 서버 우클릭(2) -> [ Add and Remove ] 클릭(3)

 

studyProject 더블클릭 혹은 studyProject 클릭 후 [ Add > ] 버튼 클릭(1) -> [ Finish ] 클릭(2)

 

서버를 실행시키자

[ Servers ] 탭 -> 서버 우클릭 -> start (1)

 

여기까지 상황을 간단하게 그림으로 표현하면 다음과 같음

내 컴퓨터가 서버가 되서 클라이언트가 ex04 서블릿을 호출할 수 있는 것

ex04 서블릿 내 doGet 메서드를 오버라이딩 했으니 클라이언트는 ex04 서블릿을 GET 방식으로 호출하면 됨

 

클라이언트가 서블릿을 호출하려면? 웹 브라우저에 URL을 입력해야함

http://내컴퓨터의IP:8080/studyProject/ex04서블릿

 

내 컴퓨터의 IP 주소를 보는 방법을 알아보자

내 컴퓨터의 IP 주소는 cmd창에서 ipconfig 명령을 입력해 알 수 있음

작업 표시줄의 시작버튼 클릭(1) -> cmd 검색(2) -> cmd 실행(3)

 

cmd 창에서 ipconfig 입력 및 엔터(2) -> IPv4 주소 확인(2)

 

제 상황에서는 http://10.0.2.15:8080/studyProject/ex04서블릿 임

( 여러분은 여러분의 상황에 맞는 서버 IP 주소를 입력해야함 )

ex04 서블릿의 경로는 앞서 /ex04 로 지정했으므로 최종적으로 클라이언트가 입력할 URL은 http://10.0.2.15:8080/studyProject/ex04 가 됨

 

서버 컴퓨터가 와이파이로 연결되어있고 내 핸드폰 등 다른 기기가 컴퓨터와 같은 와이파이로 연결되어있다면 내 핸드폰의 브라우저에서 저 URL을 입력하면 ex04 서블릿이 호출됨

 

모두가 이와 같은 환경은 아님

이제 내 컴퓨터가 서버이자 클라이언트가 될 차례

 

이클립스는 잘 두고 이클립스가 돌아가는 내 컴퓨터에서 웹 브라우저를 열자

브라우저의 주소창에 위에서 파악한 URL을 입력하자

브라우저의 주소창에 URL을 입력하면 GET 방식으로 요청을 보내개됨

 

브라우저가 클라이언트가 되서 http://10.0.2.15:8080/studyProject/ex04 쪽으로 GET 방식 요청을 보낸것

 

클라이언트에서 서버로 요청을 보냈으므로 요청이 나가는데 알고 보니 내 컴퓨터의 IP 주소로 요청을 보내서 다시 되돌아와 내 컴퓨터에 있는 서블릿이 동작한 것


여기까지 서블릿을 추가하고 등록하고 요청을 보냈음

근데 화면에는 아무것도 안보임

왜그럴까?

우리가 ex04 서블릿에 GET 방식 요청을 어떻게 처리한다고 했을까?

Sysout 만 써뒀으므로 이클립스의 콘솔을 확인해보면 Sysout이 된 걸 알 수 있음


여기까지 길고 길었던 서블릿을 추가하고 등록하고 요청을 보내고 처리 결과를 확인해봤음

이 글을 다시 한번 쭉 읽어보고 익히면서 잘 정리해보시 길

 

이쯤에서 드는 생각!

이걸로 뭘 어떻게 할 수 있는거지?

그 부분은 이 다음다음 글에서 알려드릴 예정!

728x90
LIST