2011年10月19日水曜日

[Servlet][JSP]サーブレット最小アプリケーションの作成

eclipseは日本語All in one環境であるPleiadesがインストールされているものとする。

1. [ファイル]-[新規]-[プロジェクト]を選ぶ。
2. [Tomcatプロジェクト]を選択し[次へ]をクリックする。
3. プロジェクト名を入力し、[完了]をクリックする。(※1)
4. [WEB-INF]ディレクトリ直下に、web.xmlを作成する。
5. eclipse上からTomcatを起動する。
6. ブラウザでhttp://localhost:8080/[プロジェクト名]/index.htmlにアクセスする。(※2)

※1 プロジェクト名は英小文字のみをハイフンで接続するのが通例。
※2 index.htmlを作成している場合の例。web.xmlの設定による。

XMLの記述内容サンプルは、次の通り。

<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>Index</servlet-name>
    <servlet-class>servlet.IndexServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Index</servlet-name>
    <url-pattern>/index.html</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>Top</servlet-name>
    <servlet-class>servlet.TopServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Top</servlet-name>
    <url-pattern>/top.html</url-pattern>
  </servlet-mapping>

</web-app>

(以上、サンプル)

<web-app>タグにあるごちゃごちゃした記述は、JSPのEL式を使うために必須。(xmlns等)
EL式がないとJSP上にJavaのコードを書くことになるので、おまじないだと思って書くこと。

<servlet>タグ内の<servlet-name>タグは、サーブレットに付ける名前で任意。
プログラム上の名称と合わせたりする必要はない。
<servlet-mapping>との関連付けのために必要。
<servlet-mapping>内の<servlet-name>と同じものを書くこと。

<servlet>タグ内の<servlet-class>は、実際に動かすサーブレットプログラムクラスの完全修飾名を記述する。
"servlet.IndexServlet" と書いたら、プロジェクト配下のservletパッケージにあるIndexServletクラスを指す。
本格的なWebアプリならパッケージ名は "jp.co.xxx.sys.servlet.XxxClass" のように長くなるはずである。

<servlet-mapping>タグ内の<servlet-name>タグは、<servlet>タグと同じものを記述する。
<servlet-mapping>タグ内の<url-pattern>タグは、ブラウザで入力するURLを指定する。
"/index.html"と書いたら、"http://localhost:8080/[プロジェクト名]/index.html" と書くことで、対応するサーブレットが動く。
外部の人から見て、あたかもhtmlを読んでいるかのように見せることができる。

【重要!】Tomcatを起動しても、サーブレットが動かない場合
TOMCAT_HOME配下の設定ファイルにコンテキスト設定がないことが考えられる。
TOMCAT_HOMEはTomcatのインストールディレクトリを指す。
"TOMCAT_HOME/conf/Catalina/localhost" ディレクトリ配下にコンテキスト設定を記述した[プロジェクト名].xmlファイルを置くか、"TOMCAT_HOME/conf/server.xml" にコンテキスト設定を追加することで、アプリケーションが動作するようになる。

後者のserver.xml直接編集はTomcatの設定を変えることになるので、最近は前者がほとんどである。
eclipseの[ウインドウ]-[設定]を選んで、[Tomcat]-[コンテキスト宣言モード]を見るとどちらを使っているか分かる。
後者のXMLファイルに記述する設定内容は、次の通り。

<Context path="/web-app-sample"
         reloadable="true"
         docBase="C:\eclipse\workspace\web-app-sample"
         workDir="C:\eclipse\workspace\web-app-sample\work" />

docBaseで指定したディレクトリ配下のWEB-INFディレクトリを、サーブレットのディレクトリとしてTomcatが認識する。
上記設定サンプルでいうと、docBaseで指定したディレクトリ配下にservletというパッケージがあり、その中にIndexServletクラスがあれば、"http://localhost:8080/web-app-sample/index.html" と記述することでアクセスできるようになる。
この他、「TOMCAT_HOMEがない」というエラーが出る場合は、プロジェクトの右クリックメニューから[ビルドパスの構成]を選択して、TOMCAT_HOMEのディレクトリ設定を行う必要もある。

サーブレットはサンプルを動かすまでが大変。
eclipseとTomcatがあれば動くはずなので、設定をよく見直してまずは動かそう。
サーブレットプログラムは、動作確認だけなら次のコードで十分。

public class IndexServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        RequestDispatcher rd = req.getRequestDispatcher("/jsp/index.jsp");
        rd.forward(req, res);
    }
}

JSPファイルはeclipseのプロジェクト直下にjspフォルダを作ってそこに置いておく。
(場所を変えても問題ない)
JSPの内容は、次の通り。(ここではUTF-8を使用している)

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>web-app-sample</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>

0 件のコメント:

コメントを投稿