码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Boot 2.0 使用模板引擎返回JSP页面实战

时间:2018-04-06 12:20:19      阅读:1292      评论:0      收藏:0      [点我收藏+]

标签:model   false   lan   包装   如何   lap   port   开发工具   als   

1. 模板引擎JSP的限制

在开始之前呢,我觉得我们有必要先去了解下 Spring Boot 2.0 官方文档中提到的如下内容:

模板引擎

除了REST Web服务之外,还可以使用Spring MVC来服务动态HTML内容。Spring MVC支持多种模板技术,包括Thymeleaf,FreeMarker,和JSPs。此外,许多其他模板引擎包括它们自己的Spring MVC集成。

Spring Boot 包括以下模板引擎的自动配置支持:

如果可能的话,JSPs应该是可以避免的。使用嵌入servlet容器时,有几个已知的限制。

当您使用默认配置的这些模板引擎时,您的模板会自动从 src/main/resources/templates 中提取。

根据您运行应用程序的方式,IntelliJ IDEA以不同的方式排序 classpath。 使用主方法在IDE中运行应用程序会导致与使用Maven或Gradle或从其打包的jar运行应用程序时不同的顺序。 这可能会导致Spring Boot无法在classpath中找到模板。 如果您遇到此问题,可以在IDE中重新排序类路径,以便首先放置模块的类和资源。

或者,您可以配置模板前缀以搜索类路径中的每个模板目录,如下所示:classpath *:/ templates /。

 那么由哪些限制呢?

JSP限制

当运行使用嵌入的servlet容器的Spring Boot应用程序(并打包为可执行文件)时,JSP支持中存在一些限制。

  • 有了Tomcat,如果你使用war包装,它应该可以工作。 也就是说,一个可执行的war工作,也可以部署到一个标准的容器(不限于,但包括Tomcat)。 由于Tomcat中的硬编码文件模式,可执行jar无法使用。
  • 使用Jetty,如果您使用war包装,它应该可以工作。 也就是说,一个可执行的jar有效,并且也可以部署到任何标准容器。
  • Undertow不支持JSP。
  • 创建自定义error.jsp页面不会覆盖错误处理的默认视图。 应该使用自定义错误页面。

有一个JSP示例,以便您可以看到如何设置。

 2. 开始实战

尽管官网文档中提到使用JSP有一些限制,但是往往我们还是比较习惯想用下JSP,那么如何操作呢?且跟我一步一步来操作。

  • 开发工具:Intellij Idea 
  • JDK 版本:9.0.1
  • Maven 版本:3.5.2

2.1 创建一个项目

技术分享图片

2.2 选择Spring Initizlizr 帮助我们快速创建Spring Boot 应用

技术分享图片

 2.3 填写如下项目配置信息

技术分享图片

Tips: 注意这里我们使用War 而不是Jar

2.4 勾选web模板支持

技术分享图片

2.5 选择项目保存路径

技术分享图片

2.6 创建成功后你应该能看到这样的项目结构

技术分享图片

2.7 配置JPS页面匹配前后缀路径

application.properties

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

2.8 必须手动创建 webapp/WEB-INF 文件夹 

文件夹目录结构如图所示

技术分享图片

Tips:这里注意下jsp路径必须和刚才配置的路径保持一致

2.9 修改index.jsp

<%--
  Created by IntelliJ IDEA.
  User: fairy
  Date: 4/6/2018
  Time: 9:56 AM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  Hello World,Spring Boot 2.0 JSP Sample
</body>
</html>

 

2.10 必须实现SpringBootServletInitializer 接口并且重写方法 

我们打开ServletInitializer.java可以看到IDE已经自动为我们实现了这个接口并且重写了这个方法

ServletInitializer.java

package com.xingyun.springbootwebjspsample;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

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

}

 2.11创建controller 文件夹并且创建HomeController.java

技术分享图片

HomeController.java

package com.xingyun.springbootwebjspsample.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(){
        return "index";
    }
}

 Tips: 这里注意下,我们使用JSP页面的话将不能使用@RestController注解,必须使用@Controller 才得行

2.12 配置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>

    <groupId>com.xingyun</groupId>
    <artifactId>spring-boot-web-jsp-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>spring-boot-web-jsp-sample</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- Web 项目所以添加Spring MVC Web模块支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--jsp页面使用jstl标签-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!--Provided  start-->
        <!--War包部署到外部的Tomcat中已经包含了这些,
        所以需要添加以下依赖
        否则会和内嵌的Tomcat 容器发生冲突
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--用于编译jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--Provided  End-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
View Code

Tips:

我们需要添加web模板支持,所以要添加spring-boot-starter-web

由于我们在JSP页面需要使用JSP标签库,所以要加入JSTL标签库依赖

War包部署到外部的Tomcat中已经包含了这些,所以需要添加以下依赖

spring-boot-starter-tomcat 和 tomcat-embed-jasper 

否则会和内嵌的Tomcat 容器发生冲突,并且<scope>provided</scope>不能修改也不能注释掉

关于这个插件如果需要做单元测试,请添加,如果不做单元测试也可以不添加

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>

2.13 部署war 包

到了最后这一步,千万不要急着Run As Java Application

2.13.1 点击“Edit configurations”

技术分享图片

2.13.2 点击‘+’号,选择tomcat Server ---> Local 

技术分享图片

2.13.3 编辑名称,点击Fix --------> Apply-------> OK

技术分享图片

然后点击启动按钮

技术分享图片

程序会自动打开:http://localhost:8080

技术分享图片

3. 本博文项目案例源码

https://github.com/geekxingyun/JavaEE-Framework-Sample/tree/master/SpringBoot-Sample/spring-boot-web-jsp-sample

4. 可能出现的问题

在初次学习时候可能会出现一些常见的异常,可以移步去我的CSDN博客看这篇文章

细数Spring Boot 中容易中招的那些坑  

https://blog.csdn.net/hadues/article/details/79334355

@ConfigurationProperties(prefix = "xxx")的值取出为空

 https://blog.csdn.net/hadues/article/details/79123645

真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException  

https://blog.csdn.net/hadues/article/details/79188793

 参考文章:https://www.jianshu.com/p/c544e9a9e96f

Spring Boot 2.0 使用模板引擎返回JSP页面实战

标签:model   false   lan   包装   如何   lap   port   开发工具   als   

原文地址:https://www.cnblogs.com/xingyunblog/p/8727079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!