[Java学習] VSCodeでjsp/Servletの開発環境を整える方法Maven不要の方法を模索中


※環境構築をする度にエラーに悩まされているので、何かこだわりがない場合はMavenを使った方がよっぽど楽だと思います。

VSCodeでサーブレットを勉強しましょう!!な本を買ったのはいいですが、環境構築で2日間詰まりました。
Eclipseなら走るコードなのに、VSCodeだとエラーを吐かれる。

そしてようやく処理方法がわかったと思い、鼻息を荒く「これが環境構築だ!」と記事を投稿した物の、勘違いに勘違いを重ねた記事であったので少々トーンダウンした🐧になります。

「今回はMavenを使わない!!」と決めたら絶対に使わない気質なので・・・、めんどくさい思いをしています。

実は間違っていた・・・という事があっても怒らないでくださいね。

[2つ拡張機能をインストール]

VScode本体やJDK、Tomcatは入っているものとします。

2つの拡張機能もお決まりの物ですので、入っているかもしれません。

・Extension pack for Java
・Java Server Pages(JSP)

その後、適当な名前で.javaファイルを作ります。

~.javaをクリックすると、左下の方に「JAVA PROJECTS」と出てきます。
(クリックするまで表示されません)

Configure Classpath

「・・・」から「Configure Class Path」を選んで、「Referenced Librarys」にTomcatのlibフォルダにある「servlet-api.jar」と「jsp-api.jar」を追加します。
これを追加しないとservlet関係のものがimportできないです。

あとはサーブレット用の~.javaを作って中身を記述するだけです。

[詰まった部分]

詰まった部分は3か所あります。
(かなり不正確な情報が混ざりますので、注意して読むことをお勧めします。)

VSCodeの仕様の勘違いと、VSCodeでの--enable-previewの有無の切り替え方法がわからなかったこと、--enable-previewをTomcatに設定する方法です。

まず1つめ。
私は今までEclipseで開発をしていたので、VSCodeの「デバッグ」の意味がわかってなかったんですね。
「実行」タブにあるし、これが通らないとclassファイルが生成されないんじゃないか!?と盛大に勘違いしました。
どういう仕様かまだわかっていないですが、保存時にVSCodeはclassファイルを自動で生成してくれます。

なので、最初に詰まり始めた原因は実はVSCodeになかったんですね。
classファイルができれば良いと思ってましたので、そういう意味では最初の時点で作れていたので(それに2日気づかない)まったく問題はなくただ1人で騒いで困っていただけです。

詰まった本質の部分は「--enable-preview」の有無にあったんじゃないと思っています。
classファイルを読み込んでも毎回Tomcatがクラスが何か読めないよ「--enable-preview」で実行してみたら?と言ってくるのです。
これはTomcat側の問題とも言えますし、VSCode側の問題とも言えます。

コンパイルする時に「--enable-preview」を付けたら、Tomcat側も「--enable-preview」をつけて走らせないと、うまく動かないらしいです。

VSCodeのJava Extension Packのアップデートのどこかで「--enable-preview」がコンパイル時に自動で追加されるようになったという情報が検索すると出てくるので、VSCode側では自動で「--enable-preview」してるっぽいです。

ですが、Tomcat側に「--enable-preview」の記載がないので、整合性がとれなくなりclass~エラーを起こしていた。というのに気づけなかったのが問題の本質だったと思います。

「--enable-preview」が何のために何をしているのか、VSCode側ではどうやって設定の有無を切り替えるのかを理解していきたいです。

とりあえずはTomcatが実行しているjvmのオプションに「--enable-preview」を追加したら、動くようになりました。


[Servletについて]

ServletはHttpServletがmainメソッドを持っていて、それを継承することでServletファイルはmainメソッドを持たなくて良いという仕組みになっています。

実際、きちんとクラスパスを通してあげれば手動でコンパイルすることも可能です。

HelloServlet.javaにメインメソッドは記載していません
バッチリ手動コンパイルでも認識
ちなみに手動コンパイルだと「--enable-preview」がないからかTomcat側に「--enable-preview」がなくても認識してくれました

[この2日間で学べたこと]

・サーブレットの作成においてメインメソッドが不要な理由。
・-cpを使っての手動コンパイルの練度アップ。
・cdでサクサクディレクトリ間を移動できるようになった。
・問題解決のための仮説検証。

・記事を公開するときは普段の10000倍謙虚にならないと後で自分が恥ずかしい🐧

この記事が気に入ったらサポートをしてみませんか?