上面学习了如何通过url地址栏传参数给controller,那么接下来,学习下controller如何将传递给view。
1、在WelcomController类中的创建如下方法:
@RequestMapping(value={"/","/welcom"})
public String welcome(@RequestParam("username") String username,Map<String ,String> context){
context.put("username", username);
System.out.println("接收传入的参数 username: "+username);
return "welcome";
}
此时项目目录如图:
2、在jsp页面输入如下代码:
3、在地址栏中输入请求路径及参数,得到结果,如下图所示:
从操作实例上不难看出,直接使用map就可以传值。但是在spring的官网上,明确给出不建议使用map传值。
4、第二种传值方式Model(Spring建议使用的方式)
/**
*
* @description: 使用model进行传值
* @param username 接收的参数
* @param model 存储值
* @return
*
*/
@RequestMapping("/welcome")
public String welcome(String username,Model model){
model.addAttribute("username",username);//存储值
return "welcome";
}
在地址栏中输入请求路径及参数,得到结果如下图:
使用上面的方法传值与使用map的效果是一样儿的。很方便。
5、与structs2传值方式相比
在structs2中,要想传值(username),我们要这样儿写:
private String username;
//setter ,getter方法
用这种方法传值最大的问题就是:如果controller是单例的,则第一个请求未处理完成时,第二个请求到来,username的值还是第一个请求时的值,所以struts2要在action上设置scope参数。
spring mvc就不存在这个问题。而且spring mvc中的controller是单例的,执行效率相对于structs2也要高。
6、关于model传值中的一个需要注意的地方:
model.addAttribute(username);
上面的这种情况就是:在传值的时候没有key,那么它的key究竟是什么呢?
在spring文档中,明确指出,如果不指定key,则默认使用对象的类型(是类型)做为key。
@RequestMapping("/welcome")
public String welcome(String username,Model model){
model.addAttribute("username",username);
//此时默认使用对象的类型作为key-->model.addAttribute("string",username)
model.addAttribute(username);
return "welcome";
}
7、在welcome.jsp页面中输入如下代码:
8、输出结果如下图所示: