サーブレットで Hello Servlet!
「Hello Servlet!」と表示するサーブレットを作成していきます。
Hello Servlet!
任意のフォルダーに HelloServlet.java ファイルを作成し、テキストエディタを使用して次のプログラムを作成します。
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html><head></head><body>");
out.println("<p>Hello Servlet!</p>");
out.println("</body></html>");
}
}
サーブレットで自前のアプリケーションを作成するには、 HttpServlet を継承します。
ここでは、クライアントからリクエストされる HTTP メソッドが GET メソッドとして、 HttpServlet クラスのメソッドをオーバーライドした doGet() の中で HTML のタグを出力(レスポンスを返す)するよう作成しています。
プログラムが作成出来たらコンパイルします。
C:\src\hello_servlet>javac HelloServlet.java
HelloServlet.java:3: エラー: パッケージjavax.servletは存在しません
import javax.servlet.ServletException;
^
HelloServlet.java:4: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServlet;
^
HelloServlet.java:5: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletRequest;
^
HelloServlet.java:6: エラー: パッケージjavax.servlet.httpは存在しません
import javax.servlet.http.HttpServletResponse;
^
HelloServlet.java:8: エラー: シンボルを見つけられません
public class HelloServlet extends HttpServlet {
^
シンボル: クラス HttpServlet
HelloServlet.java:9: エラー: シンボルを見つけられません
public void doGet(HttpServletRequest request, HttpServletResponse response)
^
シンボル: クラス HttpServletRequest
場所: クラス HelloServlet
HelloServlet.java:9: エラー: シンボルを見つけられません
public void doGet(HttpServletRequest request, HttpServletResponse response)
^
シンボル: クラス HttpServletResponse
場所: クラス HelloServlet
HelloServlet.java:10: エラー: シンボルを見つけられません
throws IOException, ServletException{
^
シンボル: クラス ServletException
場所: クラス HelloServlet
エラー8個
何も考えずコンパイルを実行すると上記エラーが発生します。これは、サーブレットに必要なライブラリーが JDK の中にはないため発生しており、次のようにコンパイラーの引数にライブラリを指定します。(ライブラリは、 Tomcat のインストールフォルダーにインストールされています。)
C:\src\hello_servlet>javac -classpath C:\tomcat9\lib\servlet-api.jar HelloServlet.java
コンパイルに成功すると HelloServlet.class が作成されます。
サーブレットの配備
Web コンテナが作成したサーブレットを処理できるよう、実行環境に HelloServlet.class を配備します。
Tomcat では、 Tomcat インストールフォルダーの配下にある webapps フォルダーへアプリケーションを配備します。ここでは、 webapps フォルダーの配下に hello_servlet フォルダーを作成し作成したサーブレットを配備します。
Tomcat で必要なフォルダーを確認するため examples フォルダーの中を見てみます。 examples フォルダーにある WEB-INF フォルダーは重要な役割を持っており、このフォルダーの配下にあるサーブレットと URL が対応するよう処理されます。
examples/WEB-INF フォルダーには、 lib フォルダー ・ classes フォルダー ・ web.xml ファイルが特に重要になります。
- classes:プログラムを配置する場所
- lib:必要なライブラリを配置する場所
- web.xml:web アプリケーションの設定ファイル
それでは、実際に作成した HelloServlet.class ファイルを配備していきます。
webapps フォルダーに hello_servlet フォルダーを作成し、 次に WEB-INF , その配下に classes フォルダーを作成します。
作成した classes フォルダーに HelloServlet.class を配備します。
次に WEB-INF フォルダーに設定ファイルの web.xml を作成します。
テキストエディタで web.xml に次のように記述していきます。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>Sample</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sample</servlet-name>
<url-pattern>/Sample</url-pattern>
</servlet-mapping>
</web-app>
<servlet> タグの中では、作成したプログラムと名前を関連付けており <servlet-mapping> では、 URL とサーブレットの名前を関連付けています。これにより、 URL からサーブレットを呼び出せるように設定されます。
ブラウザーを起動してアドレスに「localhost:8080/hello_servlet/Sample」と入力すると正しく設定されていれば「Hello Servlet!」と表示されます。