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
-,

執筆者:

関連記事

Stripe + Javaでオーソリ(与信の確保)を実装する

Stripeでチャリンチャリン、サービスを開発するエンジニアにとっては夢がありますよね。 例え自分で個人的に売るものが無かったとしても、Web決済システムを構築できるノウハウを持っておけば、公的な仕事 …

JavaコアAPI数の遷移をChart.jsでグラフ化してみる

chart.jsの試用を兼ねてJavaバージョンが上がるごとに標準搭載されているAPI数がどう変化しているか調べました。 目次1 調査結果2 グラフ化3 不要なAPIは外部化の傾向 調査結果 Orac …

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

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

JavaとPerlでTCPソケット通信

目次1 はじめに2 対象読者3 実装3.1 TCPサーバ(Perl)3.2 TCPクライアント(Java)3.3 実行4 まとめ はじめに 前回の続きです。One IT ThingJavaとPerlで …

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

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

 

shingo.nakanishi
 

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