EclipseとTomacatでSCWCD

|

2.1.3 HTTPメソッドに対応するHttpServletメソッド

RFC2616 にて記述されている、HTTPメソッドを使用して、通常ブラウザは データを要求します。

HttpServlet は抽象クラスであり、開発者はHTTPメソッドに対応するHttpServletクラスのメソッドを オーバーライドすることにより、その要求に対するレスポンスを生成します。

HttpServletクラスのメソッド名は、do + Httpメソッド名 となっています。

HTTPメソッドとHttpServletメソッドの対応
HTTPメソッドServletメソッド
OPTIONSdoOptions( )
GETdoGet( )
HEADdoHead( )
POSTdoPost( )
PUTdoPut( )
DELETEdoDelete( )
TRACEdoTrace( )
CONNECT-

それぞれのHttpServletのメソッドは、以下のようなシグネチャを持っています。

protected void doXxx(ServletRequest request, ServletResponse response)
    throws ServletException, IOException

HttpServletクラスは、service()メソッドで、HTTPメソッドの種類により、クライアントからの要求を、 上記のHttpServletメソッドを呼び出します。

service() メソッドのソースを確認すると、リクエストから HTTPメソッド名を取得して、 HTTPメソッド名によって、doXxx メソッドを呼び出しているところを確認できます。

HttpServlet.service()

ソースコード上で、Ctrl + o を押下することで、メソッドをインクリメンタルに検索できます。

メソッドの検索

2.1.4 doGetメソッドを拡張するServlet

試しに、doGetメソッドを拡張する簡単なサーブレットを作成して見ようと思います。

(1) servlet パッケージの作成

パッケージの作成は必須ではありませんが、ここでは、「servlet」というパッケージを作成し、 そこにテストServletを格納していきます。

「WEB-INF/src」を選択し、コンテキストメニューから、New > Package にて、あらたに servlet パッケージを作成します。

servlet パッケージの作成

(2) 拡張Servletクラスの作成

作成した servlet パッケージを選択し、コンテキストメニューから、New > Class を選択します。

Servlet クラスの作成

Name に "HelloServlet" を設定し、SuperClass にて、Browse ボタンを押下し、 java.servlet.http.HttpServlet を選択するか、直接入力し Finish ボタンを押下します。

servlet パッケージの作成

作成した HelloServletクラスを開き、以下の手順にて doGet()メソッドをオーバーライドします。

ソースコード上でコンテキストメニュー > Source > Override/Implement Method を選択

doGetメソッドのオーバーライド

オーバーライド、または実装可能なメソッドの一覧がダイアログに表示されますので、 その中から、doGet メソッドにチェックを入れ、OK を押下します。

doGetメソッドのオーバーライド2

以下のコードを実装します。

package 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;

public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = -930386857509367419L;

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Test Servlet 1</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>Hello Servlet World.</h1>");
		out.println("</body>");
		out.println("</html>");
	}
}


(3) Tomcat の設定

Tomcatのインストールディレクトリの conf ディレクトリ C:\Program Files\Apache Software Foundation\Tomcat 5.5\confの web.xml ファイルを開き以下の編集を行います。

doGetメソッドのオーバーライド2

<!-- 以下のブロックのコメントアウトをはずす -->
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
<!-- ここまで -->

            :

<!-- 以下のブロックのコメントアウトをはずす -->
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
<!-- ここまで -->

(4) scwcd アプリケーション の設定

今回は、Eclpseを利用して、Tomcat プロジェクト "scwcd" を作成していますが、 この、"scwcd" が Webアプリケーションとなります。

アプリケーションの設定用に以下の内容の、web.xml を作成し、C:\Program Files\eclipse 3.1\workspace\scwcd\WEB-INF に配置します。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

	<servlet>
	    <servlet-name>HelloServlet</servlet-name>
	    <servlet-class>
	      servlet.HelloServlet
	    </servlet-class>
	</servlet>    

</web-app>

web.xmlの作成

プロジェクト scwcd を選択しコンテキストメニューから、Tomcat プロジェクト > Tomcatのコンテキストを更新する を選択します。

Tomcatコンテキストの更新

(5) Servletの実行

以上でEclipse上から、作成した HelloServletを実行する準備が整いましたので、 Tomcatの起動アイコンを押下し、Tomcatを起動します。

Tomcatコンテキストの更新

ブラウザを起動し、次のアドレスを開き、作成したServletが実行されることを確認します。

http://localhost:8080/servlet/HelloServlet

Tomcatコンテキストの更新

(6) Servletのデバッグ

ソースコード、たとえば HttpServletのservece メソッドの行を選択し、Shift + Ctrl + b を押下することで、 指定の行にブレークポイントを設定することができます。 この状態で、サーブレットを呼び出すと該当コードにて実行が一旦停止し、各種デバッグを行うことができます。

Tomcatコンテキストの更新