Raspberry Pi に Tomcat をインストールする
Tomcat10 のインストール
- Raspberry Pi 4 に Raspberry Pi OS がインストールされている
- SSHによるリモート接続での作業
OSバージョンの確認
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Javaのバージョン確認
ラズパイにすでにインストールされているJavaのバージョンを確認します。
java -version
このコマンドを実行すると、以下のような出力が表示されます。
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Debian-1deb12u1, mixed mode, sharing)
以下にTomcat 10のインストール手順と基本的な設定手順を示します。
1. Tomcat 10のインストール
既に実行したように、以下のコマンドでTomcat 10をインストールします。
sudo apt-get update
sudo apt-get install tomcat10
2. Tomcatの起動と停止
インストール後、Tomcatのサービスを起動し、動作を確認します。
Tomcatの起動:
sudo systemctl start tomcat10
Tomcatの自動起動を有効にする:
sudo systemctl enable tomcat10
Tomcatのステータス確認:
sudo systemctl status tomcat10
active
が確認できれば成功です。
3. ファイアウォールの設定
ufw
を使っている場合は、必要に応じて次の設定を行なって下さい。デフォルトのTomcatポート(8080)を開放します。
sudo ufw allow 8080
4. Tomcatの動作確認
ブラウザを開き、http://<RaspberryPiのIPアドレス>:8080
にアクセスしてTomcatのデフォルトページが表示されるか確認します。
管理コンソールを使用したい場合は、管理ユーザーを設定します。
1. ユーザーの追加
sudo vi /etc/tomcat10/tomcat-users.xml
以下の内容を追加します(例):
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="password" roles="manager-gui,admin-gui"/>
2. Tomcatの再起動
sudo systemctl restart tomcat10
3. 管理コンソールにアクセス
ブラウザでhttp://<RaspberryPiのIPアドレス>:8080/manager/html
にアクセスし、設定したユーザー名とパスワードでログインします。
これで、Tomcat 10のインストールと基本設定が完了しました。Java 17を使用している場合も、問題なく動作するはずです。
Tomcat 10を使用してJSPを実行する
Tomcat 10を使用してJSP(JavaServer Pages)を実行するための基本的な手順を以下に示します。
1. JSPファイルの配置
JSPファイルはTomcatのウェブアプリケーションディレクトリに配置します。Tomcatのデフォルトのウェブアプリケーションディレクトリは/var/lib/tomcat10/webapps/
です。
例: Hello.jspを作成する
webapps
ディレクトリに移動します。
cd /var/lib/tomcat10/webapps
新しいディレクトリを作成します(例: myapp
)。
sudo mkdir myapp
作成したディレクトリ内にJSPファイルを配置します。
cd myapp
sudo vi hello.jsp
hello.jsp
ファイルに以下の内容を追加します。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<h1>Hello, JSP World!</h1>
<p>Date: <%= new java.util.Date() %></p>
</body>
</html>
2. Tomcatの再起動
JSPファイルを追加した後、Tomcatを再起動します。
sudo systemctl restart tomcat10
3. JSPページの確認
ブラウザを開き、以下のURLにアクセスしてJSPページが正しく表示されるか確認します。
http://<RaspberryPiのIPアドレス>:8080/myapp/hello.jsp
これで、Tomcat 10上でJSPを使用するための設定が完了です。上記の手順に従うことで、簡単なJSPページを作成し、ブラウザで表示することができます。
Tomcat9 のインストール
Struts1.3.10をラズパイで動かしたかったのですが、Tomcat10では動かなかったため、Tomcat9をインストールする必要がありました。ただし、Tomcat
9がapt
パッケージで簡単にインストールできないため、手動でTomcat
9をインストールする必要がありました。この記事ではラズパイにTomcat
9を手動インストール手順を記します。
必要なパッケージのインストール
まず、必要なパッケージをインストールします。
sudo apt update
sudo apt install wget unzip -y
Tomcat 9のダウンロード
Tomcatの公式サイトからTomcat 9をダウンロードします。
cd /opt
sudo wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz
Tomcatの解凍
ダウンロードしたTomcatを解凍します。
sudo tar xzf apache-tomcat-9.0.89.tar.gz
sudo mv apache-tomcat-9.0.89 tomcat9
sudo rm apache-tomcat-9.0.89.tar.gz
環境変数の設定
Tomcatのディレクトリを環境変数に追加します。
echo 'export CATALINA_HOME=/opt/tomcat9' | sudo tee -a /etc/profile
source /etc/profile
Tomcatの起動スクリプトを作成
Tomcatをサービスとして管理するために、システム起動スクリプトを作成します。
sudo vi /etc/systemd/system/tomcat9.service
以下の内容を追加します:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64
Environment=CATALINA_PID=/opt/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat9
Environment=CATALINA_BASE=/opt/tomcat9
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat9/bin/startup.sh
ExecStop=/opt/tomcat9/bin/shutdown.sh
User=pi
Group=pi
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Java環境パス設定
JAVA_HOME
環境変数が正しく設定されているか確認します。正しく設定されていない場合、TomcatがJavaを見つけられないため起動に失敗します。
echo $JAVA_HOME
期待される出力はJavaのインストールディレクトリです。もし出力されない場合、正しいディレクトリを設定します。
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64
パーミッションの確認
Tomcatディレクトリおよびファイルのパーミッションが正しく設定されているか確認します。Tomcatユーザーが必要なファイルにアクセスできるようにします。
sudo chown -R pi:pi /opt/tomcat9
sudo chmod -R 755 /opt/tomcat9
サービスのリロードとTomcatの起動
サービスをリロードし、Tomcatを起動します。
sudo systemctl daemon-reload
sudo systemctl start tomcat9
sudo systemctl enable tomcat9
以下のコマンドで動作確認します。
sudo systemctl status tomcat9
● tomcat9.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat9.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-06-19 15:17:56 JST; 4min 9s ago
Main PID: 1712 (java)
Tasks: 31 (limit: 3919)
CPU: 17.409s
CGroup: /system.slice/tomcat9.service
└─1712 /usr/lib/jvm/java-17-openjdk-arm64/bin/java -Djava.util.logging.config.file=/opt/tomcat9/conf/logging.pro>
Tomcatの動作確認
ブラウザを開き、http://<RaspberryPiのIPアドレス>:8080
にアクセスしてTomcatのデフォルトページが表示されるか確認します。
【おまけ】Raspberry Pi 4 で Struts1.x を動かす!
レガシーシステムの保守案件のために、Struts1.xを覚える必要がありました。Struts1.xは、最後のバージョンが1.3.10ですでにサポートが終了されてます。情報も少なく、ChatGPTが頼りになります。 今回は Raspberry Pi 4 で Struts1.3.10 を動かすことに成功しましたので、その手順を記します。なお、 Struts1.3.10 を動かすために Tomcat9 が必要になります。Tomcat9 は設定済みのものとして解説していきます。
Struts 1とは
Struts 1は、JavaによるWebアプリケーションのフレームワークであり、Apache Software Foundationが開発したものです。2000年代初頭に非常に人気がありましたが、現在ではStruts 2に移行され、サポートも終了しています。それでも、歴史的な観点や既存のプロジェクトでStruts 1に触れることはあるかもしれません。
以下に、Struts 1の基本的な概念とアーキテクチャについて説明します。
Struts 1の基本概念
Model-View-Controller (MVC) アーキテクチャ
- Model: ビジネスロジックやデータアクセスの層。通常、JavaBeansやEJBが使われます。
- View: プレゼンテーション層。JSPが一般的に使用されます。
- Controller:
リクエストを処理し、適切なビューに転送する層。Struts
1では、
ActionServlet
がこれを担当します。
ActionServlet
リクエストを受け取り、対応するAction
クラスに処理を委譲します。
struts-config.xml
という設定ファイルで、リクエストパスとAction
クラスの対応を定義します。
Actionクラス
- 各リクエストに対するビジネスロジックを実装するクラス。
Action
クラスはexecute
メソッドを持ち、このメソッドがリクエスト処理のエントリーポイントとなります。
Form Beans
- ユーザ入力データをカプセル化するJavaBeanクラス。
- HTMLフォームのデータをJavaオブジェクトとして扱うために使用されます。
ActionForward
- リクエスト処理後の遷移先を定義します。
Action
クラスのexecute
メソッドの戻り値として使用され、次のビュー(JSPなど)にリクエストを転送します。
必要なディレクトリの作成
以下のコマンドを実行して、必要なディレクトリを作成します。
sudo mkdir -p /opt/tomcat9/webapps/strutsapp/WEB-INF/lib
JARファイルのダウンロード
作成したディレクトリへ移動して、MavenリポジトリからStruts 1.3.10のコアライブラリをダウンロードします。
cd /opt/tomcat9/webapps/strutsapp/WEB-INF/lib
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-core/1.3.10/struts-core-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-taglib/1.3.10/struts-taglib-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-tiles/1.3.10/struts-tiles-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-extras/1.3.10/struts-extras-1.3.10.jar
さらに以下のコマンドを実行して、これらの依存ライブラリもダウンロードします。
sudo wget https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
sudo wget https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
sudo wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
sudo wget https://repo1.maven.org/maven2/commons-digester/commons-digester/2.1/commons-digester-2.1.jar
sudo wget https://repo1.maven.org/maven2/commons-chain/commons-chain/1.2/commons-chain-1.2.jar
sudo wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
Webアプリケーションのデプロイメント記述子
web.xml
を作成します。
sudo vi /opt/tomcat9/webapps/strutsapp/WEB-INF/web.xml
以下の内容を追加します。
<!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>
<display-name>Struts Application</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Strust設定ファイルの作成
次に struts-config.xml
を作成します。
sudo vi /opt/tomcat9/webapps/strutsapp/WEB-INF/struts-config.xml
以下の内容を追加します。
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="helloForm" type="org.apache.struts.action.ActionForm"/>
</form-beans>
<action-mappings>
<!-- ForwardActionのparameter属性を追加 -->
<action path="/hello" type="org.apache.struts.actions.ForwardAction" parameter="/hello.jsp"/>
</action-mappings>
</struts-config>
JSPファイルの作成
JSPファイルを作成します。
sudo vi /opt/tomcat9/webapps/strutsapp/hello.jsp
以下の内容を追加します。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Hello Struts</title>
</head>
<body>
<h1>Hello, Struts!</h1>
</body>
</html>
ここまでで、 /opt/tomcat9/webapps/strutsapp
以下の構造は次の通りです。
/opt/tomcat9/webapps/strutsapp/
|-- hello.jsp
`-- WEB-INF
|-- lib
| |-- commons-beanutils-1.9.4.jar
| |-- commons-chain-1.2.jar
| |-- commons-collections-3.2.2.jar
| |-- commons-digester-2.1.jar
| |-- commons-logging-1.2.jar
| |-- struts-core-1.3.10.jar
| |-- struts-extras-1.3.10.jar
| |-- struts-taglib-1.3.10.jar
| `-- struts-tiles-1.3.10.jar
|-- struts-config.xml
`-- web.xml
これらのファイル群は、tomcat9が実行されるユーザー権限に変えておきます。
sudo chown -R pi:pi /opt/tomcat9/webapps/strutsapp
sudo chmod -R 755 /opt/tomcat9/webapps/strutsapp
ディレクトリ構造とファイルの解説
ファイル/ディレクトリ | 説明 |
---|---|
/opt/tomcat9/webapps/strutsapp/ | アプリケーションのルートディレクトリ。Tomcatのwebappsディレクトリにデプロイされています。 |
hello.jsp | クライアントに表示されるJSPページ。このページは/hello リクエストに対するレスポンスとして表示されます。 |
WEB-INF/ | Webアプリケーションの設定ファイルやライブラリを格納するディレクトリ。直接ブラウザからアクセスできません。 |
lib/ | アプリケーションで使用するライブラリ(JARファイル)を格納するディレクトリ。 |
commons-beanutils-1.9.4.jar | Apache Commons BeanUtilsライブラリ。JavaBeansの操作を簡素化するためのツールを提供します。 |
commons-chain-1.2.jar | Apache Commons Chainライブラリ。チェインパターンを実装するためのツールを提供します。 |
commons-collections-3.2.2.jar | Apache Commons Collectionsライブラリ。コレクションフレームワークの拡張機能を提供します。 |
commons-digester-2.1.jar | Apache Commons Digesterライブラリ。XMLの解析とマッピングをサポートします。 |
commons-logging-1.2.jar | Apache Commons Loggingライブラリ。ログ記録のための統一インターフェースを提供します。 |
struts-core-1.3.10.jar | Struts 1フレームワークのコアライブラリ。MVCアーキテクチャをサポートします。 |
struts-extras-1.3.10.jar | Struts 1の追加機能ライブラリ。拡張機能や追加のアクションを提供します。 |
struts-taglib-1.3.10.jar | Struts 1のタグライブラリ。JSPで使用するカスタムタグを提供します。 |
struts-tiles-1.3.10.jar | Struts 1のTilesフレームワーク。テンプレートベースのページレイアウトをサポートします。 |
struts-config.xml | Struts 1の設定ファイル。アクションマッピング、フォームBean、その他の設定を定義します。 |
web.xml | Webアプリケーションのデプロイメント記述子。サーブレット、フィルタ、リスナーの設定を定義します。 |
Tomcatの再起動
設定を反映させるためにTomcatを再起動します。
sudo systemctl restart tomcat9
Strutsアプリケーションの確認
ブラウザを開き、
http://raspberry.local:8080/strutsapp/hello.do
URLにアクセスしてStrutsアプリケーションが正しく動作するか確認します。
3日かけて、ようやく Struts 1.3.10 を動作させることができました!なかなか苦労しました(笑)