springmvc的转发与重定向

在springmvc中请求的转发和响应的重定向就可以使用HttpServletRequest对象和HttpServletResponse对象又可以使用springmvc提供的"forward"和"redirect"关键字,也可以使用ModelAndView对象来进行转发。

使用最原始的方法

@RequestMapping("/testReturn")
	public void testReturnVoid(HttpServletRequest request,HttpServletResponse response) throws Exception{
		
		request.setAttribute("name", "张三");
		//转发
		request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
		//重定向
		response.sendRedirect(request.getContextPath()+"/testReturnVoid.jsp");
		//转发到同一控制器的其他方法中,只需要将对应方法的URL映射写进去
		request.getRequestDispatcher("testReturnString").forward(request, response);
		//转发到不同一控制器的其他方法中,需要将对应控制器的方法的URL全映射写进去。			   
		request.getRequestDispatcher("/springmvc/testModelAttribute").forward(request, response);
		//重定义到同一控制器的其他方法,但是重定向无法重定向到其他的控制器中
		response.sendRedirect("testReturnString");
	}

注:使用最原始的方法进行转发时,数据可以携带,但是重定向时,数据是无法携带的。并且转发和重定向到对应的jsp页面时,必须将对应页面的名称写全,因为此时不会经过视图解析器。

使用springmvc提供的方法

转发

@RequestMapping("/testForward")
	public String testForward(HttpServletRequest request,HttpServletResponse response){
		
		request.setAttribute("name", "张三");
		//转发到指定的jsp页面
		return "forward:/WEB-INF/pages/success.jsp";
		//转发到不同一控制器的其他方法中,需要将对应控制器的方法的URL全映射写进去
		return "forward:/springmvc/testModelAttribute";
		//转发到同一控制器的其他方法中
		return "forward:/testModelAttribute";
		
	}

重定向

@RequestMapping("/testRedirect")
	public String testRedirect(){
	
		//重定向到指定的jsp页面
		return "redirect:/testReturnVoid.jsp";
		//重定向到同一控制器的其他url映射,
		return "redirect:testForward";
	}

注:使用"forword"进行转发时,"forword"和"redirect"关键字后面的字符串表示的是物理视图地址,此时,该字符串也不会经过springmvc的视图解析器,并且"forword"关键字可以携带信息,"redirect"关键字不能携带信息。

使用ModelAndView

@RequestMapping("/testReturnModeAndView")
	public ModelAndView testReturnModeAndView(){
		//获取ModelAndView对象
		ModelAndView mv = new ModelAndView();
		/*
		 * 设置响应的内容(model的数据),
		 * model的数据可以是一个对象,
		 * 也可以是一个集合。
		 */
		List<String> list = new ArrayList<String>();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		mv.addObject("list",list);
		//设置响应的逻辑视图名称
		mv.setViewName("error");
		return mv;
	}

你可能感兴趣的:(java,springmvc)