One IT Thing

IT業界で飯を食う為の学習系雑記

java

Spring&JSPの検証環境を速攻で作る

投稿日:2019年6月30日 更新日:

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

対象読者

  • JSP初学者の方。
  • MavenでSpring依存を逐一追加してWebプロジェクト雛型を作るのが面倒な方。

環境

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

執筆者:

関連記事

JavaとPerlでTCPソケット通信

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

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

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

Maven環境別ビルド時、プロファイルの違いでdependencyを変える

MavenのResourceFilteringを使い、production、staging、developmentとかで環境別ビルドしている時、ある環境ビルドの時だけ特定のライブラリを追加する、をmv …

JavaでRSA暗号を使う際にCRYPTREC暗号リストに足元をすくわれる可能性を回避する

標準的な暗号しか使わないケースでもJavaでRSAを使う時はBouncyCastleを入れておいた方が無難、という話です。 “ECB”という文字列がプログラム中にあると監査に引 …

SpringBootアプリにBootstrap4を追加(WebJars使用)

SpringBootにCSSやJSを追加する場合は概ね以下のパターンがあるんじゃないかと思います。(bowerはもう使わない方向で) CDNで外部から読み込む<script src=&#8221 …

 

shingo.7k24
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。