Springboot的static和templates區別

static和templates部分參考博客:https://blog.csdn.net/wangb_java/article/details/71775637html

熱部署參考博客:https://www.cnblogs.com/cx-code/p/8686453.html前端

 

SpringBoot裏面沒有咱們以前常規web開發的WebContent(WebApp),它只有src目錄java

在src/main/resources下面有兩個文件夾,static和templates   springboot默認  static中放靜態頁面,而templates中放動態頁面web

 

靜態頁面:spring

 這裏咱們直接在static放一個hello.html,而後直接輸入http://localhost:8080/hello.html便能成功訪問springboot

(好像能夠新建一個public文件夾,也能夠放靜態文件)服務器

也能夠經過controller跳轉:app

複製代碼
@Controller
public class HelloController {

    @RequestMapping("/Hi")
    public String sayHello() {
        return "hello.html";
    }
    
}
複製代碼

而後輸入http://localhost:8080/Hi就能夠成功訪問spring-boot

 

 

動態頁面:this

動態頁面須要先請求服務器,訪問後臺應用程序,而後再轉向到頁面,好比訪問JSP。spring boot建議不要使用JSP,默認使用Thymeleaf來作動態頁面。

如今pom中要添加Thymeleaf組件

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

 

咱們先在tempates文件夾中也新建一個hello.html但內容不一樣,而後先試一下直接訪問該頁面。輸入http://localhost:8080/hello.html:

結果顯然訪問的是靜態問價夾裏面的那個hello.html

 而後咱們如今再試一下用controller:

彷佛沒法訪問到hello.html了。。。這是由於:

靜態頁面的return默認是跳轉到/static/index.html,當在pom.xml中引入了thymeleaf組件,動態跳轉會覆蓋默認的靜態跳轉,默認就會跳轉到/templates/index.html,注意看二者return代碼也有區別,動態沒有html後綴。

 

也就是咱們要這樣改controller:

複製代碼
@Controller
public class HelloController {

    @RequestMapping("/Hi")
    public String sayHello() {
        return "hello";
    }
    
}
複製代碼

而後就能夠成功跳轉了

 

 

而後咱們看看返回一點數據在前端利用Thyemleaf來拿:

複製代碼
@Controller
public class HelloController {

    @RequestMapping("/Hi")
    public ModelAndView sayHello() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("hello");
        modelAndView.addObject("key", 12345);
        //System.out.println("test");
        return modelAndView;
    }
    
}
複製代碼
複製代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>

</head>
<body>
<h1>this is the hello.html in templates</h1>
<span th:text="${key}"></span>  
</body>
</html>
複製代碼

效果:

 

 

 

若是不想返回視圖,則用@RestController

 

 

若是用了靜態模板你還想返回static中的頁面,那麼就要用重定向:

若是在使用動態頁面時還想跳轉到/static/index.html,可使用重定向return "redirect:/index.html"。

return "redirect:hello.html";  

 

 

 

幾點tips:

1.攔截的url最後不要跟視圖重合,不然會拋出Circular view path異常,我以前就是

複製代碼
@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "hello.html";  
    }
    
}
複製代碼

 

而後就報錯說會有個循環視圖的錯誤,反正之後注意就是。

 

2.每次改完都要從新中止應用,再從新啓動很煩~但springboot有個叫熱部署的東西,就是說在項目中修改代碼能夠不用從新中止應用再從新啓動,能夠自動重啓,這裏咱們用的是devtools:

具體見博客:https://www.cnblogs.com/cx-code/p/8686453.html

相關文章
相關標籤/搜索