ubuntuにTomcatをインストールして使ってみた。

ubuntu20.04LTSにJavaのアプリケーションサーバーであるTomcatを入れて動かしてみました。学習用に入れただけなのでセキュリティ設定などはしていません。動かすだけであれば、ダウンロードサイトからtarファイルを持ってきて、展開して、任意の場所に置いて終わりです。Tomcatの起動と停止をしています。なお、Javaのインストールは済んでいます。

まず、Apache Tomcat のサイトにアクセスします。

赤枠➀の「Which version?」をクリックします。Tomcatのバージョンにより対応するServletとJSPのバージョンも異なってくるため、どのバージョンのTomcatを使用するかを決めます。Tomcatを動かす際のJavaのバージョンにも気をつけます。

なお、先ほどの赤枠③の記述によるとTomcat10以降では仕様が変わっているようです。赤枠③のgoogleでの翻訳です。

JakartaEEプラットフォームは、JavaEEプラットフォームが進化したものです。Tomcat10以降は、JakartaEEの一部として開発された仕様を実装しています。Tomcat9以前は、JavaEEの一部として開発された仕様を実装しています。

JavaEEをもとに作成されたソースコードを試したいので、Tomcat9にします。

Tomcat9
Version: 9.0.65
Servlet: 4.0対応
JSP: 2.3対応
Java: Java8以降であること

赤枠②の「Tomcat9」をクリックします。ダウンロードの画面が出るので「tar.gz」をクリックしてダウンロードします。

ダウンロードされたファイル名は「apache-tomcat-9.0.65.tar.gz」でした。ダウンロードされたファイルのハッシュ値を確認してみます。

$ sha512sum apache-tomcat-9.0.65.tar.gz

ダウンロードの画面の「sha512」のところをクリックして同じ出力結果となっていれば大丈夫です。

tarファイルを展開します。

$ tar xvf apache-tomcat-9.0.65.tar.gz

「apache-tomcat-9.0.65」というフォルダができました。これを任意の場所に配置します。

apache-tomcat-9.0.65フォルダの下にはbinフォルダがあるので、その中にある「startup.sh」を実行するとTomcatが起動します。

ブラウザで「http://localhost:8080/」にアクセスしてみます。Tomcatの画面が表示されます。

Tomcatの停止は「shutdown.sh」を実行します。

Tomcatの画面の「Manager App」をクリックするとManager画面を表示するのですが、デフォルトのままだとユーザ名とパスワードの設定がないため表示しません。表示させるにはconfフォルダにある「tomcat-users.xml」を修正します。confフォルダはapache-tomcat-9.0.65フォルダの下にあります。


<tomcat-users>
  :
<user username="user" password="pass" roles="manager-gui"/> ←追加(ユーザ名とパスワードを任意に設定)
  :
</tomcat-users>

Manager画面はwarファイルをTomcatにデプロイする際に使用する画面です。

Tomcatの起動と停止のログはlogsフォルダに出力されます。logsフォルダはapache-tomcat-9.0.65フォルダの下にあります。catalina.outファイルを見ると良いでしょう。

ServletをjavacコマンドでコンパイルするときにはCLASSPATHの設定が必要になるので、libフォルダの下にある「servlet-api.jar」にCLASSPATHを通しておきます。


$ export CLASSPATH="/Tomcatを配置したディレクトリ/apache-tomcat-9.0.65/lib/servlet-api.jar"

javacコマンドでコンパイルしたクラスファイルを /apache-tomcat-9.0.65/webapps/コンテキスト名/WEB-INF/classes に配置します。ブラウザからTomcatにアクセスすればServletの動きを確認できます。

C言語とJavaでの配列の使い方の違い

C言語とJavaでは配列の使い方(宣言の仕方)が違います。C言語とJavaのサンプルプログラムを載せておきます。

Javaの配列のサンプル

C言語の配列のサンプル

実行結果です(javaの例ですがCのサンプルコードでも同じ結果になります)。

$ java array
0  0  0  1
1  2  1  2
2  4  2  3
3  6  3  4
4  8  4  5
5 10  5  6
6 12  6  7
7 14  7  8
8 16  8  9
9 18  9 10

留意点は以下でしょうか。

= = 1点目 = =
Javaでは配列の宣言

int[ ]  a;
int  b[ ];

のどちらでも使える。型カッコの [ ] を型に付けても変数につけてもどちらでも良い。

C言語は

int  b[ ];

のみ(変数に付けるのみ)。

ただしこれは配列の宣言であるため、初期化するときか関数の引数として使う場合に限る。関数の引数として使う場合というのは、func関数があってその引数に配列(ポインタ)を持つ場合に使えるということ。

例:
void func( int b[ ] )
{
 ・・
}

= = 2点目 = =
Javaでは

int  a[10];

のようなC言語で言う配列の定義はできない。Javaは配列の宣言とメモリ確保の2段階の操作が必要ということ。

なお、Javaで以下のように1行で書いてしまうことは可能。

int[ ] a = new int[10];

= = 3点目 = =
配列の初期化はjavaでもnew演算子を使用せずにメモリ確保できる。これはC言語と同じ。