仕事上で、java環境の再構築を行うことになったので、備忘のために構築方法を残そうと思います。
Java(JDK)のインストール
昔はoracle JDK一択だったのですが、最近のoracle JDKはLTSサポート期間終了後は商用利用が有償となる(*1)等、ライセンス関係がややこしいことになっているので、oracle以外を使ってみます。
今回は、将来的にクラウドで利用することも想定して、Amazon Corettoを採用したいと思います。
windowsでのインストールは、上記リンクをたどってmsiファイルを取得します。
ダウンロードしたmsiを起動すると、すべてデフォルトの選択肢のまま進めるとインストールが完了します。

VSCodeのインストール
続いて、VSCode(Visual Studio Code)をインストールします。
こちらも、すべてデフォルト選択肢でインストールします。

VSCode拡張機能のインストール
今回はJava+Tomcat環境を構築したいため、以下のエクステンションをインストールします。
- Japanese Language Pack
インストール後、「Ctrl+Alt+P」でコマンドパレットを開き、「Configure Display Language」コマンドで日本語を選択します - Community Server Connectors
- Extension Pack for Java
注意点
Community Server Connectorsをインストールしても、以下のように「現在のワークスペースが信頼されていないため、この拡張機能は無効になっています。」と表示されている場合、機能が利用できません。以下の対応を実施して、有効化してください
- 「ファイル - ユーザー設定 - 設定」を開く
- 「workspace」で検索して、「Security › Workspace › Trust: Enabled」のチェックボタンをOFFにする
Apache Tomcatのインストール
以下のリンクから、Apache Tomcatをインストールします。
今回は「コア-64-bit Windows zip」をダウンロード後、解凍して適当なフォルダ(インストールフォルダ)に配置します。「bin/startup.bat」を起動することでTomcatサーバーを起動し、「bin/shutdown.bat」を起動することでTomcatサーバーを停止します。
※表示されるコマンドプロンプト画面は手動では消さないでください

※もし、起動したコンソールで文字化けが発生している場合、Windowsのコマンドプロンプトの文字コードを以下の手順でUTF-8に変更します。
- 「設定 – 時刻と言語 – 言語と地域 – 管理用の言語の設定」を選択
- 「システムロケールの変更」ボタンを押下
- 以下のチェックボックスをONにする(OS再起動が必要です)
動作確認
ここまでの環境構築がうまくいっているか、以下のサンプルのウェブアプリを使って確認します。
Tomcatを直接実行
上記のsample.warファイルを、Apache Tomcatの「webapps」フォルダ直下に配置して、Tomcatを起動します。サーバーが起動したら、以下のURLでアクセス可能となります
VSCodeにTomcatを連携
同じことを、VSCode上からも実行してみます。
-
VSCodeを起動して、「Servers – Community Server Connector(Started)」を右クリック、「Create New Server…」を選択します。

-
コマンドパレットに選択肢が表示されるので、「No,use Server on disk」を選択します。

-
ファイル選択画面が表示されるので、Tomcatのルートフォルダを選択して、「select desired server location」ボタンを押下します。

-
表示された画面で、わかりやすいサーバーの愛称を設定して、「Finish」ボタンを押下します。

VSCodeからTomcatを実行
上記で連携したTomcatサーバーを起動します。
- VSCodeで「Servers – Community Server Connector(Started)」タブを開きます
- 上記で作成したサーバーが表示されるので、右クリックして「Start Server」を選択します。

- その後「http://localhost:8080/sample」にアクセスします。※HTTPSではなく、HTTPです。
※ 以下のエラーが発生する場合、HTTPSでアクセスしてしまっています。必ずHTTPのURL「http://localhost:8080/sample」にアクセスしてください
org.apache.coyote.http11.Http11Processor.service HTTP リクエストヘッダーを解析中のエラー
注: 以降のHTTPリクエスト構文解析エラーの発生はDEBUGレベルでログに出力されます。
java.lang.IllegalArgumentException: HTTP メソッド名 [0x160x030x010x070x120x010x000x070x0e0x030x03’0x8d-<0xc9 ] に無効な文字が含まれています。HTTP メソッド名は決められたトークンでなければなりません
VSCodeからTomcatを実行(デバッグ実行)
デバッグ実行したい場合はソースファイル(*.java)が必要となるため、新しいプロジェクトを作ります。
- 「sample.war」を複製し、ファイル名を「sample.zip」とします。
- 「sample.zip」を解凍して、フォルダ名を「src_helloworld」とします。
- VSCodeで「webapps」フォルダを開きます
- ファイル「src_helloworld/classes/mypackage/Hello.java」を作成して、以下の内容をコピペします
package mypackage;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public final class Hello extends HttpServlet {
public Hello() {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("hello world!");
}
}
ここまでで、以下のような状態になります。

上記では、Hello.classがダウンロードしたJDKのバージョンが合わない可能性があるので、以下の手順で再コンパイルする必要があります。
- カレントフォルダを「src_helloworld」として、コンソールを開きます
- 以下のコマンドを実行して、classファイルを再作成します
cd ./src_helloworld javac -classpath ../../lib/servlet-api.jar -d ./WEB-INF/classes ./WEB-INF/classes/mypackage/Hello.java
上記で、資材の作成が完了したので、デバッグ実行していきます。
-
VSCodeの「src_helloworld/WEB-INF」を右クリックして「Debug on Server」をクリックして、サーバーをデバッグモードで起動します

-
作成したTomcatサーバーを選択します。

-
「No」を選択します。

-
「Please input a project name to be used by the java debugger.(‘Enter’を押して確認するか’Escape’を押して取り消します)」と表示されるので、「Enter」キーを押下します
-
「src_helloworld/classes/mypackage/Hello.java」を開き、行番号をクリックしてデバッグポイントを配置します

-
「http://localhost:8080/src_helloworld」にアクセスして、「servlet」リンクをクリックします。

-
VSCodeを開き、処理がデバッグポイントで止まります。デバッグポイントでは、ウォッチ式などで変数内容などの確認が可能です。

-
再開するため、「F5」キーを押下します
-
ブラウザ上に戻ると、「hello world!」とだけ記載されたページが表示されます。
-
終了するには、「Server」タブから、動作中のTomcatを右クリックして「Stop Server」を押下します。

-
次回以降は、「Server」タブのTomcatを右クリックしてデバッグ実行ができるようになります。



