1、Webサーバ設定の「ディレクトリ一覧」機能
Webサーバの設定で「ディレクトリ一覧」機能を有効にすると、404 Not Found画面ではなく、ディレクトリ以下のファイルの一覧が表示されます。この機能をオンにするには、<Tomcatをインストールしたディレクトリ>/conf/web.xmlの104行付近の<init-param>のlistingsの値をtrueにします。
2、サーブレットAPI2.4日本訳
「http://mergedoc.sourceforge.jp/tomcat-servletapi-5-ja/」
3、サーブレットディレクトリ
entry
|--META-INF (固定)
| |--context.xml (固定)
|--WEB-INF (固定)
|--classes (固定)
| |--xxx.class
| |--パッケージFloder
| |--xxx.class
|--src
| |--xxx.java
| |--パッケージFloder
| |--xxx.java
|--web.xml (固定)
4、doGetメソッド、doPostメソッド
サーブレットが呼ばれた時にコールされる。
---------Start--------------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Sample1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println(createHTML("GET"));
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println(createHTML("POST"));
out.close();
}
---------End---------------------
5、日本語表示
Tomcatではデフォルトの文字エンコーディングが「ISO-8859-1」に設定されているため、日本語を使用する場合はHttpServletResponse.setContentType()メソッドで必ず文字エンコーディングを指定しましょう。
6、Shift_JISとWindows-31J
Shift_JIS、SJISは、機種依存しない
Windows-31J、MS932は、Windowsの機種に依存する。
7、web.xml
web.xmlはサーブレットのマッピング、初期化のパラメータ設定、セキュリティ設定など、様々な設定を記述できる。
XML内に日本語を記述する場合は、encoding属性を指定します。省略した場合のデフォルトはUTF-8となるので、必ずUTF-8で保存しなさい。
サーブレットAPI2.3と2.4のweb.xmlは、スキーマの定義が異なります。
・Servlet2.3/JSP1.2以前 ⇒ DTD
・Servlet2.4/JSP2.0以降 ⇒ XMLスキーマ
web.xmlで行うのはサーブレット/JSP標準の設定です。一方、コンテキストファイルにはTomcat独自の設定を記述する。
8、invokerサーブレットの設定
invokerはTomcatの専有機能です。
invokerサーブレットを利用すると、web.xmlへの登録を省略し、代わりにサーブレットをクラス名で呼び出します。
・基本、サーブレットは web . xml に登録しないと実行できない。
・invoker サーブレットは Tomcat 独自の機能。
・invoker サーブレットは セキュリティ上の問題がある。
利用方法は(Tomcat再起動必要)
①invokerサーブレットのservlet要素を有効にする
「<Tomcatをインストールしたディレクトリ>¥conf¥web.xml」にの下記のコメントを外します。
<!--
<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>
-->
②invokerサーブレットのservlet-mapping要素を有効にする
<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
③Webアプリケーションに特権を与える
「「<Tomcatをインストールしたディレクトリ>\conf\context.xml」に下記ように編集する。
<Context> ⇒ <Context privileged="true">
URLの呼び出し方は、「<サーバのURL>/<アプリ名>/servlet/完全クラス名」
9、入力パラメータを扱うHttpServletRequestのメソッド
・String getParameter(String name)
・String[] getParameterValues(String name)
・Enumeration getParameterNames()
10、日本語を入力する
入力パラメータはURLの一部としてサーブレットに渡されます。しかし、URLには日本語などを含めることができません。
対策:
・「request.getParameter」の前に、「request.setCharacterEncoding("Windows-31J");」でエンコードを設定する
・Tomcatバージョンにより、server.xmlを「 useBodyEncodingForURI="true"」と設定する。
(POSTリクエストの場合は、入力パラメータをURLの一部として送信しないため、上記設定がいらない)
11、Get、Post
GETやPOSTの事をリクエストメソッドと言う。
・Get: 指定したファイルを下さい!
・POST: 私の情報を受け取って下さい!
リクエストメソッド サーブレットのメソッド 説明
GET doGet() コンテンツを取得する。情報を送信する。
POST doPost() 情報を送信する。
HEAD doHead() ヘッダ部分を取得する。
PUT doPut() コンテンツを作成、更新する。
DELETE doDelete() コンテンツを削除する。
OPTIONS doOptions() 使用可能なオプションの一覧を返す。
TRACE doTrace() ループバックを起動する。
GET使用されるケースは、
・ブラウザのアドレスバーに直接アドレスを入力した場合
・リンク(アンカー)をクリックした場合
・フォームをサブミットした場合で、<FORM>タグのMethod属性にGETを指定した場合(またMETHOD属性を省略した場合)
POST使用されるケースは、
・フォームをサブミットした場合で、<FORM>タグのMethod属性にPOSTを指定した場合
12、request.getParameterValues(name)
「request.getParameter(name)」と違いまして、「request.getParameterValues(name)」は1つの名前に対して複数の値を返すことができます。Htmlの入力パラメータは、1つの名前に対する値は1つとは限らないからです。
13、サーブレットAPIとジェネリックス
・サーブレットAPI2.5はJAVA5以降のジェネリックスに対応していません。
⇒警告を抑制のため、「@SuppressWarnings("unchecked")」を指定します
・サーブレットAPI3.0は、ジェネリックス対応になっているため、上記ような対応が不要です。
・Java1.4以前の環境はジェネリックスを利用できませんので、明示的に型キャストします。
14、サーブレットに渡される入力パラメータは文字列です。