JBoss AS 7 でとりあえずWebアプリを動かしてみたいときには、直接 deploymentsにディレクトリを作成して作業します。そうすれば、自分用の手軽なWebアプリを開発することも可能です。サンプルプログラムを動かして見るとか、そういったときに便利ですね。
JBossを起動しなくても、JSPの修正内容が反映されるように、$HOME/applications/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml を修正します。開発では便利ですが、運用環境ではセキュリティ上の問題となる場合があるのでデフォルトではdevelopmentはfalseになっています。(JBoss AS 7.1.1 Final では、うまく動きませんが、最新版のNightly build だと動きました。)
<subsystem xmlns="urn:jboss:domain:web:1.0" default-virtual-server="default-host"> <configuration> <jsp-configuration development="true"/> </configuration> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
JSP
まずは、JSPファイルで動作確認をしてみます。デプロイするWebアプリ用ディレクトリを用意します。簡単な動作確認なら直接ディレクトリを作成して、そこへファイルを置いて確認することができます。必要に応じて、WEB-INFやMETA-INFといったディレクトリなども用意していくことになります。
$ mkdir $HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war
次のような hello.jsp を $HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war に用意します。
<html> <head><title>hello</title></head> <body>message =<%= "hello" + " " + "world" %></body> </html>
デプロイをするには、$HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war.dodeploy を作成します。これをJBossが検知して、デプロイすると、sample.war.deployed が作成されます。sample.war.deployedを削除すると、アンデプロイされます。
$ touch $HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war.dodeploy
デプロイされたら、http://localhost:8080/sample/hello.jsp へアクセスします。「message = hello world」と表示されていることを確認します。
JSP+Javaクラス
Javaクラスを使うJSPページによる動作確認もしてみましょう。$HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war に、WEB-INF/src/sample/Hello.java を作成して、このクラスのメソッドを使った例を作成してみます。
$ cd $HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war/ $ mkdir -p WEB-INF/src/sample/
WEB-INF/src/sample/Hello.java の内容は次のとおりで、messageフィールドの固定値を返却するgetMessage()メソッドだけを持っています。
package sample; public class Hello { private String message = "Hello Java"; public String getMessage() { return message; } }
JBossを起動するJavaと同じバージョンのjavacでコンパイルしましょう。実は、別のバージョンのjavacでコンパイルしていて動かなくてはまりました。クラスファイルは、sample.war/WEB-INF/classes に生成されます。
$ mkdir -p WEB-INF/classes/ $ cd WEB-INF/src $ $HOME/applications/jdk1.6.0_31/bin/javac \ -d ../classes sample/Hello.java
クラスファイルが用意できたら、それを使うJSPファイルを用意します。
$HOME/applications/jboss-as-7.1.1.Final/standalone/deployments/sample.war に、次のように HelloJava.jsp を作成します。
<%@ page import="sample.Hello" %> <% request.setAttribute("hello", new Hello()); %> <html> <head><title>HelloJava</title></head> <body>message = ${hello.message} ... JSP version</body> </html>
クラスファイルが参照できるようにするために、JBossを再起動します。もしくは、sample.war.dodeployファイルを作成してデプロイをしても良いです。起動したら、http://localhost:8080/sample/HelloJava.jsp へアクセスします。動作していれば、「message = Hello Java … JSP version」と表示されます。こんな感じで、ちょっとしたプログラムならすぐに動作させることができます。DBアクセスとかを考えると、もう少しいろいろと設定が必要になりますね。