서블릿 개발하기 연재목록
#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 메서드에 대해서 알아보도록 하겠습니다.
'Java' 카테고리의 다른 글
[서블릿 개발하기] #6 GET/POST 요청과 함께 파라메터 전달 하기 (0) | 2019.04.16 |
---|---|
[서블릿 개발하기] #5 POST요청을 처리하는 서블릿 만들기 (0) | 2019.04.15 |
[서블릿 개발하기] #3 첫번째 JSP 파일 만들기 (0) | 2017.12.25 |
[서블릿 개발하기] #2 프로잭트 생성 (0) | 2017.12.25 |
[서블릿 개발하기] #1 개발환경 구축 (0) | 2017.12.24 |