4. 剖析SpringMVC处理响应数据

SpringMVC处理响应数据

几种途径输出模型数据:

  1. Map
  2. Model
  3. ModelMap
  4. MadelAndView
1. Map 和 Model 以及 ModelMap

SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面呢?

可以在方法处传入Map、或者Model或者ModelMap

给这些参数里面保存的所有数据都会放在请求域中。这样就可以在页面获取了

 /*
 *   	Map,Model,ModelMap:最终都是BindingAwareModelMap在工作;
 *   	相当于给BindingAwareModelMap中保存的东西都会被放在请求域中;
 * 
 * 		Map(interface(jdk))      Model(interface(spring))  
 * 			||							//
 * 			||						   //
 * 			\/						  //
 * 		ModelMap(class)			     //
 * 					\\				//
 * 					 \\	           //
 * 					ExtendedModelMap
 * 							||
 * 							\/
 * 					BindingAwareModelMap
 */
Map

success.jsp页面能拿到username的值 taoge

    @RequestMapping("/testMap")
    public String testMap(Map map){

        map.put( "username","taoge" );

        return "success";
    }
Model

success.jsp页面能拿到username的值 huige

addAttribute

    @RequestMapping("/testModel")
    public String testModel(Model model){
        /**
         * model = class org.springframework.validation.support.BindingAwareModelMap
         * model = org.springframework.validation.support.BindingAwareModelMap
         * */
        System.out.println( "model = " + model.getClass() );
        System.out.println( "model = " + model.getClass().getName() );

        model.addAttribute( "username","huige" );

        return "success";
    }
ModelMap

addAttribute

	@RequestMapping("/testModelMap")
	public String testModelMap(ModelMap modelMap){
		modelMap.addAttribute("msg", "你好棒!");
		System.out.println("modelmap的类型:"+modelMap.getClass());
		return "success";
	}
2. ModelAndView对象

控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息,而且数据是放在请求域中

  1. 两个重要的成员变量:

    • private Object view; 视图信息
    • private ModelMap model; 模型数据
  2. 添加模型数据:

    • MoelAndView addObject(String attributeName, Object attributeValue) 设置模型数据
    • ModelAndView addAllObject(Map<String, ?> modelMap)
  3. 设置视图:

    • void **setView(**View view) 设置视图对象
    • void setViewName(String viewName) 设置视图名字
  4. 获取模型数据

    • protected Map<String, Object> getModelInternal() 获取模型数据
    • public ModelMap getModelMap()
    • public Map<String, Object> getModel()
    
	 /*
     * ModelAndView对象一共就两个属性需要研究
     * //View instance or view name String
     *  private Object view ;
     *
     *  //Model Map
     *  private ModelMap model;
     *
     *  ModelAndView中的方法:
     * */

    @RequestMapping("/user")
    public ModelAndView testModelAndView(){

        //创建一个模型视图对象
        ModelAndView mv = new ModelAndView();
        
        //设置模型
        mv.addObject( "username","taoge" ); //实质上存放到request域中 

        //设置视图名称
        mv.setViewName( "success" );

        return mv;
    }
3. SpringMVC中的重定向和转发

关于重定向和转发

  • 一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,即经过视图解析器处理。

  • 如果返回的字符串中带 forward: redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理

    • redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作
    • forward:success.jsp:会完成一个到 success.jsp 的转发操作
    @RequestMapping("/testRedirect")
    public String testRedirect(Model model){

        model.addAttribute( "username","weige" );
        //转发 request
        return "forward:/WEB-INF/views/ok.jsp";

        //重定向
        //return "redirect:/index.jsp";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值