SpringMVC的返回值类型【视图解析】

第一种:ModelAndView

  • 伪代码:
//切记:不论是哪种返回值类型,最终都要经过SpringMVC的适配器内置策略返回ModelAndView类型!
	
	/*第一种方法:当方法返回值为类型为ModelAndView
	 *需要方法结束时,定义ModelAndView
	 *将model和view分别进行设置
	 */
	@RequestMapping(value = "/login",method = {RequestMethod.GET})
	public ModelAndView getLogin(){
		ModelAndView modelAndView = new ModelAndView();
		//设置视图,如果在视图解析器中配置了jsp路径的前缀和后缀,修改为如下:
		//model.setViewName("/WEB-INF/pages/login.jsp");
		modelAndView.setViewName("login");
		//ModelAndView的addObject()方法相当于在Servlet中request的setAttribute()
		//设置模型数据
		modelAndView.addObject("username","user1");
		//相当于转发,但是需要视图解析器进行解析
		return modelAndView;
	}

 *第二种:String

  • 伪代码:
        /*第二种方法:当方法返回值类型为String
	 *标识返回逻辑视图名!
	 *真正视图(jsp路径)=前缀+逻辑视图名+后缀
	 */
	@RequestMapping(value = "/login2",method = {RequestMethod.GET})
	public String getLogin2(Model model){
		
		/*设置模型数据
		 *通过形参model将模型数据传到页面
		 *Model等价于ModelAndView 
		 *model.addAttribute()方法等价于modelAndView.addObject()
		 */
		model.addAttribute("username","user2");
		//标识返回逻辑视图名!
		return "login";
		//重定向
		//return "redirect:/login.jsp";
		//转发
		//return "forward:login.mvc";
	}
  • *转发和重定向的区别和使用

注意:WEB-INF目录底下的jsp界面是不能通过请求直接访问的,需要重定向到SpringMVC中,经过SpringMVC的视图解析器转发才可以间接访问!

(1)springMVC默认转发。因为转发是服务器端行为,所以它只能访问本web服务器上的所有组件资源

  • ·jsp:return "forward:/login.jsp":从项目的根路径进行寻找jsp界面
  • ·url:return "forward:/login/toUpdate.mvc"
  • ·切记:不可以缺少'/'

(2)当使用重定向:重定向不仅可以访问本web服务器上的所有资源,还可以跨站访问!!

  • ·jsp:return "redirect:/login.jsp":从项目的根路径进行寻找jsp界面
  • ·url:return "redirect:/login/toUpdate.mvc"
  • ·切记:不可以缺少'/'

注意:转发和重定向url时有斜线/和没有斜线的区别,有斜线是项目级别,无斜线是类级别下的

(3)SpringMVC默认采用转发形式,但是必须要经过中间组件视图解析器进行url路径拼接查找,字符串指定的仅是逻辑视图名例如:

  • ·jsp:return "login";

(4)转发可以访问WEB-INF目录下的资源;而重定向却不可以,要想通过重定向访问WEB-INF目录下的资源,首先必须通过url访问SpringMVC,然后再通过SpringMVC的请求转发间接访问WEB-INF目录下的资源!

  • 例如转发:return "forward:/WEB-INF/pages/404.jsp"

第三种:void 

  • 伪代码:
        /*第三种方法:当方法返回值类型为void
	 *在形参上定义request和response
	 *等价于HttpRequestHandlerAdapter这一种适配器的Handler执行
	 *等价于Servlet
	 */
	@RequestMapping(value = "/login3",method = {RequestMethod.GET})
	public void getLogin3(HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		//设置模型数据
		request.setAttribute("username", "user3");
		//设置转发的视图,转发不需要视图解析器进行解析
		request.getRequestDispatcher("/login.jsp").forward(request, response);
		//response.sendRedirect("login.mvc");	
	
		//使用此种方法可以通过response,设置响应的数据格式,比如json数据
		/*response.setCharacterEncoding("utf-8");
		response.setContentType("application/json;charset=utf-8");
		response.getWriter().write("json串");*/
		
	}

附项目地址: 

猜你喜欢

转载自blog.csdn.net/qq_37230121/article/details/83508348