iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
1
Modern Web

美麗的邂逅-與安室....伊春系列 第 18

從地方到中央 (JSP to Controller)

  • 分享至 

  • xImage
  •  
總謂浮雲能蔽日,長安不見使人愁。
  • @PathVariable
  • @ResponseBody
  • @RequestParam
  • @ResponseBody

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 中將會出現
https://ithelp.ithome.com.tw/upload/images/20191003/20120951mY0Yg7mD66.png
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 連結的範例中會使用並介紹。


上一篇
三位一體 (Spring MVC)
下一篇
從中央到地方 (Controller to JSP)
系列文
美麗的邂逅-與安室....伊春30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言