TomcatにWebアプリケーションを配備する
プログラムの準備
まずは、サーブレットでHelloWorldプログラムを作成します。
HelloWorldサーブレットクラス
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } }
サーブレットのjavaソースファイルは通常行うように
javac HelloWorld.java
としてもコンパイルできません。サーブレットのコンパイルを行うにはサーブレットAPIをクラスパスに追加する必要があります。環境変数CATALINA_HOMEにTomcatのインストールディレクトリが設定されていれば以下のコマンドでクラスパスを追加できます。
Windowsの場合
SET CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\servlet-api.jar
Linuxの場合
export CLASSPATH=$CLASSPATH;$CATALINA_HOME/common/lib/servlet-api.jar
Webアプリケーションディレクトリの作成
次に、Webアプリケーション標準のディレクトリ構成を作成します。
まず、Webアプリケーションのhelloworldディレクトリを、$CATALINA_HOME/webappsディレクトリに作成します。
helloworldディレクトリにWEB-INFディレクトリを作成してください。作成したWEB-INFディレクトリにclassesとlibディレクトリを作成します。作成したclassesディレクトリにコンパイル済のHelloWorld.classをコピーしてください。
配備記述子(web.xml)の作成
WEB-INFディレクトリにweb.xmlファイルを作成し、サーブレットマッピングを記述します。サーブレットマッピングにより、特定のURLとサーブレットクラスが結び付けられます。サーブレットマッピングはweb.xmlの
Hello Worldアプリケーションのweb.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <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> hello </servlet-name> <servlet-class> HelloWorld </servlet-class> </servlet> <servlet-mapping> <servlet-name> hello </servlet-name> <url-pattern> /hello/ </url-pattern> </servlet-mapping> </web-app>
以上でWebアプリケーションの標準構成ができあがりました。
サーブレットマッピングなしでサーブレットクラスを利用するには
invokerサーブレットを用いるとサーブレットマッピングがなされなくても、「http://ホスト名/Webアプリケーション名/servlet/サーブレット名」ようなURLでサーブレットをロードできます。
Tomcat 5.5のデフォルト状態では、このInvokerサーブレットが無効になっています。これを有効にするには、「$CATALINA_HOME/conf /web.xml」の99行目からのコメントアウトと349行目からのコメントアウトをはずす必要があります。ただし、Invokerサーブレットにはセキュリティホールが報告されています。テスト環境以外でInvokerを有効にしないよう注意してください。
http://www.jajakarta.org/tomcat/faq/misc.html#evil
WebアプリケーションをWarにまとめる
WebアプリケーションはWarという1つのファイルにまとめることができます。WarファイルをWebアプリケーションのルートに配置するだけでWebアプリケーションの追加が行えるため、配布が容易になります。
Warファイルを作成するにはコマンドラインから、Webアプリケーションのディレクトリに移動し、「jar cvf helloworld.war.⁄*」を実行します。処理が完了すると同じディレクトリにhelloworld.warというファイルが作成されています。