嵌入式 Servlet 容器
應用打包成可執行的 jar 包。
- 優點:簡單,便捷
- 缺點:
- 默認不支持 JSP
- 優化定製比較複雜
- 使用定製器【ServerProperties、自定義 EmbeddedServletContainerCustomizer】
- 自己編寫嵌入式 Servlet 容器的創建工廠【EmbeddedServletContainerFactory】
外置 Servlet 容器
外部安裝 Tomcat — 應用以 war 包的方式打包。
創建項目
1、創建項目時,Packaging 選擇 War
2、按照下面圖片的方法,創建 webapp 文件夾
3、按照下面圖片的方法,創建 web.xml。其中 web.xml 的創建路徑的示例如下:
D:\IdeaProjects\springboot\springboot-04-web-jsp\src\main\webapp\WEB-INF\web.xml
配置項目
1、Edit Configurations…
2、+ --> Tomcat Server – Local
3、按照下面圖片的方法,配置 Tomcat Home (配置好 Tomcat Home 後,Tomcat base directory 會自動填好)
4、Deployment --> + --> Artifact
5、選擇 exploded 版本
6、配置 Application context
7、選擇剛剛配置好的 tomcat8,啓動。
開發項目
src\main\webapp\hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello JSP</h1>
<a href="abc">abc</a>
</body>
</html>
src\main\webapp\WEB-INF\success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>SUCCESS</h1>
<h3>${msg}</h3>
</body>
</html>
demo.yangxu.springboot.controller.HelloController
package demo.yangxu.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/abc")
public String hello(Model model){
model.addAttribute("msg","你好");
return "success";
}
}
application.properties
#指定視圖解析路徑前綴
spring.mvc.view.prefix=/WEB-INF/
#指定視圖解析後綴
spring.mvc.view.suffix=.jsp
#jsp修改不需要重啓
server.servlet.jsp.init-parameters.development=true
總結
1、創建一個 War 項目 (利用 IDEA 創建好目錄結構)
2、將嵌入式的 Tomcat 指定爲 provided (使用 Spring Initializr 會自動配置好)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3、編寫一個 SpringBootServletInitializer 的子類,並調用 configure 方法 (使用 Spring Initializr 會自動配置好)
package demo.yangxu.springboot;
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) {
//傳入SpringBoot應用的主程序
return application.sources(Springboot04WebJspApplication.class);
}
}
4、啓動服務器就可以使用。