springboot web開發之JSP使用(內置tomcat)

前言:

springboot官方推薦使用thymeleaf,並不推薦使用jsp,但有時候對jsp項目進行改造,使用jsp是無法避免的問題。下面就來看如何使用內置的tomcatjsp結合起來開發web。

項目結構:

SpringBoot版本:2.1.6.RELEASE

webapp文件夾用來存放jsp文件,靜態文件夾仍然放在resources文件夾下的static文件下。

pom文件中添加的依賴:

使用內置tomcat的時候,僅需要下圖所示的三個依賴。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--jsp頁面使用jstl標籤-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!--內部tomcat用於編譯jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        
</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

配置文件: 

application.properties 中需要配置端口號、jsp映射路徑的前綴和後綴。

server.port=8081

spring.mvc.view.prefix=/WEB-INF/jsp/

spring.mvc.view.suffix=.jsp

controller:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(HttpServletRequest request){
        String message = "這是一個jsp程序";
        request.setAttribute("message",message);
        return "success";
    }
}

jsp文件:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>Success</title>
</head>
<body>
<h1>Success</h1>
<h1>這是一個分界線======</h1>
<h2>message:${message}</h2>
</body>
</html>

運行springboot的啓動類,即可在瀏覽器中訪問http://localhost:8081/hello,併成功獲得jsp頁面的訪問。

問題一:當使用IDEA的項目模塊構建多模塊的項目時,會出現訪問jsp頁面,報404錯誤的問題。

主要的原因是無法找到正確的路徑,tomcat啓動時候的路徑是:{$user.dir}+/WEB-INF/*jsp

所以需要將啓動的Working directory設置爲模塊工作文件夾$MODULE_WORKING_DIR$,如下圖所示。

問題二:出現一個警告:java.io.FileNotFoundException: E:\repository\xalan\xalan\2.7.1\serializer.jar (系統找不到指定的文件。)

解決辦法:添加一段代碼到主啓動類的後面

@SpringBootApplication
public class IcefoxFrameWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(IcefoxFrameWebApplication.class, args);
    }

    //添加下面的代碼到自己的主啓動類中,能夠完美解決問題
    @Bean
    public TomcatServletWebServerFactory tomcatFactory(){
        return new TomcatServletWebServerFactory(){

            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };
    }


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章