Springboot使用Jsp模板檢視開發web應用以及遇見的問題分析
最近有個springcloud專案,所有服務返回的資訊是json字串,現在需要對專案進行改造,使用jsp頁面返回服務呼叫結果。開發工具為Idea。
先來看一下專案結構(只展示涉及到的部分,如果你的專案中沒有對應資料夾,需要新建資料夾):
├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ └── controller │ │ │ └── HelloController.java │ │ │ └──DemoApplication │ │ │ │ │ ├── resources │ │ │ └── application.properties │ │ └── webapp │ │ │ └── WEB-INF │ │ │ │ └── jsp │ │ │ │ └── page │ │ │ │ └── page2.jsp │ │ │ │ └── page1.jsp │ │ │ └── index.jsp │ │ └──pom.xml
第一步:新建springboot專案
第二步:配置pom.xml檔案 新增以下依賴
<!-- Compile --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <!-- Provided --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!--jsp頁面使用jstl標籤--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--用於編譯jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> </dependency>
第三步:配置application.properties或application.yml檔案(這兩個檔案作用相同,只是裡面配置內容的格式有所差別)
在application.properties中加入以下配置:
#資源路徑開頭
spring.mvc.view.prefix=/WEB-INF/jsp/
#資源路徑結尾
spring.mvc.view.suffix=.jsp
第四步:配置控制器Controller
HelloController.java內容如下: 注:之前的專案使用@RestController返回json,現在需要使用@Controller,有關這兩個註解的區別,請點選這裡
package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * @Description: * @Author: Eric * @Date: 18/11/2 14:36 */ @Controller public class HelloController { //形式一 @RequestMapping(value={"/page1"}) public String method1(){ return "page1"; } @RequestMapping(value={"/page2"}) public String method2(){ return "page/page2"; } //形式二 @RequestMapping("/page1m2") public ModelAndView method3(){ // 頁面位置 /WEB-INF/jsp/page1.jsp ModelAndView mav = new ModelAndView("page1"); mav.addObject("page1","This is page1 ---ModelAndView"); return mav; } //形式三 @RequestMapping("/page1m3") public String method4(Model model){ // 頁面位置 /WEB-INF/jsp/page1.jsp model.addAttribute("page1","This is page1 ---Model "); return "page1"; } }
第五步:其他配置:
(1)springboot啟動類:DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication{
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
(2)jsp頁面: page1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${page1}
</body>
</html>
page2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${page2}
</body>
</html>
第六步:啟動專案 啟動方式一:
啟動方式二:
遇到的問題:
1、採用啟動方式一啟動專案後,後端服務向前臺返回jsp頁面或通過url訪問專案內靜態資源時,提示以下資訊: Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Nov 03 17:41:59 CST 2018 There was an unexpected error (type=Not Found, status=404). /WEB-INF/jsp/page1.jsp
解決方式:採用啟動方式二啟動專案,具體原因未知
2、後端服務向前臺返回jsp頁面或通過url訪問專案內靜態資源*時,提示以下資訊: Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Nov 03 17:41:59 CST 2018 There was an unexpected error (type=Not Found, status=404). No message available
解決方式:資源路徑錯誤,檢查資源路徑
3、訪問jsp頁面但是卻變成下載該頁面
解決方式:缺少jsp解析的jar包,參照第二步新增相關依賴即可