【Java】環境構築:VScode+Tomcat

Tomcat起動画面

仕事上で、java環境の再構築を行うことになったので、備忘のために構築方法を残そうと思います。

Java(JDK)のインストール

昔はoracle JDK一択だったのですが、最近のoracle JDKはLTSサポート期間終了後は商用利用が有償となる(*1)等、ライセンス関係がややこしいことになっているので、oracle以外を使ってみます。

今回は、将来的にクラウドで利用することも想定して、Amazon Corettoを採用したいと思います。

windowsでのインストールは、上記リンクをたどってmsiファイルを取得します。

ダウンロードしたmsiを起動すると、すべてデフォルトの選択肢のまま進めるとインストールが完了します。

Amazon Corettoインストール完了画面

VSCodeのインストール

続いて、VSCode(Visual Studio Code)をインストールします。

こちらも、すべてデフォルト選択肢でインストールします。

VSCodeのインストール完了画面

VSCode拡張機能のインストール

今回はJava+Tomcat環境を構築したいため、以下のエクステンションをインストールします。

  1. Japanese Language Pack
    インストール後、「Ctrl+Alt+P」でコマンドパレットを開き、「Configure Display Language」コマンドで日本語を選択します
  2. Community Server Connectors
  3. Extension Pack for Java

注意点
Community Server Connectorsをインストールしても、以下のように「現在のワークスペースが信頼されていないため、この拡張機能は無効になっています。」と表示されている場合、機能が利用できません。以下の対応を実施して、有効化してください
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サーバーを停止します。
※表示されるコマンドプロンプト画面は手動では消さないでください

Tomcat起動画面

※もし、起動したコンソールで文字化けが発生している場合、Windowsのコマンドプロンプトの文字コードを以下の手順でUTF-8に変更します。

  • 「設定 – 時刻と言語 – 言語と地域 – 管理用の言語の設定」を選択
  • 「システムロケールの変更」ボタンを押下
  • 以下のチェックボックスをONにする(OS再起動が必要です)
    文字化けするとき

動作確認

ここまでの環境構築がうまくいっているか、以下のサンプルのウェブアプリを使って確認します。

Tomcatを直接実行

上記のsample.warファイルを、Apache Tomcatの「webapps」フォルダ直下に配置して、Tomcatを起動します。サーバーが起動したら、以下のURLでアクセス可能となります

VSCodeにTomcatを連携

同じことを、VSCode上からも実行してみます。

  1. VSCodeを起動して、「Servers – Community Server Connector(Started)」を右クリック、「Create New Server…」を選択します。
    Community Server Connectorの作成

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

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

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

VSCodeからTomcatを実行

上記で連携したTomcatサーバーを起動します。

  1. VSCodeで「Servers – Community Server Connector(Started)」タブを開きます
  2. 上記で作成したサーバーが表示されるので、右クリックして「Start Server」を選択します。
    Server起動001
  3. その後「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)が必要となるため、新しいプロジェクトを作ります。

  1. 「sample.war」を複製し、ファイル名を「sample.zip」とします。
  2. 「sample.zip」を解凍して、フォルダ名を「src_helloworld」とします。
  3. VSCodeで「webapps」フォルダを開きます
  4. ファイル「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!");
   }
}

ここまでで、以下のような状態になります。
デバッグ001

上記では、Hello.classがダウンロードしたJDKのバージョンが合わない可能性があるので、以下の手順で再コンパイルする必要があります。

  1. カレントフォルダを「src_helloworld」として、コンソールを開きます
  2. 以下のコマンドを実行して、classファイルを再作成します
    cd ./src_helloworld
    javac -classpath ../../lib/servlet-api.jar -d ./WEB-INF/classes ./WEB-INF/classes/mypackage/Hello.java

上記で、資材の作成が完了したので、デバッグ実行していきます。

  1. VSCodeの「src_helloworld/WEB-INF」を右クリックして「Debug on Server」をクリックして、サーバーをデバッグモードで起動します
    デバッグ002

  2. 作成したTomcatサーバーを選択します。
    デバッグ003

  3. 「No」を選択します。
    デバッグ004

  4. 「Please input a project name to be used by the java debugger.(‘Enter’を押して確認するか’Escape’を押して取り消します)」と表示されるので、「Enter」キーを押下します

  5. 「src_helloworld/classes/mypackage/Hello.java」を開き、行番号をクリックしてデバッグポイントを配置します
    デバッグ003

  6. http://localhost:8080/src_helloworld」にアクセスして、「servlet」リンクをクリックします。
    デバッグ004

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

  8. 再開するため、「F5」キーを押下します

  9. ブラウザ上に戻ると、「hello world!」とだけ記載されたページが表示されます。

  10. 終了するには、「Server」タブから、動作中のTomcatを右クリックして「Stop Server」を押下します。
    デバッグxx

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

タイトルとURLをコピーしました