JetBrains Quest begins… #JetBrainsQuest
— JetBrains (@jetbrains) 2020年3月9日
48 61 76 65 20 79 6f 75 20 73 65 65 6e 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6f 66 20 74 68 65 20 4a 65 74 42 72 61 69 6e 73 20 77 65 62 73 69 74 65 3f
JetBrainsQuest で All Products pack の半年分のサブスクリプションをもらったので、 Intellij IDEA Community (無料版)でできなかったサーブレットの開発を試してみる。
今回は、Tomcat経由でサーブレットが呼び出され、ブラウザに「hello, world!」の文字が表示されるところまでやる。
とりあえずやったことをメモするだけなので、間違った操作があっても悪しからず...
(追記)
↓公式のドキュメントにも大体同じことが書かれたものがあったので、こちらも参考に。
- Developing a Java EE Application - Help | IntelliJ IDEA
- (翻訳サイト)Java EEアプリケーションの開発 - ヘルプ | IntelliJ IDEA
環境
- OS: Windows 10 Pro
- IDE: Intellij IDEA Ultimate 2019.3.4
- Java: jdk1.8.0_242
- Tomcat: apache-tomcat-9.0.33
Tomcatの入手
Apache Tomcat® - Apache Tomcat 9 Software Downloads
ここから入手できる。この記事を書いた時点で最新バージョンは 9.0.33 。 使うサーブレットコンテナは何でもよいが、以前触ったことのある Tomcat を使うことにする。
Java EEプロジェクトの作成
- Project SDK: あらかじめ登録*1しておいた JDK を選択(たまたま手元にあったjdk1.8.0_242を使用)
- Java EE version: Java EE 8 を選択
- Application Server: あらかじめ登録*2しておいた Tomcat を選択
- Additional Libraries and Frameworks: Web Application を選択
- Versions: 4.0 を選択
- Create web.xml: チェックを入れる
次の画面でプロジェクト名を聞かれるので、適当に「helloworld」入力し、プロジェクトを作成する。
この時点で、次のようなファイルが自動で作成される。
helloworld (project root)/ ├ src/ └ web/ ├ WEB-INF/ │ └ web.xml └ index.jsp
また、画面右上の「▶」ボタンから Tomcat が起動する(ようにあらかじめ設定されている)(下画像)。Web サーバーが立ち上がると、index.jsp に書かれたページが表示される(デフォルトだと空っぽのページが表示される)。
サーブレットの作成
index.jsp は要らないので削除し、 srcディレクトリ配下に HelloWorld.java を作成する。
この時点でディレクトリ構成は次のようになる。
helloworld (project root)/ ├ src/ │ └ HelloWorld.java └ web/ └ WEB-INF/ └ web.xml
また、 HelloWorld.java, web.xml の中身は次のようにする。
HelloWorld.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloWorld extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("hello, world!"); } }
- GETリクエストに対して文字列「hello, world!」を返す単純なサーブレットを記述している
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>helloworld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloworld</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
- HelloWorld.java で記述したサーブレットを、URLパターン
/
にマッピングしている
サーブレットの呼び出し
Intellij 画面右上の「▶」ボタンを押すと、ブラウザが自動で立ち上がり、 http://localhost:8080/helloworld_war_exploded/
のページが開かれる。
(開かなければ、手動でブラウザにこのURLを入力しアクセスすると良い。)
画面に「hello, world!」の文字が表示されたら成功。めでたしめでたし。
おまけ
WARファイルを生成する
Step 1. Artifactの追加
メニューバー > File > Project Structure...
の順に選択すると、次のようなの画面が表示される。
この画面で、 Artifacts > + (Add) > Web Application: Archive > For 'helloworld: war exploded'
の順に選択し、 OK を押して画面を閉じる。
Step 2. WARファイルのビルド
メニューバー > Build > Build Artifacts...
の順に選択すると、次のような画面が表示される。
この画面で、 helloworld:war > Build
の順に選択すると、WARファイルが生成される。
WARファイルは out/artifacts/helloworld_war/helloworld_war.war
に保存される。