JavaにおけるWeb開発の基礎であるサーブレットで基本的なWebサーバーを作成してみたので記録を残す
今回は環境構築だけなので、実際のサーバーのプログラミングについては別の記事で行う
なぜ今更サーブレットを触っているかというと、SpringBootの基礎を学ぼうとしたところサーブレットに行き着いたからである
基本的にどの教本やサイトにも書いてあることをやってるだけだが、有用な情報と言えばEclipse等を使わず直接Tomcatをインストールして、資材を配置し、起動するところくらいだろう
なお、環境はM1 Macである
Tomcat
Tomcatのインストール
最新バージョンとして10がリリースされているようなので、それをインストールする(アルファ版として11もあるようだが、今回は無理な挑戦はしないことにした)
以下のURLのCoreの欄のtar.gzをインストール
https://tomcat.apache.org/download-10.cgi
解凍して今回の作業フォルダにぶち込む
サーブレットをコンパイルするときはこれをクラスパスに含めないといけないらしい
Tomcatの起動
とりあえずtomcatを起動してみる。
一番上のディレクトリにREADMEがあったのでそれを読むと、まずはRUNNIG.txtがあるからそれを読めということなので指示に従う。
環境変数の設定
CATALINA_HOMEとJAVA_HOMEが必要だそうだ
CATALINA_HOMEはtomcatのインストール先だと思うので、これを記載する
JAVA_HOMEは普通に設定する
UNIX系だと.pidファイルを置くCATALINA_PIDもオプションで指定できるらしいが、特に気にしないのでデフォルトにまかしておく
起動
bin/startup.shを実行する
そしたらあっさりとこんな表示が出て起動したらしい
springと同じように8080ポートかなと思ってlocalhost:8080で起動してるかなと思ってアクセスしてみたらちゃんと起動していた。
なんか感動的
サーブレットの作成
「HttpServlet」クラスを継承したクラスを作ればそれがサーブレットクラスになるそうだ
また、doGet、doPostメソッドを実装することで実際に処理を書けるらしい
https://spring.pleiades.io/specifications/platform/8/apidocs/javax/servlet/http/httpservlet
ドキュメントを見ると、GET,POST,PUT,DELETEが一通り揃ってるっぽい。TRACEメソッドなんてのもあるらしい
とりあえず書いてみた
(最後にソースコードは記載する)
なんかjavaEE関連が認識されていない
どうやら、tomcatのservlet-api.jarにパスを通さないといけなかったっぽい
エクスプローラーの下のJAVA PROJECTSの三点リーダークリックして、Configure Classpathに行き、Referenced Librariesにservlet-api.jarを追加すると、
すると無事治った
※ちなみに、今はjavax.servletではなく、jakarta.servletだった
JAVAEEは今Jakartaプロジェクトになったとかそんな話あったと思うが、ここでは掘り下げない
(上では、VSCodeの保管機能でインポートしてくれなかったので勝手にimport書いただけなので、赤線はjavaxだったからとかではない)
コンパイル
コンテキストの設定
tomcatに今回作っているサーブレットをアプリとして登録しないといけないらしい。
test.xmlというのを作り、以下のように記述して
<tomcatの配置ディレクトリ>/conf/Catalina/localhost
に配置する
web.xmlの設定
単にclassファイルをおけば良いというわけではなく、web.xmlに設定が必要らしい
まず、<servlet></servlet>でサーブレットを宣言する
そして、<servlet-mapping></servlet-mapping>でURIのパスと紐付ける
ファイルの配置
今まで作ってきたファイルを以下のように配置する
ちなみに、
apache-tomcat-10.1.18/conf/tomcat-users.xml
を編集し、適切なadminユーザーを設定して、
Manager Appを確認すると、登録されているかどうか見れる
tomcatを再起動して
http://localhost:8080/test/helloworld
にアクセスすると、無事Hello,Worldが表示された
今回使用したソースファイル
最後の方はかなり投げやりになってしまったが、あくまで備忘録として残しておく