October 30, 2005

OSXでJSP/Servletを動かしてみた

なんとなくJavaで遊んでみました。
メインUNIXマシン(MMX200)は遊びづらくなってきたので今回はmac miniです。MMX200だと、コンパイルとか遅くて眠くなるのです。

Javaはさっぱりわからないので少し調べてみたところ、JSP/Servletの開発に必要な環境は主に下記のようなので順を追って試してみることにしました。(Eclipseはなくても動くので今回はパス。)

  1. JDK (コンパイラ、ライブラリ等)

  2. Tomcat (Webアプリケーションサーバ)

  3. Eclipse (GUIベースの開発ツール)



Hello World (JDK)

しかしまずJavaを知らないので、取りあえずお約束のHellow Worldを書いてJDKで動かしてみました。
OSXには最初からJDKが入っているのでインストールの必要はなし。

まずコードを書いて
# vi helloworld.java
class HelloWorld{
static public void main(String args[]){
System.out.println("Hello World!");
}
}


コンパイルして実行、と。 *1
# javac helloworld.java
# java HelloWorld
Hello World!


*1 実行時に# java HelloWorld.classと打ったら「Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class」のようにクラスへのパスが通ってないとさんざん怒られました。拡張子は不要らしい。というかドットはパッケージの階層構造を意味するらしい。このことにしばらく気がつかず困りました・・・。
カレントはデフォルトのクラスパスなので明示的にパス指定する必要はないようです。あえて指定する場合は環境変数CLASSPATHにパス(この場合は「.」)を通せばいいらしい。また、「java -cp . HelloWorld」のようにオプションで指定することもできる、と。


Tomcatのインストール

次にTomcatをインストール。*2

# cd /usr/local/src/
# wget http://www.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.tar.gz
# tar zxvf jakarta-tomcat-5.0.28.tar.gz -C /usr/local/
# cd /usr/local/
# ln -s jakarta-tomcat-5.0.28 tomcat5

これでインストールはおしまい。

Tomcatの起動。*3
# setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/
# /usr/local/tomcat5/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat5
Using CATALINA_HOME: /usr/local/tomcat5
Using CATALINA_TMPDIR: /usr/local/tomcat5/temp
Using JRE_HOME: /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/


プロセス確認
# ps -auxw | grep Java
root 1868 0.1 5.7 283072 30088 p1 S 8:15PM 0:10.03 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java (以下略)
root 1872 0.0 0.0 8772 8 p1 R+ 8:15PM 0:00.00 grep Java


ブラウザでアクセスして確認。不細工なネコが表示されたらOK。
http://127.0.0.1:8080/


終了は
#/usr/local/tomcat5/bin/shutdown.sh



*2 当初、最新版のv5.5.12をインストールしたら
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.

起動しませんでした。Tomcat5.5はJ2SE5以上でないとダメらしい。現段階ではどうでもいいので5.0系を使いました。

*3 環境変数を指定せずに起動したら
# /usr/local/tomcat5/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

怒られました。


Hello World (JSP)

さて次はJSPでWebアプリケーションを作成してみます。
J2EEではWebアプリケーションのディレクトリ構成が決まっているようなので作法に従ってディレクトリを作成。
今回はデフォルトのwebappsの下に作成しました。

# cd /usr/local/tomcat5/webapps
# mkdir MyApp
# mkdir MyApp/WEB-INF
# mkdir MyApp/WEB-INF/classes


次にWebアプリケーションのコンテキスト定義ファイルを作成します。
# vi /usr/local/tomcat5/conf/Catalina/localhost/MyApp.xml
<Context path="/jsp-app" docBase="MyApp" debug="0" reloadable="true" />

URIはここで指定。reloadable="true"にしておけばサーブレット修正時にサーバを再起動する必要がなくなるそうです。

次にWebアプリケーションの設定ファイルであるweb.xmlを作成。適当です。
# cd MyApp/WEB-INF
# vi 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">
</web-app>


表示するjspファイルを作成。
# cd ..
# vi helloworld.jsp
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<%@page import="java.util.Date" %>
<%
Date time = new Date();
String s= "Hello World";
out.println(s);
%>
<address><%= time %></address>
</body>
</html>


Tomcat再起動
# /usr/local/tomcat5/bin/shutdown.sh
# /usr/local/tomcat5/bin/startup.sh


ブラウザで確認。
http://127.0.0.1:8080/jsp-app/helloworld.jsp



Hello World (Servlet)

最後にServletも動かしてみることに。ServletからWebに直接出力というのはちょっと微妙ですが。

まずソースを書く。(ここからもらいました。)
# cd /usr/local/tomcat5/webapps
# vi HelloWorldServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldServlet extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// ContentTypeを設定
response.setContentType("text/html; charset=Shift_JIS");
// 出力用PrintWriterを取得
PrintWriter out = response.getWriter();
// 出力
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}
}


コンパイル。なにやらいろいろパスを通さないといけないようです。
# javac -d WEB-INF/classes -classpath /usr/local/tomcat5/common/lib/servlet-api.jar HelloWorldServlet.java


web.xmlに下記を追加。
# vi WEB-INF/web.xml
<servlet>
<servlet-name>MyHello1</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHello1</servlet-name>
<url-pattern>/helloservlet</url-pattern>
</servlet-mapping>


Tomcat再起動
# /usr/local/tomcat5/bin/shutdown.sh
# /usr/local/tomcat5/bin/startup.sh


ブラウザで確認。
http://127.0.0.1:8080/jsp-app/helloservlet




というわけで駆け足でHello Worldを試してみたのでした。

参考URL
http://www.ayaori.net/software/osx/tomcat5Primer/
http://www.hellohiro.com/


この記事へのトラックバックURL

http://app.blog.livedoor.jp/cpiblog00035/tb.cgi/50166696