서블릿 개발하기 연재목록

#1 개발환경 구축 (https://opensrc.tistory.com/180?category=475522)

#2 프로잭트 생성 (https://opensrc.tistory.com/181?category=475522)

#3 첫번째 JSP 파일 만들기 (https://opensrc.tistory.com/182?category=475522)

#4 첫번째 서블릿 만들기 (https://opensrc.tistory.com/183?category=475522)

#5 포스트 요청을 처리하는 서블릿 만들기 (https://opensrc.tistory.com/203?category=475522)

#6 GET/POST 요청과 함께 파라메터 전달 하기 (https://opensrc.tistory.com/204?category=475522)

#7 Servlet 들여다 보기 (https://opensrc.tistory.com/206?category=475522)

===========================================================




이제 첫번째 서블릿을 만들어 보겠습니다.

좀 식상하긴 하지만 화면에 hello, world 라고 출력하는 서블릿을 만들어 보도록 하겠습니다.

많은 프로그래밍 서적에 처음 작성하는 프로그램의 단골로 등장하는 프로그램입니다.


hello, world 는 UNIX OS를 만든 Dennis M. Ritchie가 UNIX를 만들기 위해 만든 C언어를 대중에 소개하기 위해 1978년에 쓴 The C PROGRAMMING LANGUAGE 라는 책의 1장에 나오는 프로그램입니다. 

#include <studio.h>
main()
{
    printf("hello, world\n");
}

마치 이후로 40년이 넘는 세월 동안 수 많은 시스템을 만드는 언어가 될 것을 예고라도 하듯이 '세상아 안녕' 하는 느낌입니다. 


이것을 순수하게 현대의 자바 코드로 바꾼다면

class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.print("hello, world\n");
    }
}

이정도 코드로 만들면 될 것 같습니다. 우리는 이것을 HelloWorldServlet.java 라는 이름의 서블릿 프로그램으로 작성해 보도록 하겠습니다.

Java 코드를 먼저 보여드린 이유는 서블릿은 많은 플렛폼과 통신을 해야 하는 프로그램이기 때문에 Java 코드 몇 줄로 뚝딱 나오지 않는 다는 것을 비교하기 위해서 입니다.


각설 하고 이제 HelloWorldServlet.java 를 생성해 보도록 하겠습니다.

먼저 서블릿을 담을 패키지를 먼저 생성하겠습니다. 저는 이 블로그 도메인을 기준으로 com.tistory.opensrc.basicservlet.servlet 으로 하겠습니다.

이클립스 Project Explorer에서 지난시간에 생성한 프로잭트에 오른쪽 마우스 클릭하여 New > Package 메뉴를 를 선택합니다.

패키지명에 원하시는 패키지명을 입력하세요.


패키지가 생성되었으면 서블릿을 만들 겠습니다.

생성된 패키지 오른쪽 마우스 클릭 New > class 메뉴 선택

아래 화면처럼 Name : HelloWorldServlet 라고 입력 합니다.

부모 클래스를 지정해 주도록 하겠습니다.

Superclass : 오른쪽으 [Browse...] 버튼을 클릭합니다.


Choose a type : HttpServlet 입력하면

Matching items 에 아래처럼 목록이 나옵니다.

HttpServlet - javax.servlet.http 선택 후 [OK] 클릭


[Finish]를 클릭 하면 아래와 같은 모양의 첫번째 서블릿이 생성됩니다.



자동으로 생성된 코드인데도 이상하게 HelloWorldServlet 에 warning 표시인 노란색 및줄과 라인번호 앞에 느낌표가 켜져있습니다.

내용을 확인해 보면... 시리얼 버전 ID를 입력하라는 경고입니다.

이것은 java.io.Serializable 인터페이스를 구현(implements)하는 클래스에 나타나는 특성입니다.

API를 확인해 보면 HttpServlet 이 java.io.Serializable 를 implemented 되었음을 알 수 있습니다.

(https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html)


위 메뉴에서 Add generated serial version ID 를 클릭해서 ID를 생성해도 되고 그냥 실행하면 JVM이 자동 생성해서 붙혀준답니다.

자세한 내용은 http://hyeonstorage.tistory.com/253 이것에 잘 설명이 되어 있으니 참고 하시길 바랍니다.



HelloWorldServlet.java

package com.tistory.opensrc.basicservlet.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * 첫번째 hello, world 서블릿
 * @author cloud
 */
public class HelloWorldServlet extends HttpServlet {
	
	/**
	 * serial version id
	 */
	private static final long serialVersionUID = 701289870660846795L;

	/**
	 * GET 요청을 처리
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		response.setContentType("text/html"); // text html 형태로 출력 하겠다고 지정함
		PrintWriter out = response.getWriter(); // response로 부터 출력 장치를 확보
		
		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world");
		out.println("</html>");
	}
}

URL을 호출 하면 응답 하도록 GET 메소드에 응답하는 doGet 메서드를 생성 했습니다.

doGet 메서드의 원형은 사용자로 부터 요청을 담고 있는 HttpServletRequest 와 응답을 할 HttpServletResponse 객체를 인자로 가지고 ServletException 과 IOException 을 발생 할 수 있습니다.

이외 소스 내용은 주석을 참고 하시기 바랍니다.


이제 우리가 HelloWorldServlet 이 사용자 요청을 받아서 실행 될 수 있도록 설정을 해야 합니다.

간단하게 어노테이션을 이용할 수 도 있지만. 원래의 목적대로 서블릿의 근본적인 부분을 알아가기 위해  web.xml 에 직접 세팅을 해보도록 하겠습니다.


WebContent\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>BasicServlet</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>HelloWorld</servlet-name><!-- 시스템 에서 사용할 서블릿의 이름 --> <servlet-class>com.tistory.opensrc.basicservlet.servlet.HelloWorldServlet</servlet-class><!-- 서블릿의 패키지명 포함 클래스명 --> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name><!-- 위에서 선언한 서블릿 이름 --> <url-pattern>/hello</url-pattern><!-- 대응할 URL --> </servlet-mapping> </web-app>

<servlet>~</servlet>, <servlet-mapping>~</servlet-mapping> 내용을 입력합니다.

간단히 설명하면  윗쪽 <servlet>의 두줄은 com.tistory.opensrc.basicservlet.servet.HelloWorldServlet 을 HelloWorld로 서블릿의 이름을 지정하는 것이고

아래 <servlet-mapping> 사용자로 부터 /hello URI로 호출이 들어오면 위에서 지정한 HelloWorld 서블릿을 호출 하도록 지정 하는 것입니다.

결국 사용자가 주소창에 http://serveraddress/hello 라고 입력하면 위에서 작성한 HelloWorldServlet.java 가 실행되어서 화면에 hello, world 라고 출력 하도록 설정을 하는 것입니다.


모두 이상 없이 입력 되었으면

지난 시간에 설정한 Apache Tomcat v8.0 서버를 실행한 후 브라우져를 띄워서 주소창에 http://localhost/hello 라고 입력합니다.

지금까지 스텝을 잘 읽고 따라 했다면 아래와 같은 결과 화면을 만나게 될 것입니다.


화면 바탕에 마우스 오른쪽 버튼을 누르고 페이지 소스보기를 해보면


이것은 우리가 HelloWorldServlet.java 의 doGet 메서드 안에 기술 했던

		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world");
		out.println("</html>");

이부분이 브라우저에 출력된 것임을 알 수 있다.


다음 시간에는 POST 메서드에 대응하는 doPost 메서드에 대해서 알아보도록 하겠습니다.

+ Recent posts