SpringMVC之Controller方法返回值

springmvc.xml

<?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
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描包-->
    <context:component-scan base-package="com.testfan"></context:component-scan>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   		<!-- 配置视图名的默认前缀 -->
        <property name="prefix" value="/WEB-INF/"></property>
        <!-- 配置视图名的默认后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--引入注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

Controller方法返回值分为3种:void类型、String类型、ModelAndView类型

一、返回值为void类型

a. 方法一:
	@RequestMapping("/testVoid")
   public void testVoid(){
        System.out.println("测试没有返回值");
        //因为没有指定返回值页面,会自动截取请求路径(/WEB-INF/user/testVoid.jsp),进入视图解析器,拼接完整的路径
        //可以对应的路径下创建对应的jsp页面
        
   }
b. 方法二:response重定向
@RequestMapping("/testVoid2")
    public void testVoid2(HttpServletResponse response){
        System.out.println("测试没有返回值");
        try {
            //重定向不能进入web-inf路径
            //转发可以进入web-inf路径
            response.sendRedirect("/index.jsp");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
c. 方法二:servlet转发
	@RequestMapping("/testVoid3")
    public void testVoid3(HttpServletResponse response, HttpServletRequest request){
        System.out.println("测试没有返回值");
        try {
            request.getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



二、返回值为String类型

a. 默认的情况:转发请求,返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
	/**
     * 方法的返回值为String类型
     *      返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
     * @return
     */
    @RequestMapping("/testReturnString")
    public String testReturnString(){
        return "show";
    }
 b. 请求重定向
 	/**
     * 执行保存操作-- 重新查询 : save -- redirect:findAll
     *
     * 方法的返回值为String类型
     *      返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
 *      redirect:重定向, 不能进入web-inf
     *   redirect:添加了redirect后则不会进入视图解析器,需要配置完整的路径
     * @return
     */
    @RequestMapping("/testReturnString2")
    public String testReturnString2(){
        return "redirect:/index.jsp";
    }
 c. 请求转发
 /**
     * forward: 转发,不会进入视图解析器,需要配置完整的路径
     * @return
     */
    @RequestMapping("/testReturnString3")
    public String testReturnString3(){
        return "forward:/index.jsp";
    }



三、返回值为ModelAndView类型

a. ModelAndView:   Model 模型:封装数据  view 视图: 指定页面  ---> 模型和视图
b. /**
     * 返回值类型为ModelAndView,包含数据和视图页面
     * @return
     */
    @RequestMapping("/testReturnModelAndView")
    public ModelAndView testReturnModelAndView(){
        //准备数据--数据库查询
        List<User> userList = new ArrayList<>();
        User user = new User();
        user.setUsername("zhangsan");
        user.setSex("男");
        user.setId(2);

        User user1 = new User();
        user1.setUsername("zhangsan1");
        user1.setSex("女");
        user1.setId(1);

        userList.add(user);
        userList.add(user1);
        ModelAndView modelAndView = new ModelAndView();
        //添加数据
        modelAndView.addObject("userList",userList);
        //指定页面
        modelAndView.setViewName("show");
        return  modelAndView;
    }

show.jsp

<body>
可以直接使用userList内的值
${userList}
</body>
</html>

参考:https://blog.csdn.net/a909301740/article/details/80410660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值