今更サーブレットに再入門してみた【環境構築編】

JavaにおけるWeb開発の基礎であるサーブレットで基本的なWebサーバーを作成してみたので記録を残す

今回は環境構築だけなので、実際のサーバーのプログラミングについては別の記事で行う

なぜ今更サーブレットを触っているかというと、SpringBootの基礎を学ぼうとしたところサーブレットに行き着いたからである

基本的にどの教本やサイトにも書いてあることをやってるだけだが、有用な情報と言えばEclipse等を使わず直接Tomcatをインストールして、資材を配置し、起動するところくらいだろう

なお、環境はM1 Macである

Tomcat

Tomcatのインストール

最新バージョンとして10がリリースされているようなので、それをインストールする(アルファ版として11もあるようだが、今回は無理な挑戦はしないことにした)

以下のURLのCoreの欄のtar.gzをインストール

https://tomcat.apache.org/download-10.cgi

解凍して今回の作業フォルダにぶち込む

 

中を確認すると、servlet-api.jarがあった

サーブレットコンパイルするときはこれをクラスパスに含めないといけないらしい

ディレクトリの中身

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関連が認識されていない

どうやら、tomcatservlet-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

に配置する

<Context path="/test"
docBase="<サーブレットを置いてるプロジェクトの場所>"/>
web.xmlの設定

単にclassファイルをおけば良いというわけではなく、web.xmlに設定が必要らしい

 

まず、<servlet></servlet>でサーブレットを宣言する

そして、<servlet-mapping></servlet-mapping>でURIのパスと紐付ける

<?xml version="1.0" encoding="ISO-8859-1"?>
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
version="2.4">


<!-- サーブレットの名前をつける-->
<servlet-name>testservlet</servlet-name>
<servlet-class>TestServlet</servlet-class>
<!-- サーブレットに対してパスをマッピングする -->
<servlet-mapping>
<servlet-name>testservlet</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>

</web-app>
ファイルの配置

今まで作ってきたファイルを以下のように配置する

 

ちなみに、

apache-tomcat-10.1.18/conf/tomcat-users.xml

を編集し、適切なadminユーザーを設定して、

Manager Appを確認すると、登録されているかどうか見れる

 

tomcatを再起動して

http://localhost:8080/test/helloworld

にアクセスすると、無事Hello,Worldが表示された

 

今回使用したソースファイル

 
import java.io.*;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;


public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();

out.println("Hello,World");

out.close();
}
}

最後の方はかなり投げやりになってしまったが、あくまで備忘録として残しておく

neovimで開発環境を整えた話

neovimでVSCodeみたいな統合開発環境を作りたかったので、以下その記録を残す。

VSCode統合開発環境なのか?エディタだろ!というツッコミがあるかもしれないが、拡張機能を入れればほぼ業務に耐えうる開発環境が得られるので、完成系としてVSCodeを目指す)

そもそもなぜVSCodeではなくnvimを使うのか

なぜなら、背景に可愛いイラストを表示しながらコーディングしたかったからである。

VSCodeは基本的に背景画像を設定したりすることはできない。一応直接設定ファイル(setting.jsonのことではなくアプリケーションそのものの設定ファイル)をいじれば表示できるみたいなことが書いてあるし(ただしmacでの事例は見つからなかった)、拡張機能も公開されている。しかし、拡張機能を利用すると毎回起動時にエラーが発生してしまい、アンインストールした後もずっと出続けてしまう。

と言うことで、VSCodeで背景に可愛いイラストを表示するのは諦めて、背景画像を設定したiTerm2上でnvimを利用することにした。

もちろん、なんかnvimでコーディングするのかっこいいよねと言うのもある。

業務のことを考えると普通にvscodeでいいと思うが、趣味の範囲で好みに合うnvim環境を作っていく。

環境

  • Mac mini (M2プロセッサ/8GB) ←macminiの一番安いやつ

  • MacOS Sonoma バージョン14.1.2

  • iTerm2 Build 3.4.19

完成系は以下

方針

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 .")

機能としてはまだまだなので、随時アップデートしていきたいと思う。