サーブレット名と URL パターン

Revised: 16th/June/2002

前節で作った GET メソッドと POST メソッドで HTML フォームを処理するサーブレットに対して、サーブレット名を付けて、 URL パターンを設定します。これらの情報は、サーブレットが置かれているドキュメントルート内の WEB-INF/web.xml に記述します。ドキュメントルートが C:\DocRoot にマップされていれば、 C:\DocRoot\WEB-INF\web.xml になります。

この作業はサーブレットの最初の節で行いました。ここでは、 GET メソッドのサーブレット GetDemoget と名づけて、 /form/get にマップします。同様に、 PostDemopost と名づけて /form/post にマップします。

web.xml の変更は Tomcat を停止/開始して反映させます。

このように設定すると、これらのサーブレットへは、次の URL でアクセスできます。但し、ドキュメントルートが webAppl に設定されている場合の例です。

GetDemo の設定

web.xml の編集

C:\DocRoot\WEB-INF\classes\GetDemo.class へ、 http://localhost:8080/webAppl/form/get からアクセスできるようにするには、 C:\DocRoot\WBE-INF\web.xml を次のように編集/保存して Tomcat を再開始します。

<?xml version="1.0" encoding="Shift_JIS"?>

<!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>
    <!-- サーブレット名 -->
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>get</servlet-name>
        <servlet-class>GetDemo</servlet-class>
    </servlet>

    <!-- URL マッピング -->
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello.hogehoge</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>get</servlet-name>
        <url-pattern>/form/get</url-pattern>
    </servlet-mapping>
</web-app>

動作確認

Tomcat が正常に再開始できたら、変更が反映されているか、ブラウザで確認します。サーブレットの呼び出しは http://localhost:8080/webAppl/form/get になります。

フォーム・データの受け取りは GET メソッドでは URL につなげて送信されますので、ここでは、直接 URL にデータをつなげて要求してみましょう。もちろん、前述の GET メソッド用の HTML フォームで、 form 要素の action 属性値を、/webAppl/form/get に書き換えて要求しても同じです。

ためしに、上記 URL に続けて、 ?namae=suzuki&toshi=24&sei=female&memo=hello としてみます。次のデータを送信することになります:

namevalue
namaesuzuki
toshi24
seifemale
memohello

ブラウザから要求する URL は全体で http://localhost:8080/webAppl/form/get?namae=suzuki&toshi=24&sei=female&memo=hello になり、その要求に対する応答は次のようになります:

GET メソッドに対する応答
図:GET メソッドに対する応答
<html lang="ja">
<head><title>HTTP GET メソッド・デモ</title>
<meta http-equiv="text/html" content="text/html; charset=Shift_JIS" /></head>
<body>
<h1>HTTP GET メソッド・デモ</h1>
<table border="1">
<tr><th>名前</th><td>suzuki</td></tr>
<tr><th>年齢</th><td>24</td></tr>
<tr><th>性別</th><td>female</td></tr>
<tr><th>メモ</th><td>hello</td></tr>
</table>
</body></html>

PostDemo の設定

同様に、 C:\DocRoot\WEB-INF\classes\PostDemo.class へ、http://localhost:8080/webAppl/form/post からアクセスできるように、 WEB-INF/web.xml を書き換えて、 Tomcat を再開始します。また、 POST メソッドの HTML フォームを書き換えて、マッピングした新しいアドレスへ要求を出して、応答を確認します。

web.xml

本サイトの案内どおりに作っていれば、 C:\DocRoot\WEB-INF\web.xml になります。

<?xml version="1.0" encoding="Shift_JIS"?>

<!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>
    <!-- サーブレット名 -->
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>get</servlet-name>
        <servlet-class>GetDemo</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>post</servlet-name>
        <servlet-class>PostDemo</servlet-class>
    </servlet>

    <!-- URL マッピング -->
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello.hogehoge</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>get</servlet-name>
        <url-pattern>/form/get</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>post</servlet-name>
        <url-pattern>/form/post</url-pattern>
    </servlet-mapping>
</web-app>

HTML フォーム

本サイトの案内どおりに作っていれば、 C:\DocRoot\post.html になり、 Tomcat が稼動している場合は、 http://localhost:8080/webAppl/post.html からアクセスできます。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
<title>POST メソッドのフォーム</title>
</head>
<body>
<h1>HTTP POST メソッド</h1>

<form action="/webAppl/form/post" method="POST">
<p>POST メソッドのフォームの例</p>
<table>
<tr><th>name:</th><td><input type="text" name="namae" size="30" /></td></tr>

<tr><th> age:</th><td><input type="text" name="toshi" size="2" maxlength="2" /></td></tr>

<tr><th> sex:</th><td><input type="radio" name="sei" value="male" />male
                      <input type="radio" name="sei" value="female" />female</td></tr>

<tr><th>message:</th><td><input type="text" name="memo" size="50" /></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="送信" /></td></tr>
</table>
</form>

</body>
</html>

但し、これは文字コードが Shift_JIS (SJIS) の場合です。他の文字コードで保存している場合は、上記ソースの二箇所の文字コード指定(1行目と6行目)を書き換えてください。

動作確認

web.xml の変更は、 Tomcat を停止/開始して反映します。 HTML 文書も、見た目は変わらないので、ブラウザの「更新(リロード)」ボタンを押して、更新されている事を確認しましょう。

Tomcat が稼動している事を確認して、 http://localhost:8080/webAppl/post.html にアクセスし、 HTML フォームにデータを入力します。

POST メソッドのフォーム
図:POST メソッドのフォーム

実行ボタン (submit) を押して、正しくサーブレットへ要求が伝わるか確認します。

POST メソッドに対する応答
図:POST メソッドに対する応答


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送