|
今度はサーブレットを開発していきます。
TomcatでJSPが開発・使用できるようになった段階から、
サーブレットを開発できるようにするには、前準備が少し必要です。
JSPの開発をするには、テキストエディタ以外何も必要ないのですが、
サーブレットは純然たるJavaのプログラムですから、
当然のことながらJ2SEのjavacなどのJavaコンパイラが必要です。
また、サーブレットのAPIを提供するクラスライブラリも入手して、
環境変数CLASSPATHに通しておく必要があります。
これはTomcatでは、$CATALINA_HOME/common/libに置いてある
「servlet-api.jar」にCLASSPATHを通せばOKです。
以下に固定のHTML文書を出力するだけの役を果たす、
最も基本的なサーブレットのプログラム(クラス定義)を紹介します。
/*
* HelloServlet.java
* 2002/01/02
*/
package hello;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 日本語のHTML文書を出力する時必要
response.setContentType("text/html;charset=euc-jp");
PrintWriter out = response.getWriter();
out.println("<html><body bgcolor=\"white\">");
out.println("<h2>こんにちは</h2>");
out.println("これはサーブレットのサンプルです。 <br>");
out.println("</body></html>");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
|
サーブレットをコンパイルしてできたクラス (この例では HelloServlet.class) は、
Tomcatのアプリケーションディレクトリを「app」としますと
$CATALINA_HOME/webapps/app/WEB-INF/classes/hello
に置きます。
「hello」の部分はサーブレットクラスのパッケージ修飾に正確に対応するように、
適宜変更する必要があります。
なお、この短いプログラムで最も注意が必要な点は、
HttpServletResponse.setContentType()は、getWriter()より先に実行しないといけないという点です。
getWriter()の時点で応答ヘッダが固定されるので、逆にしてはいけません。
そしてもうひとつ、
サーブレットなどのJavaクラスの配備位置を指定するテキストファイル、「web.xml」
を書く必要があります。これは、最初から作られている
「demo」アプリケーションディレクトリ内にある「web.xml」を参考に、
$CATALINA_HOME/webapps/app/WEB-INF/web.xml
となる位置に置きます。
ここでURLとロードされるサーブレットのクラス名の対応付けなどを定義するわけです。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Define servlets that are included in the example application -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>hello.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
|
これで作業は完了です。Tomcatのポート番号を8765とすると、
http://localhost:8765/app/HelloServlet
にアクセスしてみて、期待した通りのHTML文書が表示されれば大成功です。
また、サーブレット名は必ずしも「〜Servlet」である必要はなくて、
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>hello.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
|
のようにすることもできます。この場合は
http://localhost:8765/app/loginと、簡潔なURLとなります。
ただし、url-patternには、アプリケーション名(app)は含めてはいけないことに注意してください。
要は、servlet-classタグが、サーブレットのクラスをパッケージ修飾も含めて正確な位置を指してさえいれば、
Web上での見え方は自由にできるということですね。
(first uploaded 2002/01/02 last updated 2007/02/11, KQ TAURA-URANO398)
|