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 為換行