Spring boot + SpringMVC Web + JSP(IDEA多模塊項目)


使用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>
pom.xl

application.properties配置

1 #springmvc配置
2 spring.mvc.view.prefix=/WEB-INF/jsp
3 spring.mvc.view.suffix=.jsp
application.properties

啟動類

 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 }
Program.java

內嵌Tomcat屬性配置

配置Servlet容器

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

配置Tomcat:

1 # 配置Tomcat編碼,默認為UTF-8
2 server.tomcat.uri-encoding=UTF-8
3 # 配置最大線程數
4 server.tomcat.max-threads=1000
application.properties

更為詳細的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 }
Program.java

這個類的作用與在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 }
IndexController.java
 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>
HelloWorld.jsp

 

第一種啟動方式,通過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官方是不推薦的,原因:

  1. tomcat只支持war的打包方式,不支持可執行的jar。
  2. Jetty 嵌套的容器不支持jsp
  3. Undertow
  4. 創建自定義error.jsp頁面不會覆蓋錯誤處理的默認視圖,而應該使用自定義錯誤頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM