使用Springboot創建MVC Web項目
Spring Boot干貨系列:(五)開發Web應用之JSP篇
源代碼
https://github.com/tengj/SpringBootDemo/tree/master
先來看看整體的框架結構,只是多了webapp這個用來存放jsp的目錄,靜態資源還是放在resources的static下面。
引入依賴

1 <!--WEB支持--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 <exclusions> 6 <exclusion> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-tomcat</artifactId> 9 </exclusion> 10 </exclusions> 11 </dependency> 12 13 <!--jsp頁面使用jstl標簽--> 14 <dependency> 15 <groupId>javax.servlet</groupId> 16 <artifactId>jstl</artifactId> 17 </dependency> 18 19 <!--用於編譯jsp--> 20 <!-- Provided --> 21 <dependency> 22 <groupId>org.apache.tomcat.embed</groupId> 23 <artifactId>tomcat-embed-jasper</artifactId> 24 <scope>provided</scope> 25 </dependency>
application.properties配置

1 #springmvc配置 2 spring.mvc.view.prefix=/WEB-INF/jsp 3 spring.mvc.view.suffix=.jsp
啟動類

1 package tb.view.sbmsm.easyuidemo; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.boot.builder.SpringApplicationBuilder; 7 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 8 9 @SpringBootApplication(scanBasePackages = {"tb.view.sbmsm.easyuidemo"}) 10 @MapperScan(basePackages = "tb.db.mysql.shopcart.mybatis") 11 public class Program extends SpringBootServletInitializer { 12 13 /** 14 * 重寫方法 Ctrl+O 15 * @param builder 16 * @return 17 */ 18 @Override 19 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 20 return builder.sources(Program.class); 21 } 22 23 public static void main(String[] args) { 24 SpringApplication.run(Program.class, args); 25 } 26 27 }
內嵌Tomcat屬性配置
配置Servlet容器:

1 #配置程序端口,默認為8080 2 server.port= 8080 3 #用戶繪畫session過期時間,以秒為單位 4 server.servlet.session.timeout=4880 5 # 配置默認訪問路徑,默認為/ 6 server.servlet.context-path=/
配置Tomcat:

1 # 配置Tomcat編碼,默認為UTF-8 2 server.tomcat.uri-encoding=UTF-8 3 # 配置最大線程數 4 server.tomcat.max-threads=1000
更為詳細的Servlet容器配置以及Tomcat配置,可以前往博主之前文章查看:Spring Boot干貨系列:常用屬性匯總
外部的Tomcat服務器部署war包
Spring Boot項目需要部署在外部容器中的時候,Spring Boot導出的war包如果直接在Tomcat的部署會報錯,不信你可以試試看。
需要做到下面兩點修改才可以:
- 繼承SpringBootServletInitializer
外部容器部署的話,就不能依賴於Application的main函數了,而是要以類似於web.xml文件配置的方式來啟動Spring應用上下文,此時我們需要在啟動類中繼承SpringBootServletInitializer並實現configure方法:

1 public class Program extends SpringBootServletInitializer { 2 3 /** 4 * 重寫方法 Ctrl+O 5 * @param builder 6 * @return 7 */ 8 @Override 9 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 10 return builder.sources(Program.class); 11 } 12 13 public static void main(String[] args) { 14 SpringApplication.run(Program.class, args); 15 } 16 17 }
這個類的作用與在web.xml中配置負責初始化Spring應用上下文的監聽器作用類似,只不過在這里不需要編寫額外的XML文件了。

1 package tb.view.sbmsm.easyuidemo.controller; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMethod; 8 import org.springframework.web.servlet.ModelAndView; 9 import tb.db.mysql.shopcart.mybatis.mapper.Account_userMapper; 10 import tb.db.mysql.shopcart.mybatis.pojo.Account_user; 11 12 import java.util.HashMap; 13 import java.util.Map; 14 15 /** 16 * <pre> 17 * 18 * </pre> 19 * 20 * @author wangyunpeng 21 * @date 2020/1/15 12:36 22 */ 23 @Controller 24 @RequestMapping(IndexController.CONTROLLER_NAME) 25 public class IndexController extends BaseController { 26 27 public static final String CONTROLLER_NAME = "/Index"; 28 29 @Override 30 protected String getViewName(String viewName) { 31 return super.getFullViewName(CONTROLLER_NAME, viewName); 32 } 33 34 @Value("${WEB_SITE_NAME}") 35 private String WEB_SITE_NAME; 36 37 @Autowired 38 public Account_userMapper account_userMapper; 39 40 @RequestMapping(value = "HelloWorld", method = RequestMethod.GET) 41 public ModelAndView helloWorld() { 42 Map<String, Object> map = new HashMap<String, Object>(); 43 Account_user accountUser = this.account_userMapper.selectByPrimaryKey(7); 44 map.put("WEB_SITE_NAME", WEB_SITE_NAME); 45 map.put("Email",accountUser.getEmail()); 46 map.put("UserDir", System.getProperty("user.dir")); 47 String viewName = this.getViewName("HelloWorld"); 48 return new ModelAndView(viewName, map); 49 } 50 51 }

1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator 4 Date: 2020/1/15 5 Time: 17:33 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <html> 10 <head> 11 <title>${WEB_SITE_NAME}</title> 12 </head> 13 <body> 14 <h1>Hello World</h1> 15 <h2>${Email}</h2> 16 <hr/> 17 <h3>${UserDir}</h3> 18 </body> 19 </html>
第一種啟動方式,通過IDEA啟動
SpringBoot Whitelabel Error Page
springboot 在idea多模塊下 子模塊的web項目用內置tomcat啟動訪問jsp報404
因為是多模塊方式創建Module,所以需要設置Working direcotry目錄為Module的Working Dir。
第二種方式通過CMD運行
java -jar easyuidemo-1.0-SNAPSHOT.war
運行目錄已經變成target目錄下面了
JSP技術Spring Boot官方是不推薦的,原因:
- tomcat只支持war的打包方式,不支持可執行的jar。
- Jetty 嵌套的容器不支持jsp
- Undertow
- 創建自定義error.jsp頁面不會覆蓋錯誤處理的默認視圖,而應該使用自定義錯誤頁面