JSP/Servletのお勉強メモ その4

昨日からJSPでformタグを使ったデータ送信のプログラムが上手くいかなくて悩んでた.
サンプル通りに組んでる(はず)なのにあんまりにも上手くいかないから,
ネットからサンプルプログラムを取ってきて動かしたら, それは上手くいった.
ネットのサンプルをそのまま自分の書いたのにコピーすると上手くいき, 自分のだと上手くいかない.
見る限りソースは同じなんだけどなあ.
とりあえず, 全然すすまないからこれは放置しておくことにした.
一応ネットからとってきたサンプルは動くわけだし.

サーブレットの作成手順

以前にもやったけど, もう1回確認しておく.

  1. サーブレットクラス(Javaソース)の作成
  2. ソースのコンパイル
  3. web.xmlサーブレットを登録
  4. Tomcatを起動して, ブラウザ上からアクセス

コンパイルのときの注意は, servlet-api.jarをクラスパスの加えるのを忘れないこと.
なお, ソースから作成したクラスファイルは, WEB-INF/classes以下に配置する.


サンプルはこんな感じ.

package chap09.sec02;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServletWorld extends HttpServlet
{
    public void doGet( HttpServletRequest request, HttpServletResponse response )
        throws IOException, ServletException
    {
        response.setContentType( "text/html; charset=EUC_JP" );
        PrintWriter out = response.getWriter();
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>Servlet</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( "HelloServletWorld" );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
        out.close();
    }
}

そして, コンパイル.

 javac -d classes src/chap09/sec02/HelloServletWorld.java

自分の場合は, 環境変数CLASSPATHservlet-api.jarを加えてるからコマンドライン上での指定はなし.
オプション-dで, クラスファイルをclasses以下に配置してくれる.
ディレクトリの構成もソースファイルの置いてあるsrcディレクトリ以下と全く同じになる.


そして, 面倒なweb.xmlへの登録をする.
つぎの文を ... 内に追加.

    <!-- HelloServletWorld.java  -->
    <servlet>
        <servlet-name>HelloServletWorld</servlet-name>
        <servlet-class>chap09.sec02.HelloServletWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServletWorld</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>

これが地味に間違ってたりして, 非常にやっかい.
そして再起動.
一々再起動しないといけないのは面倒だなあ.


サーブレットJavaのソースが基本となってて組みやすいけど,
htmlソースの部分をうつのが面倒.
そして, 登録も面倒.
この2つが作成する上での問題かな.





今日はこんなところで.
やっとJSPサーブレットの章が終わった.
JSPサーブレット連携するのはいいなあ.
次はカスタムタグか. 飛ばしてデータベースいっちまおうかな.