記憶力が無い

プログラミングとランニングとカメラと何か

Intellij IDEA Ultimate で始めるサーブレット開発もどき

JetBrainsQuest で All Products pack の半年分のサブスクリプションをもらったので、 Intellij IDEA Community (無料版)でできなかったサーブレットの開発を試してみる。

今回は、Tomcat経由でサーブレットが呼び出され、ブラウザに「hello, world!」の文字が表示されるところまでやる。

とりあえずやったことをメモするだけなので、間違った操作があっても悪しからず...

(追記)

↓公式のドキュメントにも大体同じことが書かれたものがあったので、こちらも参考に。

環境

  • 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プロジェクトの作成

f:id:ttk1:20200402004633p:plain

  • 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 に書かれたページが表示される(デフォルトだと空っぽのページが表示される)。

f:id:ttk1:20200402011751p:plain

サーブレットの作成

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を入力しアクセスすると良い。)

f:id:ttk1:20200402022156p:plain

画面に「hello, world!」の文字が表示されたら成功。めでたしめでたし。

おまけ

WARファイルを生成する

Step 1. Artifactの追加

メニューバー > File > Project Structure... の順に選択すると、次のようなの画面が表示される。 この画面で、 Artifacts > + (Add) > Web Application: Archive > For 'helloworld: war exploded' の順に選択し、 OK を押して画面を閉じる。

f:id:ttk1:20200402014602p:plain

Step 2. WARファイルのビルド

メニューバー > Build > Build Artifacts... の順に選択すると、次のような画面が表示される。 この画面で、 helloworld:war > Build の順に選択すると、WARファイルが生成される。

f:id:ttk1:20200402015424p:plain

WARファイルは out/artifacts/helloworld_war/helloworld_war.war に保存される。

*1:[New...]から追加しておく

*2:上のリンク先で入手したものを適当な場所に展開し、[New...]から追加しておく

Copyright © 2017 ttk1