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

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();
}
}

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