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、サロゲートペアが混じった文字列をJavaのWebアプリでワードカウントする

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

StripeとJavaで単発Web決済を一通り流してみる

会社仕事でも個人ビジネスでも、商品やサービスの対価として利用者に課金方法を提供したい時があるかと思います。 最もメジャーな決済方法であるクレジットカードで課金してもらう仕組みを導入したいところですが、 …

CentOS7にOpenJDK11をインストール、alternatives後の再ログインでJAVA_HOMEも自動変更

OpenJDKはCentOS-Baseリポジトリのupdatesに登録されているので新規yumリポジトリ追加は不要です。 [root@spock tmp]# yumdb search from_rep …

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

目次1 IPAmj明朝フォントとは2 日本における漢字のコンピュータ表示課題3 サロゲートペアが対応策だが4 IVS(ideographic variation sequence) とは5 そこでIP …

JUnitコードの自動生成も出来る古の神Eclipseプラグイン「CodeProAnalytix」は今でも使える

デスマーチPM「各社のPG進捗が遅れていてユニットテストを書く暇が全く無いんですよ、なにかいい手は有りませんかね・・・? 因みに本プロジェクトはカバレッジ100%で請け負っています!(キリッ)」 何故 …

 

shingo.nakanishi
 

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