環境

OS: Windows 2000

開発ソフトをインストール

  • JDK 5.0 をインストール
  • Apache Tomcat 4.1 をインストール
  • Eclipse SDK 3.2.0 をインストール
  • Eclipse から J2EE Standard Tools (JST) や Web Standard Tools (WST) をインストール

主な Eclipse 設定

Eclipse のメニューから [Window] -> [Preferences] でいろいろ設定しておく。

主な設定項目:

  • [Java] -> [Installed JREs] にて JDK (JSPのコンパイルのためにJREじゃなくてJDK) を追加。
  • [Server] -> [Installed Runtimes] にて Apache Tomcat v4.1 を追加。

プロジェクトの作成

プロジェクトを作成するウィザードから "Dynamic Web Project" を選択。
Target Runtime の項目に Apache Tomcat v4.1 を指定。
[Project Facets] のページでは Dynamic Web Module と Java のバージョンを指定。(Tomcat 4.1 の場合は Dynamic Web Module に 2.3 を指定(Servlet Specification のバージョン?), Java は 1.4 以降かな?)

プロジェクト名を hoge にして Context Root も hoge にした。

JSPファイルを作成する

WEB-INF 以下にデータファイルを置いて、サーブレットやJSPから利用したい。
ということで、WEB-INF 以下のファイルにアクセスしやすい方法を模索中。
J2EE のドキュメントを読んでもよくわからない部分があったので、実験的なJSPファイルを作って試す。

Eclipse 上から JSP ファイルを新規作成して、編集できるのが便利 (一度作成したファイルについて、Eclipse 上では文字コードが変更できないっぽいので、外部のテキストエディタで変更する必要があるかも)。
html とか xhtml とか選択して作成できる。

とりあえず、使えそうな API を実験的に試してみる。
まずは JSP ファイルを作成。

hoge\WebContent に filepath.jsp を作成。


<?xml version="1.0" encoding="windows-31j" ?>
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j" />
<title>Insert title here</title>
</head>
<body>
<%= new java.io.File(".").getAbsolutePath() %><br />
<%= System.getProperty("user.dir") %><br />
<%= application.getRealPath(".") %><br />
<%= application.getRealPath("WEB-INF/web.xml") %><br />
<%= application.getResourcePaths("/WEB-INF/") %><br />
<%= application.getResource("/WEB-INF/") %><br />
<%= request.getParameterMap() %><br />
</body>
</html>

web.xml の編集

WEB-INF/web.xml を編集する。これも Eclipse 上でできる。
しかも、XMLを直接編集せずに、GUIな設定ツールで編集もできる。便利。

で、WEB-INF/web.xml の中身。


<?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>
 
  <servlet>
    <servlet-name>filepath</servlet-name>
    <jsp-file>/filepath.jsp</jsp-file>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>filepath</servlet-name>
    <url-pattern>/fp</url-pattern>
  </servlet-mapping>
 
</web-app>

<jsp-file> っていう要素があるんだ。知らなかった。JSPもサーブレットのように扱える。けっこう昔の本にも載ってた。Tomcat 3 時代から?

Webページとしてアクセス

http://localhost/hoge/fp?a=b

こんな感じのURLにアクセスして、と

表示してみると、おもしろい。


C:\eclipse32\.
C:\eclipse32
C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\hoge\.
C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\hoge\WEB-INF\web.xml
[/WEB-INF/web.xml.org, /WEB-INF/web.xml, /WEB-INF/classes/, /WEB-INF/lib/]
jndi:/localhost/hoge/WEB-INF/
{a=[Ljava.lang.String;@4bfe6b}

Eclipse 上のウェブアプリケーションは .plugins\org.eclipse.wst.server.core 以下に設置される模様。てんぽらり♪てんぽらり♪

WEB-INF 以下へのアクセス

WEB-INF のアクセスは
javax.servlet.ServletContext#getRealPath("WEB-INF")
を使って、パスを取得すれば良さそう。
WEB-INF 以下に置くことが前提のデータファイル読み込むをときは、このAPIを使えば環境に依存しない、と。

Ref.

tags: zlashdot Java Eclipse Java Tomcat

Posted by NI-Lab. (@nilab)