java

Spring&JSPの検証環境を作る

投稿日:2019年6月30日

2019年現在、オワコン風潮の強いJSPですが使っているプロジェクトもまだまだあり、枯れた技術を好む官公庁系のプロジェクトでは根強いシェアを誇っています。実装検証をする為に環境を作る機会があったりするのでSpring BootでJSPを使う手順を備忘しておきます。

環境

  • pleiades-2019-03-java-win-64bit-jre_20190508
  • Win10

手順

SpringBootプロジェクトを作成

Eclipseの「ファイル」→「新規」→「その他」。

「Spring スターター・プロジェクト」を選択して次へ。

「名前」に適当なものを入れて次へ。

依存するJarを選択します。左側のツリーから「Web」を開き「Spring Web Starter」にチェックを入れておきます。これにチェックを入れると

org.springframework.boot.spring-boot-starter-web

がdependencyに追加されて@RequestMappingなどのWebで使用するクラスにclasspathが通るようになります。

忘れても後からpom.xmlで「spring-boot-starter」を「spring-boot-starter-web」に変更すればオッケーです。

何故かmaven-jar-plugin最新の3.1.2はEclipse上のpom.xmlエディタでエラーを吐くので、パッチバージョンを一つ下げておきます。

    <properties>
        <java.version>1.8</java.version>
        <!-- 追加 -->
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>

src/main/java/パッケージには「プロジェクト名Application.java」が作られていてこれを実行するとWebサーバ起動する状態です。このクラスはSpringBootアプリ起動を行うものなので今回は弄りません。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootJspApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootJspApplication.class, args);
	}
}

コンテキストルートをハンドルするコントローラを作成

コンテキストルートにアクセスされるとlogin.jspを返却するコントローラを作っておきます。

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class DemoController {

	@RequestMapping(path = "/", method = { RequestMethod.GET })
	public String input(Model model) {

		return "login";
	}
}

コントローラからフォワードされるテスト用JSPを作成

JSP表示確認用にsrc/main/webapp/WEB-INF/view/login.jspを作っておきます。

JSPが正常に表示されるかどうか確かめるだけなので単純なものにしておきます。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SpringBoot + JSP</title>
</head>
<body>
    <% out.println(new java.util.Date()); %>
</body>
</html>

SpringBootのフォワード設定にJSPを追加

SpringBoot設定ファイルのsrc/main/resources/application.propertiesに以下を追加して、フォワード表示するJSPの在りかを教えておきます。これを書いておくことでSpringのDispatcherServletは、

/WEB-INF/view/{@RequestMappingメソッドが返却した文字列} + .jsp

にHTTPリクエストをフォワードしてくれるようになります。

spring.mvc.view.prefix= /WEB-INF/view/
spring.mvc.view.suffix= .jsp

SpringBoot環境でJSPコンパイル出来るようにしておく

SpringBootはThymeleaf推しのせいかデフォルトでJSPコンパイルが出来ません。サーバ起動してアクセスしても以下のようなエラーが発生してlogin.jspを表示してくれません。

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Jun 27 18:27:29 JST 2019
There was an unexpected error (type=Not Found, status=404).
No message available

JSPをコンパイルしてHTML返却出来るように組み込みTomcatのJasper(JSPコンパイラ)をpom.xmlのdependencyに追加します。

Maven Repositoryで探すと9.0.21が現時点(2019/06)の最新のようです。

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>9.0.21</version>
        </dependency>

動作確認

プロジェクトを右クリック → 実行 → Spring Boot アプリケーションでHTTPサーバを起動して、ブラウザからhttp://localhost:8080にアクセスします。

<% out.println(new java.util.Date()); %>

がコンパイルされて現在時刻が表示されていればSpring + JSP環境構築完了です。

まとめ

SpringBootは面倒なSpringの依存関係を纏めて親POMで提供してくれて雛型を作る際に便利ですね。

作った雛型はwarにしてSpringBootで起動せずにAPサーバにデプロイすることも出来ます。

-java
-,

執筆者:

関連記事

IVS対応フォント「IPAmj明朝」で使えるフォントをWeb上に一覧表示してみる(3)

前回の続きです。One IT ThingIVS対応フォント「IPAmj明朝」で使えるフォントをWeb上に一覧表示してみる(2)https://one-it-thing.com/2111前回の続きです。 …

Jerseyで開発したRESTで任意リファラからのCORSアクセスを許可する

package jp.hoge.filter; import java.util.Properties; import javax.servlet.http.HttpServletRequest; i …

Javascript(暗号化JSライブラリ「Forge」)とp12ファイルで署名値を作成、Javaで検証する

前回、送信データの改ざんを検知する為、簡易的なセキュリティトークンであるPKCS#12形式のファイルを作成しました。 One IT Thing  10 Pockets開発用のPKCS#12フ …

IVS、サロゲートペアが混じった文字列をJavaのWebアプリでワードカウントする

(結論:java.text.BreakIteratorは「サロゲートペア文字 + IVS」の8バイト文字も1文字としてカウントしてくれる) 先日、IPAmj明朝フォントを使ってIVSを含んだUnico …

Maven依存ライブラリのライセンスサマリを出す

Mavenで依存しているライブラリのライセンス累計を作成します。下記のように「ライセンス名 ライブラリ個数」の行がライセンス種別数分作られるイメージ。 BSD 4ASL2 43MIT 5 開発中のクロ …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。