end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

spring boot for java で、jsp を利用

spring bootでは、テンプレートエンジンである thymeleaf を 推奨?しているようですが、身の回りに jsp があふれているので spring boot での jsp を利用法を試してみた。

詳細は以下で、とりあえず使えるようにした程度です。 jsp側でifや、for-loopは利用しない主義で、その辺りはjquery.templateにまかせています。

STEP1 - pom.xml の編集

spring-boot-starter-thymeleaf をコメントアウトし、 tomcat-embed-jasper を追加

<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
-->

STEP2 - jspファイル用ディレクトリの作成

「 src/main/webapp/WEB-INF/jsp/ 」を作成

STEP3 - application.properties の編集

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

STEP4 - jspファイルの作成

UserBaseInfo.jsp というファイル名にしています

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
</head>

<body>

ここは固定文字列。<br>
<br>
ここは変数を参照→ ${userAdmin.uid}

</body>
</html>

STEP5 - java コントローラの作成

package jp.end0tknr.stemdoc.ctrl;

import java.util.Map;
import javax.sql.DataSource;
import jp.end0tknr.stemdoc.objmodel.UserBase;
import jp.end0tknr.stemdoc.objmodel.UserDoc;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Controller
public class UserBaseInfo {
    private static final Logger logger =
            LoggerFactory.getLogger(UserBaseInfo.class);

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping(value="/UserBaseInfo/{userCode}")
    public String index (@PathVariable String userCode, Model model) {
        logger.info("start index()");

        DataSource dataSource = jdbcTemplate.getDataSource();
        
        UserBase userBase;
        Map<String, Object> userBaseOrg;
        try {
            userBase = new UserBase(dataSource,userCode);
            userBaseOrg = userBase.getAtris(); 
        } catch (Exception e1) {
            logger.error("fail new UserBase() for "+ userCode);
            return null;
        }
    // jspへ渡す変数の設定
        model.addAttribute("userBase", userBase);
        model.addAttribute("userBaseOrg", userBaseOrg);

        try {
            UserDoc userDoc = new UserDoc(dataSource, userCode);
            userDoc.testS3();

        } catch (Exception e) {
            e.printStackTrace();
        }
        
        logger.info("done index()");
        return "UserBaseInfo";  //これで、UserBaseInfo.jsp が呼ばれる
    }
}