SpringMVC之Controller方法的返回值

1.返回ModelAndView

​ --controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view

	/*
	 * 返回ModelAndView  这种返回的视图名称会参与拼接(至于为什么拼接请看Tips1) ,所以要简写  
	 如果你想跳转到  /WEB-INF/list.jsp  那么视图名称是:list
	 */
	
	@RequestMapping("test1.do")
	public ModelAndView test1()
	{	
        //1.实例化一个ModelAndView
		ModelAndView mav=new ModelAndView();
        //2.添加model数据
		List<User> list=new ArrayList<>();
		User user1=new User(100,"zhangsan");
		User user2=new User(101,"lisi");
		list.add(user1);
		list.add(user2);
		//3.指定view
		mav.addObject("userList", list);
		mav.setViewName("list");
		//4.返回ModelAndView对象
		return mav;
	}
Tips1:

在InternalResourceViewResolver类继承的父类帮我们拼接了url,所以所以前端控制器实际上获得的视图名为 prefix配置的值+ returnStr(方法返回值)+ suffix配置的值,即 /WEB-INF/list.jsp,所以页面最终会跳转到WEB-INF目录下的list.jsp。

protected AbstractUrlBasedView buildView(String viewName) throws Exception {
		AbstractUrlBasedView view = (AbstractUrlBasedView) BeanUtils.instantiateClass(getViewClass());
		view.setUrl(getPrefix() + viewName + getSuffix());//这里帮我们拼接url
}
2.返回字符串

​ --表示返回逻辑视图名

/**
	 * 返回String :会参与前缀后缀的拼凑   所以是简写
	 * 模拟需求:查询单个商品信息,然后到页面展示信息
	 */
	@RequestMapping("queryProduct.do")
	public String queryProduct(Integer id,Model model)
	{
		
		Product p=new Product(id, "酸菜鱼", 59.00);
		//把以上商品信息给到页面
		model.addAttribute("product", p);
		
		return "product";//返回/WEB-INF/product.jsp
	}

​ --redirect重定向

/**
	 * 那么如果希望重定向,springMVC提供了什么方式?返回String  只是写法:  redirect:list.do
	 * 注意:使用String的重定向写法,地址栏发生变化且返回的字符串不会参与前缀后缀的拼接
	 * 环境模拟:先修改update.do然后重定向到list请求list.do
	 */
	@RequestMapping("update.do")
	public String update()
	{
		System.out.println("update.do");
		return "redirect:list.do";
	}
	@RequestMapping("list.do")
	public String list()
	{
		System.out.println("come list.do");
		return "productList";
	}
	

​ --forword页面转发

/**
	 * 返回String之跳转
	 * 模拟一下:对商品添加完成之后,跳转到用户列表功能
	 * 注意:使用String的跳转写法,地址栏不发生变化且返回的字符串不会参与前缀后缀的拼接
	 */
	@RequestMapping("add.do")
	public String add()
	{
		System.out.println("come add.do");
		return "forward:/user/test1.do";
	}
Tips2:

放在 WEB-INF文件夹下的页面没有办法通过地址栏直接访问的(直接访问就会出现404的错误,不信你试试),只能通过后台的跳转来间接的访问,所以就需要请求 SpingMVC 来返回相应的页面。所以一般我们会

WebContent 这一层目录下只留一个引导页面(index.jsp)作为跳转。

重定向和跳转的区别:

​ 重定向后地址栏发生改变,且速度慢,因为重定向的本质是客户端发送了两次请求

​ 跳转后地址栏不发生改变,且速度快,跳转只发送一次请求

3.返回void
/**
	 * 返回void
	 * 必须在方法的参数中添加HttpServletRequest和HttpServletResponse来进行页面跳转
	 */
	@RequestMapping("responseJSON.do")
	public void responseJSON(HttpServletRequest request,HttpServletResponse response) throws IOException
	{
		List<User> list=new ArrayList<>();
		User user1=new User(100,"zhangsan");
		User user2=new User(101,"lisi");
		
		list.add(user1);
		list.add(user2);
		
		//把java对象转化为json串
		String josn_str=JSON.toJSONString(list);
		
		response.setCharacterEncoding("utf-8");
		
		response.setContentType("application/json;charset=utf-8");
		
		response.getWriter().write(josn_str);
		
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值