今更サーブレットに再入門してみた【環境構築編】
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が表示された

今回使用したソースファイル
最後の方はかなり投げやりになってしまったが、あくまで備忘録として残しておく
neovimで開発環境を整えた話
neovimでVSCodeみたいな統合開発環境を作りたかったので、以下その記録を残す。
(VSCodeは統合開発環境なのか?エディタだろ!というツッコミがあるかもしれないが、拡張機能を入れればほぼ業務に耐えうる開発環境が得られるので、完成系としてVSCodeを目指す)
そもそもなぜVSCodeではなくnvimを使うのか
なぜなら、背景に可愛いイラストを表示しながらコーディングしたかったからである。
VSCodeは基本的に背景画像を設定したりすることはできない。一応直接設定ファイル(setting.jsonのことではなくアプリケーションそのものの設定ファイル)をいじれば表示できるみたいなことが書いてあるし(ただしmacでの事例は見つからなかった)、拡張機能も公開されている。しかし、拡張機能を利用すると毎回起動時にエラーが発生してしまい、アンインストールした後もずっと出続けてしまう。
と言うことで、VSCodeで背景に可愛いイラストを表示するのは諦めて、背景画像を設定したiTerm2上でnvimを利用することにした。
もちろん、なんかnvimでコーディングするのかっこいいよねと言うのもある。
業務のことを考えると普通にvscodeでいいと思うが、趣味の範囲で好みに合うnvim環境を作っていく。
環境
完成系は以下
方針
LazyVimを使用する。
なぜなら、YouTubeで超イケてるコーディング動画をあげているエンジニアのdevaslifeさんが最新のブログ記事でそう書いていたからである。
一旦これを用いてセットアップを行い、その後さらにカスタマイズしていって最強の開発環境を手に入れようと思う
手順
Initialization
とりあえず公式ドキュメントのに書いてあるとおりInitializationをやる
以下は基本的に上記の資料をもとに書いているので参照しながら見てください
フォルダの整理
# required
mv ~/.config/nvim{,.bak}
# optional but recommended
mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}
mv ~/.cache/nvim{,.bak}
no recommendとあるが、 過去にちょっとでもnvimいじったのであれば、configファイルだけでなくshareのlua設定あたりも全部消しておく。
プロジェクトをclone
git clone https://github.com/LazyVim/starter ~/.config/nvim rm -rf ~/.config/nvim/.git
これで終わり あとはnvimを開くと以下の画面になる
nvim

背景を透過させるためにMake TokyoNight Transparentを入れる
上記の通り、cloneしてきただけでそれっぽくなった ただ、これではバックグラウンドにイラストが表示されないではないか!!!
公式ドキュメントを読み進めると、どうやら「Make TokyoNight Transparent」と言うプラグインがある模様 指示通りに導入する
プラグインファイル作成
どうやら、lazy.vimでは~/.config/nvim/lua/plugins配下に置いたプラグイン設定を書いた.luaファイルは自動で全部読み込まれるらしい。
とりあえず、ドキュメントに書いてあるとおりにファイルを作ってみる
# ファイル作成 nvim ~/.config/nvim/lua/plugins/transparent.lua
nvimが開くので、iキーを押し(流石にこれは普通のvimと一緒)ドキュメントに書かれた設定を記載する。
return {
{
"folke/tokyonight.nvim",
opts = {
transparent = true,
styles = {
sidebars = "transparent",
floats = "transparent",
},
},
},
}
return{}を忘れないこと
無事透過になった!

Neo-Treeを導入する
VSCodeや他の統合開発環境にみたいに、左端に開いているワークスペースのファイル・フォルダ一覧みたいなのを表示したい。 公式マニュアルにNeo-Treeの記載があったので、その通りに導入していく。
# ファイル作成 nvim ~/.config/nvim/lua/plugins/file-explorer.lua
「Full Spec」に書かれている設定を転載する。※return {}で囲うのを忘れないこと!
するとこうなる。
多分いい感じにできた!
補足: あと、デフォルトで開くようにしたい。
nvim ~/.config/nvim/init.luaに以下を追記
-- 起動時にカレントディレクトリで:Neotreeを起動するようにする
vim.cmd("autocmd VimEnter * :Neotree .")
機能としてはまだまだなので、随時アップデートしていきたいと思う。