Controller的返回值可以是以下类型: - ModelAndView - Model - ModelMap - Map - View - String return "user/user_edit"; 根据prefix前缀+视图名称 +suffix后缀组成。如后缀是jsp则跳转到user/user_edit.jsp 如果加@ResponseBody注解直接把字符当做页面内容返回 - void
其中,ModelAndView,Map和String这三种最常用,我们重点讲解。
项目结构图如下:

视图解析器配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 注册HandlerMapper、HandlerAdapter两个映射类 -->
<mvc:annotation-driven />
<!-- 访问静态资源 -->
<mvc:default-servlet-handler/>
<!-- 使用扫描机制扫描控制器类,控制器类都在controller包及其子包下 -->
<context:component-scan base-package="com" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
由此,我们可以看出存在一个名字叫"hello"的视图,对应/WEB-INF/jsp/hello.jsp页面。
1.返回String
返回的String值,就是就是视图的名字。例如:
@RequestMapping(method = RequestMethod.GET,value = "/helloworld1")
public String hello1(){
//hello表示视图的名字,根据视图解析器,去寻找/WEB-INF/jsp/hello.jsp页面
return "hello";
}
2.返回ModelAndView
返回ModelAndView对象,对象里面包含有视图的名字和属性。例如:
@RequestMapping(method = RequestMethod.GET,value = "/helloworld2")
public ModelAndView hello2(){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
//返回ModelAndView对象,对象包含了视图名字是hello.
return mv;
}
3.返回Map 返回Map对象,map对象里面仅仅有视图的属性,因此要求@RequestMapping的value属性必须和视图名字能一一对应上,否则无法找到视图。例如:
//注意:如果返回Map,要求value属性必须是存在的视图名字。
@RequestMapping(method = RequestMethod.GET,value = "/hello")
public Map<String,String> hello(){
Map map = new HashMap();
return map;
}
4.返回void
很少使用,通常仅仅做一些校验动作,不要求返回视图,甚至不要求在视图中添加任何属性。 例如:
//注意:如果返回void,要求value属性必须是存在的视图名字。这里默认去寻找/WEB-INF/jsp/helloworld4.jsp
@RequestMapping(method = RequestMethod.GET,value = "/helloworld4")
public void hello4(){
System.out.println("helloworld4...");
}