1. 程式人生 > >Spring Boot の JSP模板配置+WEB-INF下靜態資源訪問

Spring Boot の JSP模板配置+WEB-INF下靜態資源訪問

1-建立一個SpringBoot的MAVEN工程

點選【next】


點選【next】


點選【next】


點選【finish】,那麼一個springboot的maven的web工程就建立成功了。

2-匯入Maven依賴

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <!-- father -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
  </parent>

  <dependencies>
    <!--是web專案
    spring-boot的web啟動的jar包-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- jsp 檢視支援-->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <version>9.0.6</version>
    </dependency>

    <!-- 測試-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>


  <!-- 熱部署 -->
  <!-- optional=true,依賴不會傳遞,該專案依賴devtools;之後依賴myboot專案的專案如果想要使用devtools,需要重新引入 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
  </dependency>

3-建立jsp資源目錄

新增好依賴包過後,建立如下所示目錄,並將jquery-1.10.2.min.js檔案和icon.jpg圖片分別放入js和img下。


4-寫程式碼

4.1-刪除預設生成的啟動類

4.2-建立Application.class啟動類

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * Created by wangbiao-019 on 2018/3/21.
 */
@SpringBootApplication
@ServletComponentScan   //掃描Servlet
//@MapperScan("com.dgcpic.mvn.*.dao.mapper")//這裡mapper是你的mybatis的mapper目錄。
public class Application extends SpringBootServletInitializer{
    //入口
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4.3-定製SpringBoot的全域性MVC特性

有兩種寫法,分別是實現WebMvcConfigurer介面和繼承WebMvcConfigurerAdaper類

由於SpringBoot是2.0.0.RELEASE版本,WebMvcConfigurerAdaper被劃橫線了,所以用第一種方式:

package com.example.demo;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Created by wangbiao-019 on 2018/3/21.
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    /*資源處理器*/
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/img/**").addResourceLocations("/WEB-INF/"+"/img/");
       registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/"+"/static/");
    }

}

4.4-配置application.properties檔案

#project
server.address=127.0.0.1
server.port=8080
server.servlet.path=/jspmodeldemo

#springMVC
#如果僅僅是訪問靜態資源的話,下面兩個可以不要,它的作用是用於MVC的頁面跳轉
spring.mvc.view.prefix=/WEB-INF/page/
spring.mvc.view.suffix=.jsp

5-驗證結果

-啟動SpringBoot內建Tomcat

-在瀏覽器端訪問地址: 

http://localhost:8080/jspmodeldemo/img/icon.jpg

http://localhost:8080/jspmodeldemo/static/js/jquery-1.10.2.min.js

可分別得到圖片和js檔案內容。

6-拓展

url訪問控制:也許在應用中我們一不小心讓人知道了某個頁面的地址,我們也沒在有關那個頁面的資料互動的後臺控制器做校驗,這個時候我們就想著只要是他訪問了這個頁面,不管你是誰都給你跳到另外一個頁面。

這裡我做的是隻要你訪問的是以 .do結尾的地址都給跳轉至login.jsp頁面。

新增熱部署依賴,前端改變程式碼,頁面立馬變,無快取:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

在MyMvcConfig.class類中新增如下程式碼:

private final static String URI_VIEWCONTROLLER_PREFIX = "/**/*";
    private final static String URI_VIEWCONTROLLER_SUFFIX = ".do";
    private final static String URI_VIEWCONTROLLER_REDIRECT = "login";
 
@Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //所有以.do結尾的url都重定向到login頁面
        //將 /**/*.do重定向到 /**/login
        registry.addRedirectViewController(URI_VIEWCONTROLLER_PREFIX + URI_VIEWCONTROLLER_SUFFIX, URI_VIEWCONTROLLER_REDIRECT);
        //將 /**/login	MVC	到 /WEB-INF/page/login.jsp
        registry.addViewController("/**/login").setViewName("login");
    }

login.jsp頁面程式碼如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <base href="/jspmodeldemo/"/>
    <title>login</title>

    <script src="static/js/jquery-1.10.2.min.js"charset="utf-8"></script>
</head>
<body>
    <h2>LOGIN PAGE</h2>
    <img src="img/icon.jpg" />
</body>
</html>

隨機訪問:


mvc 到:


開啟瀏覽器的除錯模式 ->F12,此時可以看到 伺服器的jquery和圖片靜態資源也拿下來了。

測試一下jquery-1.10.2.min.js

在瀏覽器控制檯輸入:

$.ajax({
	url:'fsafdsfas.do',
	type:'GET',
	dataType:'html',
	success:function(data){
		console.info(data);
	},
	error:function(error){
		console.info(error);
	}
});

得到如下圖所示結果,說明正確:


注意:1、 <base href="/jspmodeldemo/" /> 標籤的使用

該標籤為頁面上的所有連結規定預設地址或預設目標,也就說他是一個基本URL,當前頁面訪問資源時的路徑為 <base> 標籤的 【href值】 + 資源的【src值】,若無該標籤,那麼訪問地址 http://localhost:8080/jspmodeldemo/**/*.do 將得不到想要的結果,此時只能訪問http://localhost:8080/jspmodeldemo/*.do 才訪問正確;

        2、建立的webapp資料夾要變成 Resource Folders;

        3、瀏覽器控制檯 shift + Enter 為換行