Eclipseでmavenを使ったWebアプリを、jsp（jstlとEL式を使用）を使って作ってみた

# はじめに
今更感強いタイトルですが、基本から押さえたかったので・・・。
Eclipseでmavenを使ったWebアプリケーションを構築するときにやったことをまとめてみました。大まかには、
①Eclipseでmavenプロジェクトの作成
↓
②Webアプリケーションサーバの設定(Tomcat)
↓
③jstlを使用してjspを記述
↓
④EL式を使ってjspを記述
↓
⑤画像やcssをjspに適用

という流れです。
①～⑤までを一つの記事でまとめているものは見つからなかったので書いてみました。
（①～⑤それぞれ独立して記載している記事が多く、一連の流れで書いているような記事を見かけなかった）

# やったこと
## Eclipseでmavenプロジェクトの作成
まずはEclpse上でプロジェクトを作成します。
Eclipseのファイル→New→projectを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/c6a4b0c5-d194-0e81-fefe-5e649eb22f95.png)

Maven Projectを選択してNext

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/80140b88-1628-1c69-e79a-b0e44b62c68a.png)

特に何も変更せずに次へ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/f102d46c-bc10-f6f2-5e17-3ea383792c2f.png)

以下のArchetypeを選択して次へ
Group Id：org.apache.maven.archetypes
Artifact Id：maven-archetype-webapp

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/36c921a0-9aa8-7c19-4ed5-26e15348cfcb.png)

Group IdとArtifact Idに任意の名前を入力してNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/dadb4d20-4c1b-856d-85e3-eb05d9e4165f.png)


以下のようなプロジェクトが作られるが、コンパイルエラーが発生しているので直していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/aa6e6d78-91a5-9aa0-4eae-7fedbd78ad69.png)


### 修正点①：src/main/java, src/test/javaフォルダの作成

プロジェクトのプロパティを見ると、src/main/java, src/test/javaが見つからないといわれているのでフォルダを作っていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/c6bc002a-14cf-2e10-228b-c96e6d44a803.png)

普通にEclipseを右クリックして、src/main/java, src/test/javaフォルダを作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/df1d2d92-a146-0dda-b8e5-181ae40526a0.png)



エラーが解消されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/801ae8f7-e9d5-fe34-4c61-580c205dee5b.png)

### 修正点②：pomの修正

まだコンパイルエラーなので今度はpomを修正。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/3a08a046-773a-81c4-1e82-e05cc6192bc0.png)


index.jspでコンパイルエラーが発生している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/a9d87c94-ac9c-2ef7-0381-8721d9aa7f1c.png)


`The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path`と言われているので、pomの`<dependencies>`に以下を追記する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/67dc581b-3652-d5a3-c2c3-6631d8597227.png)




```xml:pom.xml
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
```

※上記をコピペしてもいいですが、pom.xmlに記載すべき内容は[Maven Central Repository](https://mvnrepository.com/repos/central)から探してください。javax.servlet-apiなら[こちら](https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api)に書いています。


pom.xmlの記述を追加したら、プロジェクト上で右クリックしてMaven→Update Projectを選択（Alt+F5でも可）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/ae8a8aed-8655-aee9-875f-9919c5fdb60f.png)



対象プロジェクトにチェックが入っていることを確認してOKボタンを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/854eced3-2588-81f2-ab9e-0a0054f59475.png)



コンパイルエラーが解消されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/4b3f8463-8cf0-ba11-8c27-0a6fd198550b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/7f0e3b44-2c1c-66cc-7131-dbc8bf4d9e37.png)



最後に、コンパイルエラーの原因とは関係ないが、JDKのバージョンを指定します。
mavenはデフォルトでJDKのバージョン1.5でコンパイルされるので、バージョンを明示的に指定する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/855ebbf3-ed21-3524-ff96-28d03d7b90e2.png)


```xml:pom.xml
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
```

※[こちらの記事](https://qiita.com/taumax/items/0507123ead3faa2d750a)もご参照ください

### 参考
[[Eclipse/Tomcat] MavenのwebappプロジェクトでServlet+JSP](https://qiita.com/zaki-lknr/items/8137ac40ebd8f5bdb3c5)

## Webアプリケーションサーバの設定(Tomcat)
### インストール
Tomcatをインストールし、Eclipseと連携します。
インストールに当たっては参考になる記事が大量にあるので詳細はそちらに委ねます。以下の記事が参考になると思います。

- [Eclipse+Tomcat連携](https://www.searchman.info/java_eclipse/1090.html)
- [TomcatでHelloWorld](https://www.searchman.info/java_eclipse/1040.html)
- [Apache Tomcat](https://tomcat.apache.org/download-90.cgi)
- [eclipseにtomcatのプラグインを適用できない場合の対処](https://qiita.com/tani-shi/items/7d15c6ea84914485d767)
- [Eclipseでwarファイルを作成し、Tomcatにデプロイする手順](https://itsakura.com/tomcat-warfile)


### Tomcat起動

サーバを右クリックしてAdd and Remove
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/8f8fdd30-6a2c-6169-c89e-16ee7f9d195c.png)



対象のプロジェクトを選択し、Addボタンを押下。対象プロジェクトが右に移動することを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/e1fc0f2d-c32e-9bf1-d29f-2ad9341a493b.png)




サーバー起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/72d8df8c-f1f4-e8d7-66f1-fffc59605f1d.png)


`http://127.0.0.1:8080/[プロジェクト名]/`をブラウザに入力し、Hello World!(index.jspの内容)が表示されることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/81e6fe38-cf6a-7424-4e66-9de1487f1380.png)

## jstlを使用してjspを記述
Hello WorldだけだとWebアプリケーションとしては面白くない。折角Tomcatを使ってるんだし、サーブレットコンテナの機能を活用したものを作りたい。
というわけで、jstl ([JavaServer Pages Standard Tag Library](https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/)) を使ってjspを書いてみたいと思います。
jstlとは、一般によく利用されるカスタムタグをまとめ、Apache Taglibs Project (旧Jakarta Taglibs Project)が配布しているものです。
jspは[スクリプトレット](https://code-examples-ja.hateblo.jp/entry/2015/10/22/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AC%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6JSP%E3%81%ABJava%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC#:~:text=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AC%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%E3%80%81JSP,%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%E3%81%9F%E3%82%81%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%80%82&text=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E5%BC%8F%E3%81%A8%E3%81%AF%E3%80%81%E5%A4%89%E6%95%B0,%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%80%82)を使うことでJavaのコードを埋め込むことができます。しかし、あまり複雑なロジックをjspに埋め込むと可読性・保守性が悪くなってしまいます。このため、jspはjstlを使って記述するのがお勧めです。
jstlを使用できるようにするため、まずはtaglibsとjstlをpom.xmlに追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/05e93724-b5d3-58c9-59eb-e70163f00dcb.png)

```xml:pom.xml
<dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
  <dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
</dependencies>
```

※上記をコピペしてもいいですが、pom.xmlに記載すべき内容は[Maven Central Repository](https://mvnrepository.com/repos/central)から探してください。jstlなら[こちら](https://mvnrepository.com/artifact/javax.servlet/jstl)、taglibs-standard-implなら[こちら](https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl)に書いています。


Eclipseのmaven→プロジェクトの更新を押下。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/ae8a8aed-8655-aee9-875f-9919c5fdb60f.png)

jspの先頭（pageディレクティブ）に以下記述を追加します。
（全種類のjstlを書きましたが、使用するものだけ記載すればOKです）

```jsp:sample.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
```

各タグで何ができるかは[このサイト](http://struts.wasureppoi.com/jstl/00_jstl.html)がよくまとまっていると思います。
公式のリファレンスは[こちら](https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/)

jspにこの宣言をすることで、prefixで指定した文字を使用してjstlをjspに記述できるようになります。
具体的にはこんな感じ。CoreタグのforEachを使用した例です。
forEachのリファレンスは[こちら](https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/forEach.html)

```jsp:jsptest.jsp
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html><body>

<c:forEach begin="0" end="10">
  こんにちは！<br>
</c:forEach>

</body></html>
```

0～10の11回「こんにちは！」が表示されます。
これを呼び出すServletはこんな感じ。

```java:JspTest.java
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/JspTest")
public class JspTest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // WEB-INFからjspへのパスを文字列で指定
        String path = "/WEB-INF/jsp/jsptest.jsp";
        RequestDispatcher disp = request.getRequestDispatcher(path);
        disp.forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
```

Tomcatを起動して`http://localhost:8080/[プロジェクト名]/JspTest`をブラウザのURLに入力するとこうなります。
※URLの「JspTest」は上記Servlet (JspTest.java) の先頭に記述しているアノテーション：`@WebServlet("/JspTest")`から来ています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/49257e1a-0e66-61fc-173c-b2bd9bcdd56c.png)

うん。ちょっと狂気を感じますね。

### jstl参考

- [忘れっぽいエンジニアのJakarta Strutsリファレンス](http://struts.wasureppoi.com/jstl/00_jstl.html)
- [JavaServer Pages Standard Tag Library 1.1 Tag Reference](https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/)
- [JSTL coreタグライブラリの利用](https://qiita.com/sculptcat/items/53d1a3a2d3b973354085)
- [JSTLの再入門](https://qiita.com/chenglin/items/16860d194eda96815c19)


## EL式を使ってjspを記述
次はEL式です。EL式とは、Expression Languageの略です。
jspをより簡単に書くためにJSP2.0より導入されており、jsp上で使用することができます。
EL式を使えば、jsp上に計算を埋め込んだり、リクエストスコープやセッションなどに格納されたオブジェクトをjspで簡単に使用することができるようになります。
El式を使用するためには、jspファイルのpageディレクティブに以下を記載します。

```jsp:jsptest.jsp
<%@ page isELIgnored="false" %>
```

これでEL式を使ってjspを記述することができるようになります。
EL式を使って計算を埋め込みたい場合は`${式}`という形で記載します。具体的には、jsp上に`${2 * 3}`と記載し、jspを実行すると`6`が表示されます。

```jsp:jsptest.jsp
<%@ page isELIgnored="false" %>

<html><body>

${2 * 3}

</body></html>
```

リクエストスコープに格納されたオブジェクトを表示する場合は`${式}`の式の部分にセッション名を記載します。
例えばServletで以下のようにしていればセッション名は「name」です。

```java:Servlet.java
request.setAttribute("name", "value");
```

この場合、jsp上に`${name}`と記載し、jspを実行すると`value`という文字が表示されます。


```jsp:jsptest.jsp
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ page isELIgnored="false" %>

<html><body>

${name}

</body></html>
```


JavaBeansの仕様に準拠したオブジェクトに格納された値を表示することも可能です。その場合は、`"${[セッション名].[プロパティ名]}"`をjspに記載します。
セッション名については先ほどと同様です。
プロパティ名はJavaBeansの仕様に準拠している必要があります。
つまり、`<propertyName>`という名前のプロパティのGetter/Setterは`get<PropertyName>()`と`set<PropertyName>(<PropertyType>)`となります。
ただし、型がbooleanであるプロパティについてはGetterとして`is<PropertyName>()`というメソッドでも良いことになっています。"is〜"と"get〜"が両方ある場合は"is〜"が優先されます。
具体的には以下のようになります。

```java:SampleBean.java

public class SampleBean {
    private String propertyA;
    private boolean propertyB;
    private boolean propertyC;

    public String getPropertyA() {
        return propertyA;
    }

    public void setPropertyA(String propertyA) {
        this.propertyA = propertyA;
    }

    // getPropertyB()よりもisPropertyB()が優先される
    public boolean isPropertyB() {
        return propertyB;
    }

    // isPropertyB()メソッドがあるのでEL式からこちらは呼び出されない
    public boolean getPropertyB() {
        return !propertyB;
    }

    public void setPropertyB(boolean propertyB) {
        this.propertyB = propertyB;
    }

    public boolean getPropertyC() {
        return propertyC;
    }

    public void setPropertyC(boolean propertyC) {
        this.propertyC = propertyC;
    }
}
```

このSampleBeanを、以下のようにしてリクエストスコープに格納するServletがあるとします。

```java:Servlet.java
SampleBean sample = SampleBean();
sample.setPropertyA("propertyA");
sample.setPropertyB(true);
sample.setPropertyC(false);
request.setAttribute("name", sample);
```

この場合、SampleBeanのプロパティに格納された値をEL式で参照するには以下のように書きます。

|EL式の記載|呼び出されるメソッド|jspに表示される値|
|---|---|---|
|${name.propertyA}|SampleBean#getPropertyA()|propertyA|
|${name.propertyB}|SampleBean#isPropertyB()|true<br>（SampleBean#getPropertyB()は呼び出されないため、falseとはならない）|
|${name.propertyC}|SampleBean#getPropertyC()<br>（isPropertyC()メソッドがないのでgetPropertyC()が呼ばれます|false|


先ほどのjstlとEL式を組み合わせてjspを記述するとこうなります。
まずServlet

```java:JspTest.java
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import data.SampleBean;

@WebServlet("/JspTest")
public class JspTest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<SampleBean> list = new ArrayList<SampleBean>();

        for (int i = 0; i < 10; i++) {
            SampleBean sample = new SampleBean();
            sample.setPropertyA("プロパティ―A" + i);
            sample.setPropertyB(true);
            sample.setPropertyC(false);
            list.add(sample);
        }
        request.setAttribute("samplelist", list);

        // WEB-INFからjspへのパスを文字列で指定
        String path = "/WEB-INF/jsp/jsptest.jsp";
        RequestDispatcher disp = request.getRequestDispatcher(path);
        disp.forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
```

リクエスト名`samplelist`でlistを格納しています。
続いてjspです。

```jsp:jsptest.jsp
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page isELIgnored="false" %>

<html><body>

<table border="1">
  <thead>
    <tr>
      <th>プロパティA</th>
      <th>プロパティB</th>
      <th>プロパティC</th>
    </tr>
  </thead>
  <tbody>
    <c:forEach items="${samplelist}" var="item">
      <tr>
        <td><c:out value="${item.propertyA}" /></td>
        <td><c:out value="${item.propertyB}" /></td>
        <td><c:out value="${item.propertyC}" /></td>
      </tr>
    </c:forEach>
  <tbody>
</table>
</body></html>
```

リクエストに格納されたlistをEL式を使い、`items="${samplelist}"`で取り出しています。
listに格納された要素：SampleBeanを「item」で参照できるようにしています（`var="item"`の部分）。
jstlのCoreタグforEachを使用し、listをイテレートしながら、Coreタグoutで値を出力。出力する値はEL式`"${item.propertyA}"`、`"${item.propertyB}"`、`"${item.propertyC}"`でSampleBeanから取り出しています。
Tomcatを起動して`http://localhost:8080/[プロジェクト名]/JspTest`をブラウザのURLに入力するとこうなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/94397aea-f3dc-ce80-5384-536f4b0fb526.png)



### 参考

- [JavaBeansのプロパティ名とGetter/Setter名](https://skirnir.hatenadiary.org/entry/20080822/1219375620)
- [【初心者向け】EL式](https://qiita.com/chihiro/items/50131e8488e1b0cd1cdd)
- [EL式【基本】](https://pgbox.grush.jp/ref/java/jee/jsp/el.html)


## 画像やcssをjspに適用
webアプリケーションを作るのであれば、やはりjspに画像を埋め込んだりcssを適用したりしたくなる。
その場合の手順。

Eclipseで作ったプロジェクトにwebappというフォルダがあり、その配下に以下のようにフォルダ、ファイルを作成していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/95f8267c-c089-3a3b-af69-ac5953130cc7.png)

```
webapp
　├─WEB-INF
　└─WebContent
　　　├─css
　　　│　├─xxx1.css
　　　│　└─xxx2.css
　　　└─images
　　　　 ├─xxx1.jpg
　　　　 └─xxx2.png
```

ここで新たに作成したフォルダがWebサーバのどこに配置されるかは、EclipseのプロジェクトのプロパティからDeployment Assemblyから確認することができる。
（以下の画像参照）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/f5a6745a-b943-c1ab-d93b-6effae9a85ba.png)

webapp配下に格納したファイルは、jsp上で以下のように指定することで参照できるようになります。

```jsp:test.jsp（①スクリプティングの式で出力）
<%@ page contentType="text/html; charset=Windows-31J" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page isELIgnored="false" %>

<html>
  <link rel="stylesheet" href="<%= request.getContextPath() %>/WebContent/css/style.css">
  <head>
    <title>test</title>
  </head>
  <body>
    ・・・
  </body>
</html>
```

`<%= request.getContextPath() %>`でコンテキストパスを取得。あとはWebContentからのパスを記述してあげればよいです。
コンテキストパスをEL式で取得することもできます。
やってることは先ほどと同じで、requestスコープから「getContetPath()」でコンテキストパスを取得する。
それをEL式で書いただけです。

```jsp:test.jsp（②EL式で取得する）
<%@ page contentType="text/html; charset=Windows-31J" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page isELIgnored="false" %>

<html>
  <link rel="stylesheet" href="${pageContext.request.contextPath}/WebContent/css/style.css">
  <head>
    <title>test</title>
  </head>
  <body>
    ・・・
  </body>
</html>
```


### 参考
[JSPでコンテキストパスを取得する方法](http://shukan-program.hatenablog.com/entry/20160330/1459306700)


以上。