Servlet/JSP基礎編03 WEB.xmlとサーブレット

web.xmlを使用する

web.xmlとは、Webアプリケーションの動作設定を行うファイルである。

サーブレットのURLや初期化パラメータを記述できたり、フィルタの各種設定などが可能となっている。サーブレットのURLは前の記事で紹介したWebServletアノテーションと同じものである。

小さなアプリケーションであるなら、WebServletアノテーションが楽であるが、しかし、逆にたくさんのサーブレットを持つ場合はweb.xmlを使用して管理したほうが楽である。

今回のプログラムに使用するweb.xmlを実際に作成した。

<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        version="3.1">

    <servlet-name>hello3</servlet-name>
    <servlet-class>chapter4.Hello3</servlet-class>

<servlet-mapping>
    <servlet-name>hello3</servlet-name>
    <url-pattern>/chapter4/hello3</url-pattern>
</servlet-mapping>

 このweb.xmlの上半分はどのxmlでも共通する部分のため、特に解説しない。

重要になってくるのは、<servlet>と<servlet-mapping>で囲まれている部分である。

<servlet-name>はサーブレットを指定するための名前である。

<servlet-class>は作成するプログラムのクラスを記述する場所で「パッケージ名・クラス名」で指定する。

<url-pattern>はWebServletアノテーションと同じものを記述すればよい。

Hello3.javaプログラム

このプログラムでは、サーブレットの特徴である、Javaプログラムの中にHTMLを記述していきたいと思う。

ブラウザに「hello」「こんにちは」と日時を表示するプログラムとする。

このプログラムは」3つのファイルから構成する。理由として、今後もサーブレットを作るうえで、共通する部分を毎回記述するよりは、共通部分だけを別のファイルとして作成しておけば、次回からはインポートするだけで1行で何行分も表現できる。

なので、「Page」クラスを作成した。このクラスでは、headerメソッドと、footerメソッドを記述している。内容は以下のとおりである。

package tool;

import java.io.PrintWriter;

public class Page{

    public static void header(PrintWriter out){
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<meta charset='UTF-8'>");
        out.println("<title>Servlet/JSP Sample Programs</title>");
        out.println("</head>");
        out.println("<body>");
    }

    public static void footer(PrintWriter out){
        out.println("</body>");
        out.println("</html>");
    }
}

 特に難しいことは記述しておらず、HTMLを書いたことがある方なら見たことがあると思う。この部分はどのHTML文書でも記述しないといけないので、このように一つにまとめておけば、かなり楽になる。

では、Hello3プログラムを載せる。

public class Hello3 extends HttpServlet{

    public void doGet(HttpServletRequest request , HttpServletResponse response)
     throws ServletExceptionIOException{
        
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
  
        Page.header(out);
        out.println("<p>Hello!</p>");
        out.println("<p>こんにちは</p>");
        out.println("<p>"new java.util.Date() +"</p>");

       Page.footer(out);
    }
}

 doGetメソッドの中身を見てほしい。

setContentTypeで、レスポンスのMIMEタイプやエンコーディングを指定している。前の記事のプログラムでは、MIMEが「plain」となっていたが、今回はHTMLとして、渡すので、「html」と書いた。

そして、最も重要となるのは、Page.headerからである。共通部分はPageクラスに記述しているので、このような形で小さくまとめることができる。

あとは、printlnメソッドの中に<p>タグで、表示したい内容を書き込めばよい。

実際にコンパイルして、表示された内容が以下である。

 

Hello!

こんにちは

Mon Aug 24 05:36:42 JST 2020

 

問題なく、HTML文書として処理されているので、<p>タグはブラウザに表示されていないことが分かる。

おわりに

今回は、web.xmlについての説明と、HTMLをレスポンスとするサーブレットの作成を実際にした。

次回は、レスポンスだけでなく、サーブレットのリクエストの処理について触れていきたいと思う。