JSP/Servlet | 서블릿(Servlet) | 간단한 서블릿 작성

그러면 실제로 극히 초보적인 서블릿을 만들어 보자. 아래에 서블릿 샘플 코드 및 web.xml 파일의 등록 예제가 있다.

MyGaeAppServlet.java

package com.devkuma.mygaeapp;

import java.io.*;

import javax.servlet.http.*;

@SuppressWarnings("serial")
public class MyGaeAppServlet extends HttpServlet {
    
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
       response.setContentType("text/html");
       request.setCharacterEncoding("utf8");
       response.setCharacterEncoding("utf8");
       PrintWriter out = response.getWriter();
       out.println("<html><head></head><body>");
       out.println("<h1>Hello, world</h1><p>this is sample servlet.</p>");
       out.println("</body></html>");
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws IOException {
       // not use.
   }
}

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
       http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
   <servlet>
       <servlet-name>MyGaeApp</servlet-name>
       <servlet-class>com.devkuma.mygaeapp.MyGaeAppServlet</servlet-class>
   </servlet>
   <servlet-mapping>
       <servlet-name>MyGaeApp</servlet-name>
       <url-pattern>/mygaeapp</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
       <welcome-file>index.html</welcome-file>
   </welcome-file-list>
</web-app>

GAE 프로젝트를 만들 때 기본적으로 MyGaeAppServlet라는 클래스의 소스 코드 파일이 생성되어 있을 것이다 (프로젝트 “src"폴더에 있다). 이것을 그대로 사용한다.

만약 새로운 서블릿을 만들고 싶다면, [File]-[New]-[Class] 메뉴를 선택하고 프로젝트의 “src"폴더에 새로운 클래스의 소스 코드 파일을 작성한다.

여기에서는 MyGaeAppServlet 클래스의 doGet 메소드에 간단한 출력의 샘플 코드가 작성되어 있다. doPost는 메소드만으로 내용은 없다. 완성되면 GAE에 배치하고 다음과 같이 주소를 지정하여 방문해 본다.

http://{응용 프로그램 이름}.appspot.com/mygaeapp

간단한 텍스트를 표시하는 것이지만, 일단 제대로 표시되면 OK이다. 아주 간단하지만, 서블릿 코드와 설정을 작성하여 배포하기까지의 기본은 이것으로 알 수 있었다.

기억해 두어야 하는 서블릿의 기본 처리

이 doGet는 서블릿에서 반드시라고 해도 될 만큼 사용되는 처리만으로 구성되어 있다. 이들은 “서블릿의 기본 처리"로 먼저 기억해야 한다. 다음에 순서대로 정리를 해 보겠다.

콘텐츠 형식의 설정

response.setContentType(유형);

클라이언트 측에 어떠 결과를 표시할 경우, 그 내용이 어떤 유형의 콘텐츠인지를 설정해 둘 필요가 있다 (그렇지 않으면 브라우저가 해당 콘텐츠를 표시할 수 있을지 없을지 알 수 없게 되기 때문에). 이것을 수행하는 것이 HttpServletResponse의 “setContentType"이다. 이것은 인수에 콘텐츠 형식을 나타내는 텍스트를 지정한다. 우선, 다음 두가지를 명심하자.

  • HTML의 경우 : “text/html”
  • 일반 텍스트의 경우 : “text/plain”

인코딩 설정

request.setCharacterEncoding(인코딩 이름);
response.setCharacterEncoding(인코딩 이름);

클라이언트와 정보를 주고 받는 경우, 기본은 ‘텍스트’이다. 그렇게 되면, 그 텍스트가 어떤 인코딩인지 모르면 글자가 깨질 수 있다. 그 설정을 수행하고 있는 것이, 이 두 문장이다.

“setCharacterEncoding"는 인수에 지정된 인코딩 설정을 하는 것이다. 이는 HttpServletRequest와 HttpServletResponse 양쪽 모두 제공되어 있다. HttpServletRequest는 브라우저 등에서 보내온 텍스트 인코딩이고, HttpServletResponse은 클라이언트에 텍스트를 보낼 때 인코딩이다. GAE의 경우 UTF-8이 기본이기 때문에, 모두 “utf8"로 해두면 된다.

PrintWriter 얻기

PrintWriter out = response.getWriter();

클라이언트에 출력(즉, 브라우저에 뭔가를 보내는 것)은 “PrintWriter"라는 클래스를 이용한다. 이것은 HttpServletResponse의 “getWriter"메서드를 호출하여 인스턴스 얻어올 수 있다. 이렇게 꺼낸 PrintWriter의 메소드를 호출하여 출력을 한다.

클라이언트에 출력

out.println(출력하는 값);

PrintWriter으로 값의 출력에 이용되는 것이 “println” 메소드이다. 이것은 인수에 지정된 값을 클라이언트에 보낸다. 오버로드되어 있어서 인수에 어떤 값으로도 지정할 수 있다.

여기에서는 HTML 소스 코드를 작성하고 있다. 어떤 HTML 페이지를 다시 보낼 경우, 이와 같이 HTML 태그를 println에 작성하면 된다.

그래서, 우선 간단한 서블릿을 만드는 방법은 이제 알았다. 이번 기본 부분은 서블릿 작성에 반드시 필요한 지식이다. 다음에 좀 더 구체적인 서블릿 작성을 할 것이기에 이것까지는 꼭 기억해 두도록 하자.