上面学习了如何通过url地址栏传参数给controller,那么接下来,学习下controller如何将传递给view。

1、在WelcomController类中的创建如下方法:

@RequestMapping(value={"/","/welcom"})
 public String welcome(@RequestParam("username") String username,Map 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、输出结果如下图所示: