開発者ドキュメント

Spring起動Hello Worldの例 – JSP


Spring Boot

Webアプリケーションの例です。埋め込みTomcat + JSPテンプレートを使用し、パッケージを実行可能WARファイルとして使用します。

使用される技術:

  1. 春のブート1.4.2.RELEASE

  2. Spring 4.3.4.RELEASE

  3. Tomcat埋め込み8.5.6

  4. Maven 3

  5. Java 8

1.プロジェクトディレクトリ

次のフォルダを手動で作成します。



プロジェクトの依存関係

Mavenの例。コメントは読んでください。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-boot-web-jsp</artifactId>
    <packaging>war</packaging>
    <name>Spring Boot Web JSP Example</name>
    <description>Spring Boot Web JSP Example</description>
    <url>/</url>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!-- This is a web application -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Tomcat embedded container-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- JSTL for JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!-- Need this to compile JSP -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Need this to compile JSP,
            tomcat-embed-jasper version is not working, no idea why -->
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.6.1</version>
            <scope>provided</scope>
        </dependency>

        <!-- Optional, test for static content, bootstrap CSS-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <!-- Package as an executable jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

プロジェクトの依存関係を表示する:

$ mvn dependency:tree
[INFO]Scanning for projects...[INFO][INFO]------------------------------------------------------------------------[INFO]Building Spring Boot Web JSP Example 1.0[INFO]------------------------------------------------------------------------[INFO][INFO]--- maven-dependency-plugin:2.10:tree (default-cli) @ spring-boot-web-jsp ---[INFO]org.springframework.boot:spring-boot-web-jsp:war:1.0[INFO]+- org.springframework.boot:spring-boot-starter-web:jar:1.4.2.RELEASE:compile[INFO]|  +- org.springframework.boot:spring-boot-starter:jar:1.4.2.RELEASE:compile[INFO]|  |  +- org.springframework.boot:spring-boot:jar:1.4.2.RELEASE:compile[INFO]|  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.2.RELEASE:compile[INFO]|  |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.2.RELEASE:compile[INFO]|  |  |  +- ch.qos.logback:logback-classic:jar:1.1.7:compile[INFO]|  |  |  |  +- ch.qos.logback:logback-core:jar:1.1.7:compile[INFO]|  |  |  |  \- org.slf4j:slf4j-api:jar:1.7.21:compile[INFO]|  |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile[INFO]|  |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile[INFO]|  |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile[INFO]|  |  +- org.springframework:spring-core:jar:4.3.4.RELEASE:compile[INFO]|  |  \- org.yaml:snakeyaml:jar:1.17:runtime[INFO]|  +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile[INFO]|  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile[INFO]|  |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile[INFO]|  |  \- com.fasterxml:classmate:jar:1.3.3:compile[INFO]|  +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.4:compile[INFO]|  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.4:compile[INFO]|  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.8.4:compile[INFO]|  +- org.springframework:spring-web:jar:4.3.4.RELEASE:compile[INFO]|  |  +- org.springframework:spring-aop:jar:4.3.4.RELEASE:compile[INFO]|  |  +- org.springframework:spring-beans:jar:4.3.4.RELEASE:compile[INFO]|  |  \- org.springframework:spring-context:jar:4.3.4.RELEASE:compile[INFO]|  \- org.springframework:spring-webmvc:jar:4.3.4.RELEASE:compile[INFO]|     \- org.springframework:spring-expression:jar:4.3.4.RELEASE:compile[INFO]+- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.2.RELEASE:provided[INFO]|  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.6:provided[INFO]|  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.6:provided[INFO]|  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.6:provided[INFO]+- javax.servlet:jstl:jar:1.2:compile[INFO]+- org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.6:provided[INFO]+- org.eclipse.jdt.core.compiler:ecj:jar:4.6.1:provided[INFO]\- org.webjars:bootstrap:jar:3.3.7:compile[INFO]   \- org.webjars:jquery:jar:1.11.1:compile[INFO]------------------------------------------------------------------------[INFO]BUILD SUCCESS[INFO]------------------------------------------------------------------------[INFO]Total time: 1.327 s[INFO]Finished at: 2016-11-28T16:57:00+08:00[INFO]Final Memory: 20M/309M[INFO]------------------------------------------------------------------------

3.春の春

3.1この

SpringBootServletInitializer`は従来のWARデプロイメントから

SpringApplication`を実行します

SpringBootWebApplication.java

package com.mkyong;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootWebApplication.class);
    }

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

}

3.2単純なSpringコントローラクラス。

WelcomeController.java

package com.mkyong;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class WelcomeController {

   //inject via application.properties
    @Value("${welcome.message:test}")
    private String message = "Hello World";

    @RequestMapping("/")
    public String welcome(Map<String, Object> model) {
        model.put("message", this.message);
        return "welcome";
    }

}

4. JSP +リソース+静的ファイル

4.1 JSPファイルの場合、 `src/main/webapp/WEB-INF/jsp/`に入れます。

src/main/webapp/WEB-INF/jsp/welcome.jsp

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<head>

    <!-- Access the bootstrap Css like this,
        Spring boot will handle the resource mapping automcatically -->
    <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css"/>

    <!--
    <spring:url value="/css/main.css" var="springCss"/>
    <link href="${springCss}" rel="stylesheet"/>
     -->
    <c:url value="/css/main.css" var="jstlCss"/>
    <link href="${jstlCss}" rel="stylesheet"/>

</head>
<body>

    <nav class="navbar navbar-inverse">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">Spring Boot</a>
            </div>
            <div id="navbar" class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Home</a></li>
                    <li><a href="#about">About</a></li>
                </ul>
            </div>
        </div>
    </nav>

    <div class="container">

        <div class="starter-template">
            <h1>Spring Boot Web JSP Example</h1>
            <h2>Message: ${message}</h2>
        </div>

    </div>

    <script type="text/javascript" src="webjars/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</body>

</html>

4.2 CSSやJavascriptのような静的ファイルの場合、 `/src/main/resources/static/`に入れます。

/src/main/resources/static/css/main.css

h1{
    color:#0000FF;
}

h2{
    color:#FF0000;
}

4.3プロパティファイルについては、 `/src/main/resources/`に入れます。

/src/main/resources/application.properties

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

welcome.message: Hello Mkyong

リソースマッピングは自動的に処理されます – この記事を読む –

Spring Boot staticコンテンツ

5.デモ

5.1 Spring起動Webアプリケーションを起動します。

project$ mvn spring-boot:run
//...
  .   ________          __            ____ __ __
/\\/______'__ ____ __ __(__)__ ____  ____ __ \ \ \ \
( ( )\______ | '__ | '__| | '__ \/__` | \ \ \ \
 \\/ ______)| |__)| | | | | || (__| |  ) ) ) )
  '  |________| .____|__| |__|__| |__\____, |//// =========|__|==============|______/=/__/__/__/ :: Spring Boot ::        (v1.4.2.RELEASE)

2016-11-28 17:25:24.809  INFO 4696 ---[          main]com.mkyong.SpringBootWebApplication      : Starting SpringBootWebApplication on MKYONG-WIN10 with PID 4696 (C:\spring-boot\spring-boot-examples\spring-boot-web-jsp\target\classes started by mkyong in C:\spring-boot\spring-boot-examples\spring-boot-web-jsp)
2016-11-28 17:25:24.812  INFO 4696 ---[          main]com.mkyong.SpringBootWebApplication      : No active profile set, falling back to default profiles: default
2016-11-28 17:25:24.861  INFO 4696 ---[          main]ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@69410cd3: startup date[Mon Nov 28 17:25:24 SGT 2016]; root of context hierarchy
2016-11-28 17:25:25.950  INFO 4696 ---[          main]s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-11-28 17:25:25.965  INFO 4696 ---[          main]o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-11-28 17:25:25.966  INFO 4696 ---[          main]org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.6
2016-11-28 17:25:26.171  INFO 4696 ---[ost-startStop-1]org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2016-11-28 17:25:26.180  INFO 4696 ---[ost-startStop-1]o.a.c.c.C.[Tomcat].[localhost].[/]      : Initializing Spring embedded WebApplicationContext
2016-11-28 17:25:26.180  INFO 4696 ---[ost-startStop-1]o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1322 ms
2016-11-28 17:25:26.304  INFO 4696 ---[ost-startStop-1]o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to[/]2016-11-28 17:25:26.312  INFO 4696 ---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to:[/** ]2016-11-28 17:25:26.313  INFO 4696 ---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to:[/** ]2016-11-28 17:25:26.313  INFO 4696 ---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to:[/** ]2016-11-28 17:25:26.314  INFO 4696 ---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to:[/** ]//...

2016-11-28 17:25:26.841  INFO 4696 ---[          main]s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-11-28 17:25:26.846  INFO 4696 ---[          main]com.mkyong.SpringBootWebApplication      : Started SpringBootWebApplication in 2.403 seconds (JVM running for 5.08)

5.2アクセス


http://localhost:8080



5.3 Mavenはプロジェクトを実行可能な

WAR`ファイルとしてパッケージ化します。 18M `WAR`ファイルが

target`フォルダに生成されます。

project$ mvn clean package

...

[INFO]Building war: ...\spring-boot-web-jsp\target\spring-boot-web-jsp-1.0.war

[INFO]

[INFO]--- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ spring-boot-web-jsp ---

[INFO]------------------------------------------------------------------------

[INFO]BUILD SUCCESS

[INFO]------------------------------------------------------------------------

Run It, access


http://localhost:8080


again.

プロジェクト$ java -jar target/spring-boot-web-jsp-1.0.war
  • JSPの制限事項**

    この埋め込みTomcat + JSPを実行するための実行可能な `jar`を作成することはできません
    ウェブの例は、Tomcatのハードコードされたファイルパターンのためです。これを読む

    Spring
    ブート – JSPの制限

===ソースコードをダウンロードする

それをダウンロードする –

spring-boot-web-jsp.zip
(8KB)

===参考文献

モバイルバージョンを終了