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である。これは引数にコンテンツタイプを表すテキストを指定する。まず、次の2つを覚えておこう。

  • HTMLの場合: “text/html”
  • 通常のテキストの場合: “text/plain”

エンコーディング設定

request.setCharacterEncoding(エンコーディング名);
response.setCharacterEncoding(エンコーディング名);

クライアントと情報をやり取りする場合、基本はテキストである。そうなると、そのテキストがどのエンコーディングなのかわからなければ文字化けする可能性がある。その設定を行っているのが、この2つの文である。

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に書けばよい。

これで、まず簡単なサーブレットを作る方法はわかった。今回の基本部分はサーブレット作成に必ず必要な知識である。次にもう少し具体的なサーブレットを作成するので、ここまでは必ず覚えておこう。