← 返回首页
SpringMVC教程(六)
发表时间:2020-05-31 13:45:34
返回视图

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...");

    }