WebApp/Tomcat †実行環境の整備 †tomcatを実行するユーザーを作成 †# useradd tomcat jdkをインストールする †OracleのページからRPMパッケージをダウンロードし、そのまま実行する # ./jdk-6u29-linux-i586-rpm.bin tomcatをインストール †apache-tomcat-x.x.x.tar.gz を解凍して作成されたディレクトリが、そのままtomcatのHOMEディレクトリとなる # mv apache-tomcat-x.x.x ~tomcat # cd ~tomcat # pwd /home/tomcat # chown -R apache-tomcat-x.x.x # ln -s apache-tomcat-x.x.x tomcat # ls -l drwxr-xr-x. 9 tomcat tomcat 4096 3月 12 15:23 2012 apache-tomcat-6.0.35 lrwxrwxrwx. 1 root root 20 3月 1 17:05 2012 tomcat -> apache-tomcat-6.0.35 tomcatユーザーの.bash_profileに環境変数を追加 †JDKや、tomcatのパスはインストール環境に合わせて変更すること export JRE_HOME=/usr/java/jdk1.6.0_29 export CATALINA_HOME=/home/tomcat/tomcat export CLASSPATH=.:$JRE_HOME/jre/lib:$JRE_HOME/lib:$JRE_HOME/lib/tools.jar:$CATALINA_HOME/lib/servlet-api.jar tomcatの実行または停止 †$CATALINA_HOME/bin/startup.sh $CATALINA_HOME/bin/shutdown.sh スタートアップスクリプトに登録する †/etc/rc.d/init.d/ に tomcat ファイルを作成、以下の内容を保存すること #!/bin/bash # # Startup script for the tomcat # chkconfig: 345 80 15 # description: Tomcat is a Servlet+JSP Engine. # Source function library. . /etc/rc.d/init.d/functions source /etc/profile TOMCAT_USER=tomcat source ~tomcat/.bash_profile start(){ if [ -z $(/sbin/pidof java) ]; then echo "Starting tomcat" su - $TOMCAT_USER -c "$CATALINA_HOME/bin/startup.sh" touch /tmp/tomcat else echo "tomcat allready running" fi } stop(){ if [ ! -z $(/sbin/pidof java) ]; then echo "Shutting down tomcat" su - $TOMCAT_USER -c "$CATALINA_HOME/bin/shutdown.sh" until [ -z $(/sbin/pidof java) ]; do :; done \rm -f /tmp/tomcat else echo "tomcat not running" fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) su -s /bin/bash - $TOMCAT_USER -c "$CATALINA_HOME/bin/catalina.sh version" ;; *) echo "Usage: $0 {start|stop|restart|status}" esac exit 0 サービス登録を行う # chkconfig --add tomcat Windowsでコンパイル環境を整えるには以下の環境変数を定義する †
構成ディレクトリ($CATALINA_HOME) †bin †Tomcatの起動や停止に使うスクリプトを格納 common †Webアプリケーションからアクセス可能なクラスを格納 conf †各種設定ファイル(サーバ設定ファイル、ユーザリストなど)が入ってる logs †サーバに対して出されたリクエストのログ、標準出力、標準エラーメッセージのログ、Tomcat同梱のサンプルアプリケーションのログファイルもここに格納 server †Catalina(サーブレットAPIの実装エンジン)だけが使用できるクラスがサブディレクトリのclassesとlibに入ってる shared †Webアプリケーションからアクセスできるクラスが入る。commonと違いCatalinaはアクセス不可 temp †一時的なファイルの保存先 webapps †Webアプリケーションを配置するディレクトリ work †一時ファイル、プリコンパイルされたJSPページ、その他の中間ファイルが入る 設定ファイル †server.xml †Tomcatのメインの設定ファイル。Tomcatの使用ポートやWebアプリケーションのための宣言などもここに記述 server-minimal.xml †独自のserver.xmlを作成するためのテンプレート tomcat-users.xml †ユーザとパスワード、およびその権限情報を記述 web.xml †デフォルトの配備記述子(deployment descriptor)ファイル Webアプリケーションの標準構成 †Webアプリケーションのルートディレクトリ($CATALINA_HOME/webapps/ROOT/) /WEB-INF †パブリックにアクセスできないファイルが置かれる(web.xmlなど) /WEB-INF/classes †Webアプリケーションのクラスファイルがすべて個々に置かれる WEB-INF/lib †クラスファイルをJAR形式でアーカイブしたファイルを置くことが可能 Webアプリケーション(サーブレット)の作成 †HelloWorld.java †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(); } } Classファイルの配置 †$ javac HelloWorld.java $ mkdir -p $CATALINA_HOME/webapps/helloworld/WEB-INF/lib $CATALINA_HOME/webapps/helloworld/WEB-INF/classes $ mv -i HelloWorld.class $CATALINA_HOME/webapps/helloworld/WEB-INF/classes Hello Worldアプリケーションのweb.xml †WEB-INFディレクトリにweb.xmlファイルを作成し、サーブレットマッピングを記述する <?xml version="1.0" encoding="utf-8"?> <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>
ブラウザからアクセス †http://localhost:8080/helloworld/hello $CATALINA_HOME/webapps/helloworld/ が http://localhost:8080/helloworld/ に紐付き 管理画面へのアクセス †tomcatのトップページから、管理画面(http://<IPアドレス>:8080/)へアクセスしサーバーのステータスや、アプリケーション配置などが可能 管理ユーザーの作成 †$CATALINA_HOME/conf/tomcat-users.xml に 以下の2行を追加する <role rolename="manager"/> <user username="admin" password="admin" roles="manager"/> tomcatのVersionが7以上の場合はロール名が変更されているので以下のようにする <role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-gui"/> アクセスした際のUIDとPASSに、adminを入力すればログインできる Apacheと連携させる †Apache 2.2系にはAJPプロトコル通信を可能にするmod_proxy_ajpモジュールがあり、 AJP用の設定ファイル作成 †/etc/httpd/conf/extra ディレクトリ以下に httpd-helloworld.conf を作成する <Location /helloworld/> ProxyPass ajp://localhost:8009/helloworld/ </Location> 8009は、Tomcat側の連携コネクタのポート番号 httpd.conf修正 †以下の3行を追加する(記述されている可能性あり) LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so Include conf/extra/*.conf server.xml修正 †以下の行が記述されていること(デフォルトで記述されている) <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> Tomcatの直接アクセス(8080ポート)を禁止する †$CATALINA_HOME/conf/server.xml 以下の行をコメントアウトする <!-- <Connector port="8080" redirectPort="8443" minSpareThreads="25" connectionTimeout="20000" maxThreads="150" maxSpareThreads="75"> </Connector> --> 連携確認 †tomcat 及び apacheを再起動 アクセスログ †コンテキストに設置されたJSP、サーブレット、HTML、GIFファイルなどのアクセス状況を表すログ(Tomcat動作ログではない)
JSP(JavaServer Pages) †HTMLの中にタグを埋め込みJavaを実行することで動的なページをクライアントに渡すことが出来る <%@ %> ディレクティブ †ページを処理する方法についてさまざまな指定を行うために使用 <%@ page import="java.util.*" %> ←import "java.util.*"; と同じ <%@ page contentType="text/html; charset=euc-jp" %> ←文字コードを変更(デフォルトは) <% %> スクリプトレット †実際の処理の内容を指定のスクリプト言語(デフォルトでJava言語)で記述する テストを10回出力する <% for(int i = 0; i < 10; i++) { %> テスト<br> <% } %> <%= %> 式 †出力文を生成するのに使用 <%= テスト %> は <% out.println(テスト); %> と同じ <%! %> 宣言 †JSPページに固有の変数とメソッドを定義するのに使用 <% String blueText = getColoredHTML("青いテキスト", "blue"); %> <%! /** * フォントカラーの指定を行ったHTML文を作成する * @param str 色を付けて表示する文字列 * @param color 色を指定する文字列 * @return フォントカラーの指定を行ったHTML文 */ public String getColoredHTML(String str, String color) { return "<font color=\"" + color + "\">" + str + "</font>"; } %> <html><body> <%= redText %><br> </body></html> サーバー変数 †
JSPサンプル †名前と、誕生日をフォームから入力し、action.jspで、入力された値を表示する †index.jsp <%@ page contentType="text/html; charset=utf-8" %> <% // 現在の時刻を取得 java.util.Date nowTime = new java.util.Date(); %> <html> <head><title>入力ページ</title></head> <body> <p>-- 入力ページ --</p> <p><form action="action.jsp" method="POST"> お名前: <input type="text" name="name" size=32><br> 生年月日: <input type="text" name="birthday" size=20><br><br> <input type="submit" value="OK"> </form></p> </body> </html> action.jsp <%@ page contentType="text/html; charset=utf-8" %> <% // パラメータを取得 String name = request.getParameter("name"); String birthday = request.getParameter("birthday"); // 文字コードの変換を行う name = new String(name.getBytes("8859_1"), "EUC_JP"); birthday = new String(birthday.getBytes("8859_1"), "EUC_JP"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>ユーザーからの入力を出力する</title></head> <body> <p>-- ユーザーからの入力を出力する --</p> <p><ul> <li>お名前 : <%= name %> <li>生年月日: <%= birthday %> </ul></p> </body> </html> |