本文导读
- 嵌入式 Servlet 容器的应用打成为可执行的 jar 包,优点是 简单、便携;缺点是 不支持 JSP、优化定制比较复杂(使用定制器、全局配置文件修改)
- Spring Boot 提供程序员可以使用外置的 Servlet 容器,本文以外置的 Tomcat 服务器为例,此时应用要打包成为 war 包。
- 简而言之,大概流程如下:
- 必须创建一个 war 包项目,利用 idea 创建好目录结构
- 将嵌入式的 Tomcat 指定为 provided;
- 必须编写一个 SpringBootServletInitializer 的子类,并调用 configure 方法
外置 Servlet 容器
新建项目
默认pom. xml 文件
- pom.xml 文件虽然是自动生成的,但是如果以后我们需要将 一个 嵌入式 Servlet 容器的 Spring Boot 项目直接转为外置的 Servlet 容器的项目书时,则需要自己手动将嵌入式的 Tomcat 进行如下处理:
<?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>www.wmx.com</groupId>
<artifactId>tiger2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>tiger2</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 此时 Tomcat 组件是单独提取出来的,而且 scope 是 provided
即用户自己已经提供环境,Spring Boot 可以不用管 Tomcat 了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<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>
ServletInitializer
- 这个文件虽然是自动生成的,但是如果以后我们需要将 一个 嵌入式 Servlet 容器的 Spring Boot 项目直接转为外置的 Servlet 容器的项目书时,则需要自己是手动写此文件,规则如下:
package com.example.demo;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 自定义类继承 SpringBootServletInitializer,自定义类名字可以自己随便取
* 作用是应用启动时,会自动执行 configure 方法,从而初始化 Spring Boot的 Servlet
*/
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
/**
* 传入SpringBoot应用的主程序
*/
return application.sources(Tiger2Application.class);
}
}
项目设置
- 从上面的默认结构中可以看到 “ src/main” 下面应该还有 webapp/WEB-INF/web.xml 没有自动生成,可以自己手动创建,也可以如下所示进行项目构建
项目部署
运行测试
MVC 流程测试
HelloController
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by Administrator on 2018/8/13 0013.
*/
@RequestMapping("hello")
@Controller
public class HelloController {
/**
* 做简单的页面跳转,同时携带一个数据过去
* @param model
* @return
*/
@GetMapping("success")
public String toSuccess(Model model) {
model.addAttribute("name", "华安");
/**跳转到此页面,注意千万不要引入 Thymeleaf,否则这里会进入 模板引擎目录下去的*/
return "/WEB-INF/pages/success.jsp";
}
}
success. jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功页面</title>
</head>
<body>
<h3>祝您成功:${name}</h3>
</body>
</html>
index. jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<base href="${pageContext.request.contextPath}/">
<title>主页</title>
</head>
<body>
<h2>欢迎来到主页</h2>
<a href="hello/success">成功之路</a>
</body>
</html>
运行测试
视图前后缀配置
#设置后台访问 jsp 视图路径前缀
spring.mvc.view.prefix=/WEB-INF/pages/
#设置后台访问 jsp 视图路径后缀
spring.mvc.view.suffix=.jsp
- 如同之前使用 Thymeleaf 魔板引擎时,同样可以配置 Thymeleaf 的模板路径,如下所示,不过 Thymeleaf 通常采用默认值:
spring.thymeleaf.prefix=classpath:/templates/ # Prefix that gets prepended to view names when building a URL.
spring.thymeleaf.suffix=.html # Suffix that gets appended to view names when building a URL.
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by Administrator on 2018/8/13 0013.
*/
@RequestMapping("hello")
@Controller
public class HelloController {
/**
* 做简单的页面跳转,同时携带一个数据过去
*
* @param model
* @return
*/
@GetMapping("success")
public String toSuccess(Model model) {
model.addAttribute("name", "华安");
/**跳转到此页面,注意千万不要引入 Thymeleaf,否则这里会进入 模板引擎目录下去的
* 当全局配置文件中配置视图的前后缀时,可以在此处省略前后缀*/
/*return "/WEB-INF/pages/success.jsp";*/
return "success";
}
}