天天看點

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

前端傳到Controller:

方法1

通過HttpServletRequest 。

寫法如下:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

HttpServletRequest類是Servlet中的類型,代表了一個Servlet請求。無論Post還是Get請求,都能通過這種方式擷取到。

可以通過Post方法,使用Postman工具模拟一個post請求,都可以将值傳到Controller。

這招可以獲得Cookie以及Session資料。

還可以通過注解@Autowired,将HttpServletRequest 自動的注入進來,不必擔心多線程下的并發問題,因為這裡HttpServletRequest注入的是一個AOP proxy ,而不是一個普通bean 。每次請求過來,都會檢查線程本地屬性,來擷取真正的Request對象。這些都是Spring自動配置的預設場景。

但是不推薦使用這個方法,因為這種方法破壞了對一個注入對象的正常了解,造成混亂。

代碼如下:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

方法2

使用路徑變量。

寫法如下:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

@RequestMapping中的{}中即為路徑變量,該變量還需要在方法的參數值出現,并且标記@PathVariable。

通過URL比對的方式既可以實作傳值,這是REST風格的一種傳值方式。

上面的例子,隻需輸入URL:

http://127.0.0.1:8080/WebApp/print/ZhangSan/30

controller接收到傳值,輸出:

name:ZhangSan

age:30

@RequestMapping("/print/{name}/{age}")是@RequestMapping(Value="/print/{name}/{age}")的縮寫形式,本質上是一樣的。

方法3

參數名比對的方式:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

或者:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

當請求傳入的參數名字和controller

中代碼的名字一樣的時候,兩種方式都可以,差別在于使用了注解@RequestParam,可以設定一個預設值來處理到null值。

@RequestParam(value=“name”, defaultValue=“John”)

但是如果請求中參數的名字和變量名不一樣的時候,就隻能使用@RequestParam注解。

Controller代碼隻能如下的寫法

@RequestMapping(value="/print")

public String PrintInfo(@RequestParam(“user_name”) String name, @RequestParam(“user_age”)int age) {

}

盡量使用@RequestParam注解,因為這樣可以清晰的知道該參數來自Request,可讀性高。

方法4

傳遞請求頭中的參數,需要用到@RequestHeader注解,該注解将Header中的值綁定到參數上,可以擷取一個,多個或者所有的參數。

例如

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

或者

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

方法5

使用到@RequestBody注解,得到整個RequestBody的資訊

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

@RequestBody可以将Json資料直接映射程Java對象。例如:

方法6

采用@ModelAttribute注解,命名比對,Post中的參數值和Model中的參數值一緻的話,會自動綁定到該值。

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

然後當Post的值中有name和age時,Controller中的user對象會自動附上值。

Controller傳遞到JSP

方法1

使用ModelAndView類,代碼如下:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

JSP頁面中:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

ModelAndView 初始化的時候,設定了view的名字,同時也把對象存起來,直接傳給view。簡單實用。

方法2

使用Model或者ModelMap

(Model是一個接口,ModelMap實作了Model接口)

該方法和ModelAndView方法相似,隻是Model和View分開來了,通過傳回一個String來找到View,Model是注入到Controller的一個參數,通過對它添加屬性,在jsp端讀取值。代碼如下:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式

JSP頁面中:

jsp session傳值_10年程式猿總結,Spring MVC 多種傳值方式