投稿日:2020年10月6日
更新日:2020年9月29日
今までとこれからの内容
前回で、Mavenプロジェクトを作成して、pom.xmlや各ソースを配置する予定でしたが、長くなりそうなので、ページを分けました。
前回までは、こちらになります。
VSCode + JAVA + TOMCAT MAVEN 開発環境
前回の続きなので、目標は、そのままとしています。
前回の目標は、VSCodeも懸案!
- VSCode赤表示は、エラーの事?
- これは、プロジェクトが原因と感じています。
- ターミナルにでてきたけどブラウザはどうするの?
- まず、ビルドが出来ていないので、ビルドが出来ることが必要?(たぶん)
- これは、赤字のエラーに関すると思える。
- よって、プロジェクトの関係かと思える。
- ビルドが出来れば、VsCodeで、デバッグができるかも!
- まず、ビルドが出来ていないので、ビルドが出来ることが必要?(たぶん)
今回は、前回の目標に加えて!
- Mavenのプロジェクト作成。
- Mavenでのプロジェクトのビルド
- Mavenを使用てのデバッグ
たぶん、このぐらいではないでしょうか!?
前回目標を達成しなかったので、増えましたね~(笑)
でも、頑張るしかないので、頑張ります。
たぶん、難儀ですよ~(笑)
さて、続きの作業を早速開始!
Maven、pom.xmlの修正&プログラムの変更!
とりあえず、一度作成したJavaの勉強ファイルなどをコピーして、環境を整えていきたいと思います。
これがいいと思います。
Jave+Tomcatで、始めてのクライアントとサーバの通信
ここまでが前回までです。
上記のプログラム一式をとりあえず、コピーします。
D:\Tomcat\Tomcat\webapps\Helloの中身を!
↓
D:\Tomcat\MavenPrj\mavenprj\src\mainへコピー
ビルドは、左下のMaven名を右クリックして出来ます。
とりあえず、「compile」を選びます。
ビルドが成功したみたいです。
(ビルドエラーが出てきてほしかったのですが、致し方ありません)
ビルドエラーが出てきた場合は、pom.xmlだと思いますので、後回しでOKです。
但し、問題が発生しているみたいです。
簡単なものは、先につぶしていきます。
(内容によっては、pom.xmlになりますので、後にします)
- web.xml
- The content of element type “web-app” must match “(icon?,display-name?,description?,distributable?,context-param,filter,filter-mapping,listener,servlet,servlet-mapping,session-config?,mime-mapping,welcome-file-list?,error-page,taglib,resource-env-ref,resource-ref,security-constraint,login-config?,security-role,env-entry,ejb-ref,ejb-local-ref)”.
- これは、web.xmlの書き方が悪いみたいです。
- こんな感じに、順番を入れ替えれば、直るみたいです。
- この時点で、問題から直ぐ消えてなくなります。
- ただ、これでは、解りにくいので、私は、DOCTYPEをコメントアウトしました。
- 必要なのかは、解っていません(笑)
- ついでに、言語コードも追加しました。
- mavenprj
- Build path specifies execution environment JavaSE-1.7. There are no JREs installed in the workspace that are strictly compatible with this environment.
- The compiler compliance specified is 1.7 but a JRE 1.8 is used
- これらは、pom.xmlになりますので、後回しにします。
- RequestServ.java
- RequestServ.java is not on the classpath of project mavenprj, only syntax errors are reported
- これは、ソースの置き場所が悪いと思えます。とりあえず、App.javaののフィルダーに移しました。
- そして、ソースの先頭に、package mavenpkj;を追加しました。
- そうすると!エラーが19件に増えましたwww^^;
- inpoerが無視されているのが原因です。
- これも、pom.xmlなので、後回しにします。
とりあえず、java関係は修正しました。
続いては、pom.xmlを修正しながら、分析していきます。
pom.xmlを修正&分析
前回分析した内容を元に、修正していきます。
前回の分析は、VSCodeの環境見直しがそろそろ必要?のMavenプロジェクト作成のまとめにあります。
分析しながら、コメントをつけていけば、次に使えるのでお勧めします。
さて、コメントをドシドシつけながら、解説します。
- maven.compiler.source
- javaのバージョンなので、1.7から1.8に変更しました。
- maven.compiler.target
- javaのバージョンなので、1.7から1.8に変更しました。
- 保存を行うと!下記のメッセージが出てくることがあります。
- 無視しても構いませんが、google先生によると!
「Google 翻訳 ビルドファイルが変更されました。 Javaクラスパス/構成を同期しますか?」ということなので、「Now」で問題ありません。 - この時点で、いくつかの問題が消えるはずです♪
- 無視しても構いませんが、google先生によると!
こんな感じで、修正していきます。
<dependencies>が出てきました。これは大事なので、次の段落とします。
pom.xmlの<dependencies>の追加
これは、inportなどのjarについて記載する場所になります。
ただ、何をどうやって追加するのが解りませんでした^^;
たまたまVsCodeをつついていて、解ったのですが、VsCodeのコマンドで追加が出来るみたいです。
今回は、import javax.servlet.*;がエラーになっていましたので、
こちらの追加を行うことにします。
(.netでいうと、名前の解決が出来たいない状態ですね!)
では、コマンド(Ctrl+Shit+P)を下記で、検索します。
- 「maven add」で検索!
- 「Maven: Add a dependency…」を選択します。
- 「javax.servlet」を入力して、Enterを押します。
- そうすると、下記の選択が出てきます。
- その中から選ぶことになりますが、この中から、何を選べばいいのか?
又、選ばなければいけないものは、どうやって選定するのかがよく解っていません^^; - ちなみに、表示されている、一番したを選びました。
- 「javax.servlet-api javax.servlet」
- すると、pom.xmlに下記が追加されるはずです。
- だた、これでは、バージョンが異なりますので、手動で修正を行います。
- servletのバージョンは、こちらに記載されています。
- tomcatが、8.5xなので、servletは、3.1.0になります♪
- そうすると、下記の選択が出てきます。
- この時点でエラーが、一気に減るはずです!
さて、残った問題(ワーニング)もついでに消していきましょう!
- HelloServlet.java
- The serializable class HelloServlet does not declare a static final serialVersionUID field of type long
- google翻訳を使っても、意味わかりませんね^^;
- シリアル№を追加しなさいって言っています。
- 継承(親クラスを実装)している場合に出るそうです。
- よは、親との整合性が崩れた時にエラーにしたりするみたいです。
- 継承(親クラスを実装)している場合に出るそうです。
- public class HelloServletにカーソルを持っていき、電球マークから、serialVersionUIDを追加することで解決します。
- The serializable class HelloServlet does not declare a static final serialVersionUID field of type long
- RequestServ.java
- Enumeration is a raw type. References to generic type Enumeration should be parameterized
- google翻訳を使っても、意味わかりませんね^^;
- .netの経験で、Enumってことは解ります。
- これはたぶん!変数の型を指定しなさいということだと思います。
- カーソルを合わせると!<String>が見えますので、下記にしました。
- 変更前
- Enumeration headers = req.getHeaderNames();
- 変更後
- Enumeration<String> headers = req.getHeaderNames();
- The value of the local variable url is not used
- これは、google先生がいなくても解りますね♪
- 使用していない変数も教えてくれるとは、いいですね♪
- コメントにしました。
- Enumeration is a raw type. References to generic type Enumeration should be parameterized
これで、問題はなしになりました(祝♪)
さらに整理を進めます
サンプルが色々ありましたので、削除等を行っていきます。
- testディレクトリ
- このディレクトリで、testと分けてテストが出来るのだろう!ということはなんとなく解ります。
- 時に、今は必要としていないので、削除してみます。
- その他
- その他も、とりあえず、VSCode + JAVA + TOMCAT MAVEN 開発環境のディレクトリ体系に合わせていきます。
- ちょっと違う所
- webappのフィルダを作成し、ここに、jspやhtml関係(WEB-INFを含む)を入れます。
- webappのフィルダは、下記になります。
- D:\Tomcat\MavenPrj\mavenprj\src\main\webapp
- webappは、Mavenのディレクトリの仕様かと思われます。
- pom.xmlの変更
- 最後に、このままだと、jarファイルを出力するので、pom.xmlに下記を追加します。
- <packaging>war</packaging>
- 最後に、このままだと、jarファイルを出力するので、pom.xmlに下記を追加します。
で、出来たファイルがこちらになります。
やっと出来ると思います!デバッグテスト!
さて、やっとデバッグテストが出来ます。(祈ります(笑))
ブレイクポイントは、RequestServ.javaに設定しました。
手順は、下記になります。
- 左下のMavenプロジェクトを右クリック。
- 「package」を選択します。
- エラーがない場合は、ターミナルに緑の文字で下記が出力されます。
- BUILD SUCCESS
- エラーが出た場合は、修正して下さい。
- エラーがない場合は、ターミナルに緑の文字で下記が出力されます。
- 次に、左メニューの「TOMCAT SERVERS」を開きます。
- 右へマウスを持っていくと、プラスが表示されるので、クリックします。
- Tomcatのある場所を指定します。
- D:\Tomcat\Tomcat
- 次に登録されたTomcatを右クリックを行い、「Debug War Package」を選択します。
- ダイアログが表示されますので、そこで、warファイルを選びます。
- warファイルは、Mavenのpackage作成時に、下記に出来ているはずです。
- フォルダ:D:\Tomcat\MavenPrj\mavenprj\target
- ファイル:mavenprj-1.0-SNAPSHOT.war
- warファイルは、Mavenのpackage作成時に、下記に出来ているはずです。
- これで、warファイルのデバッグが開始された状態になります。
- 次に、エクプローラに戻って、再度Tomcatを右クリック行い、
「Open in Browser」を選びます。
- 次に、エクプローラに戻って、再度Tomcatを右クリック行い、
- ブラウザが表示されていると思います。
- 下にwarファイルのリンクが表示されていますので、クリックします。
- この時点で、404のエラーになると思います。(笑)
- URLの最後にform.htmlを追加します。
- http://localhost:8080/mavenprj-1.0-SNAPSHOT/form.html
が正解です。
- http://localhost:8080/mavenprj-1.0-SNAPSHOT/form.html
- 後は、VSCode + JAVA + TOMCAT MAVEN 開発環境の時にテストしたように!
- 適当にチェックをつける!
- サブミットボタンを押す!
その結果が!
ブレイクポイントで、きちんと止まりましたね♪
さらに、JAVAで作成されたPGの表示も問題ありませんね♪
これで、基本的には、デバッグ環境が整ったと思います♪
ハマった所
今回は、勉強して入ったので、特にないといってもいいかも知れません!
勉強には、時間を使いましたが(笑)。
参考サイト
- Visual Studio Code(VS Code) + Maven + JUnitによるテスト環境の構築
- serialVersionUIDって何なの?書くのめんどい。
- Visual Studio Code + Docker + Remote DevelopmentでTomcat上のWebアプリを超簡単にデバッグ
ありがとうございました♪
残っている懸案
分類 | 懸案 | 結論 | 完了 |
---|---|---|---|
VSCode | ターミナルにでてきたけど、 ブラウザはどうするの? | この記事で完了 | 完了 |
java | throws ServletException, IOException | ||
VSCode | VSCode赤表示は、エラーの事? | この記事で完了 | 完了 |
今回のまとめ
今回のまとめは!
- まとめなければいけないことが、沢山ありすぎです^^;
よって、次回とします。
さて、がんばりますよ~♪
(でも、ハマりたくないよ~(笑))