1. 程式人生 > >Springboot使用Jsp模板檢視開發web應用(含問題分析)

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";
    }
}

第五步:設定webapp目錄為web資原始檔目錄:
ctrl+alt+shift+s開啟下面內容,按流程操作
在這裡插入圖片描述

第六步:配置springboot啟動類和jsp頁面
(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

解決方式:
檢查資源路徑,如果發現資源路徑錯誤,則修改訪問路徑;
如果資源路徑正確,則採用啟動方式二啟動專案,具體原因未知,推測與Idea有關。

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

解決方式:
檢查資源路徑,如果發現資源路徑錯誤,則修改訪問路徑;
如果資源路徑正確,檢查application.properties檔案是否配置了spring.mvc.view.suffix=.jsp

3、訪問jsp頁面但是卻變成下載該頁面

解決方式:
缺少jsp解析的jar包,參照第二步新增相關依賴即可