總謂浮雲能蔽日,長安不見使人愁。
JSP的程式在"前端"的瀏覽器執行,而Java的程式在"後端"的電腦執行,兩端的信息溝通肯定是必要的,在此我們作兩回來說明,這一篇甚短,期待可以放輕鬆。從 JSP 傳送信息給 Java 程式,可以透過路由參數,Spring Boot, Controller 可以接收參數,這在 Angular 中第7回(常中有變)中有作介紹,讀者如果忘了,可以回查一下。只是在 Anguler 中使用 :parameter
而在Spring Boot 中使用 { parameter }
, 首先在Controller中增加這個編程
@GetMapping("/hello/{name}")
public @ResponseBody String byRestfulGet(@PathVariable String name) {
System.out.println("**** input name is: "+name+" ***");
return "hello";
}
在此,我們直接把收到的信息(路由參數)顯示在畫面上(System.out.println()), 編程後,以瀏覽器,查詢 localhost:8080/hello/faust 在 Eclipse > Console 中將會出現
System.out.println() 將會列出信息。透過 {param1}&{param2} 可以同時得到兩個參數(@PathVariable String param1 以及 @PathVariable String param2),例如:
@GetMapping("/hello/{name}&{group}")
public @ResponseBody String byRestfulGet(@PathVariable String name, @PathVariable String group) {
System.out.println("**** input (name,group) is: ("+name+”, “+group+") ***");
return "hello";
}
我們也可以透過 JSP檔案來查詢。在使用MVC,要執行JSP檔時,不要加 @ResponseBody,否則就只會顯示字串值(“hello”), 而不是顯示檔案 hello.jsp, 在 HTML 中的語法如下:
<a id="byParameter" class="textLink" href="/hello/Mattrew">Mattrew</a>
如果不是 Restful, 詢問時,內容(URL)可能是
localhost:8080/hello?name=Mattrew
而不是 localhost:8080/hello/Mattrew
, 這時在Controller中的語法有些許不同,必須相應調整,如:
@GetMapping(value = "/hello")
public String byNonRestfulGet(@RequestParam(value = "name", required = true) String name) {
…
}
使用 @RequestParam 取代 @PathVariable
當然,也可以使用 Post,這樣可以一次傳遞更多的信息,也可以一次就把一個物件(例如一筆記錄)傳到後端。這個在後面 Angular – Spring Boot 連結的範例中會使用並介紹。