1. 程式人生 > >java輪子-使用springboot做一個帶介面的web程式

java輪子-使用springboot做一個帶介面的web程式

上次是按照官方文件簡單的建立了一個spring boot 的專案,然而web工程不可避免的需要介面這種東西。所以這次,我們就來使用spring boot做一款帶介面的web程式。查了一些資料,首先spring boot官方是已經不推薦使用jsp來做頁面了,它們推薦以下幾種引擎來進行頁面的開發,它們是Thymeleaf,FreeMarker,Velocity,Groovy,Mustache。本萌新只見過FreeMarker,Velocity,尤其是FreeMarker,以前的公司就用的這個。據說這東西可以靜態化頁面,提高效率。目前得到了廣泛的應用,很多HTML和jsp頁面最後也要使用FreeMarker來靜態化,從而提高效率,而且我也想學一學,那麼,這次的例子就用FreeMarker來演示了。。。
首先,新建一個spring boot 專案,可以參見上一篇博文,比較簡單。然後在pom檔案中新增FreeMarker的依賴。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
    然後,啟動類如下所示:
package com.xxjz;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework
.context.annotation.ComponentScan; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @SpringBootApplication public class RunMain { public static void main(String[] args) throws Exception { SpringApplication.run(RunMain.class, args); } }

然後,就該寫頁面了。我們在src/main/resources下新建一個資料夾並命名為/templates,在這個資料夾下新建一個頁面檔案xxx.ftl。由於第一次,就寫個比較簡單的helloworld就好。

<!DOCTYPE html>
<html>
<body>
Hello,world
</body>
</html>

好了,至此,頁面新增完畢。
接下來,我們需要寫一個controller來將這個頁面渲染出來,就跟你再springMVC中做的一樣。好了,首先在原始檔中建一個controller,然後在這個controller中渲染頁面。

package com.xxjz.upload;


import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoadUploadFilePageController {

    @GetMapping("/")
    String home() {
        return "uploadpic";
    }
}

好了,程式碼全部寫完。我們可以看到,這個controller添加了@controller註解,並指明瞭訪問路徑為“/”,這代表了直接訪問專案根目錄就可以訪問到這個controller。最後返回對應模板檔案的檔名。現在的目錄結構如下所示。

這裡寫圖片描述

需要注意這麼兩個坑,如果你是直接用的官網的helloworld,上直接新增程式碼,很可能一執行就報錯404。那是由於啟動類的註解配置有誤,spring掃描不到對應的類。helloworld中啟動類的註解配置是

@Controller
@EnableAutoConfiguration

而spring boot 提供了一個註解@SpringBootApplication,該註解 = (預設屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan,需要配置成這個註解,或者將這三個註解補全。

  1. @Configuration:提到@Configuration就要提到他的搭檔@Bean。使用這兩個註解就可以建立一個簡單的spring配置類,可以用來替代相應的xml配置檔案。
  2. @EnableAutoConfiguration:能夠自動配置spring的上下文,試圖猜測和配置你想要的bean類,通常會自動根據你的類路徑和你的bean定義自動配置。
  3. @ComponentScan:會自動掃描指定包下的全部標有@Component的類,並註冊成bean,當然包括@Component下的子註解@Service,@Repository,@Controller。

第二個坑,寫程式碼一般會習慣將不同的類分成不同的包,所以有人會將啟動類單獨放在一個包中,將controller,service,dao分別放在各自的包中。但是spring boot中,必須將啟動類放在root包中,也就是,所有其他包都必須放在啟動類所在包的子包下,spring boot才能掃描到。所以,如果不是這樣,你只能得到一個錯誤頁面。。。。
好了,現在,我們就可以啟動spring boot了。
啟動,然後在瀏覽器輸入http://localhost:8080/
就可以得到如下頁面:
這裡寫圖片描述

之後,我們可以給這個簡單介面加點兒東西,首先,在src/main/resources中建立一個配置檔案application.properties,在這個配置檔案中輸入如下配置資訊:

application.message: Hello, Andy
aaa: hello aaa
bbb: hello bbb

然後,我們稍微改一下,ftl檔案,用來顯示配置檔案中的資訊。
<!DOCTYPE html>

<html lang="en">

<body>
    eeeee                 </br>
    Message: ${message}   </br>
    aaa: ${aaa}           </br>
    bbb: ${bbb}           </br>
</body>

</html>

其中,${message}表示會取請求中的引數message的值,直接顯示在頁面上。之後我們改一下controller檔案,用來讀取配置檔案以及返回資料到頁面。

package com.xxjz.upload;


import java.util.Date;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoadUploadFilePageController {


    @Value("${application.message:Hello World}")
    private String message ;
    @Value("${aaa:aaa}")
    private String aaa ;
    @Value("${bbb:bbb}")
    private String bbb;

    @GetMapping("/")
    public String home(Map<String, Object> model) {
        model.put("time", new Date());
        model.put("message", this.message);
        model.put("aaa", this.aaa);
        model.put("bbb", this.bbb);
        return "uploadpic";
    }

}
spring boot 讀取配置檔案比較容易,使用該註解就可實現。
@Value("${application.message:Hello World}")
    private String message ;

其中application.message為配置檔案中定義的變數名,冒號後面的值為預設值,代表如果配置檔案中沒有改值時,就使用冒號後面的值作為application.message的值,下面的變量表示將配置檔案中的值讀出來後就賦值給該值,在下面的檔案中使用。
好了,修改完畢,重新啟動,在瀏覽器中輸入

http://localhost:8080/
    出現如下介面:

這裡寫圖片描述

可以看到,配置檔案中的資訊顯示在了介面中,配置檔案中沒有配置的資訊顯示了預設值。
本例,大家可以去我的guthub上進行下載,下載地址如下:
https://github.com/zdxxinlang/FastDfsUtil.git
順便吐槽一句,csdn這個富文字編輯器真是太難了,寧可用記事本都不想用它,能不能改一改,csdn不是技術大牛麼?