方法1

通过HttpServletRequest 。

写法如下:

controller怎么获取jsp的值10年法式猿总结Spring MVC 多种传值方法 Python

HttpServletRequest类是Servlet中的类型,代表了一个Servlet要求。
无论Post还是Get要求,都能通过这种办法获取到。

可以通过Post方法,利用Postman工具仿照一个post要求,都可以将值传到Controller。

这招可以得到Cookie以及Session数据。

还可以通过表明@Autowired,将HttpServletRequest 自动的注入进来,不必担心多线程下的并发问题,由于这里HttpServletRequest注入的是一个AOP proxy ,而不是一个普通bean 。
每次要求过来,都会检讨线程本地属性,来获取真正的Request工具。
这些都是Spring自动配置的默认场景。

但是不推举利用这个方法,由于这种方法毁坏了对一个注入工具的常规理解,造成混乱。

代码如下:

方法2

利用路径变量。

写法如下:

@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

参数名匹配的办法:

或者:

当要求传入的参数名字和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中的值绑定到参数上,可以获取一个,多个或者所有的参数。

例如

或者

方法5

利用到@RequestBody表明,得到全体RequestBody的信息

@RequestBody可以将Json数据直接映射程Java工具。
例如:

方法6

采取@ModelAttribute表明,命名匹配,Post中的参数值和Model中的参数值同等的话,会自动绑定到该值。

然后当Post的值中有name和age时,Controller中的user工具会自动附上值。

Controller通报到JSP

方法1

利用ModelAndView类,代码如下:

JSP页面中:

ModelAndView 初始化的时候,设置了view的名字,同时也把工具存起来,直接传给view。
大略实用。

方法2

利用Model或者ModelMap

(Model是一个接口,ModelMap实现了Model接口)

该方法和ModelAndView方法相似,只是Model和View分开来了,通过返回一个String来找到View,Model是注入到Controller的一个参数,通过对它添加属性,在jsp端读取值。
代码如下:

JSP页面中: