4. Spring MVC 数据响应方式 - 页面跳转

SpringMVC的数据响应方式

1) 页面跳转

直接返回字符串【1】

通过ModelAndView对象返回【2】

2) 回写数据 

直接返回字符串【1】

返回对象或集合【2】

下面详解:

页面跳转:直接返回字符串:【也就是上面我们说的那个】

 

这是结构图 其中WEB-INF 我们说外界是不能直接访问的,但是他可以在这里转发访问:

    @RequestMapping(value = "/go",method = RequestMethod.GET)
    public String GoUrl(){
        System.out.println("您成功访问了 根目录/aaa/go 网页!");
        return "s1";
    }
   <bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>  <!--文件名前缀-->
        <property name="suffix" value=".jsp"/>      <!--文件名后缀-->
    </bean>

所以呢 这里路劲合起来就是访问了: 

/WEB-INF/jsp/s1.jsp

所以就完成了一个访问了

这就是直接返回字符串的方式。

页面跳转: 返回 ModelAndView 【很多种方式】:

1: 直接返回 new 一个 ModelAndView 然后 设置一下参数即可返回:

TestController.java:

@Controller
public class TestController {
    @RequestMapping(value = "/go",method = RequestMethod.GET)
    //返回的数据类型一定要是 ModeAndView哦~
    public ModelAndView GoUrl(){
        //实例化一个ModelAndView对象
        ModelAndView mad = new ModelAndView();
        //设置model  和 View名
        //设置Model 键值方式
        mad.addObject("name","BiHu");
        //设置View 名
        mad.setViewName("s1");  //因为配置里面设置了前缀和后缀 所以这里直接设置s1

        //返回ModelAndView
        return mad;
    }
}

Tips  这里的设置了 视图解析器的 前缀和后缀 所以这里直接返回了,注意啊。

因为设置了Model ,设置了个name = “bihu” 所以在s1.jsp 中可以直接用el表达式解析出来【如果无法解析 请头部添加<%@ page isELIgnored="false" %>】

s1.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>ok!</title>
</head>
<body>
    <h2>ok! 恭喜您! 您的ModelAndView的参数是: ${name} </h2>
</body>
</html>

所以你看到的是这样的:

所以呢 你可以单单返回视图不设置Model也是Ok的啦~

2:直接返回 让SpringMVC自己帮我注入ModelAndView [形参ModelAndView]

当你不想自己new 你可以设置一个形参 让SpringMVC 自己帮你注入,这样也是完全可以的! 

例:

@Controller
public class TestController {
    @RequestMapping(value = "/go",method = RequestMethod.GET)
    //添加形参ModelAndView 
    public ModelAndView GoUrl(ModelAndView mad){
        mad.addObject("name","BiHu");
        mad.setViewName("s1");
        return mad;
    }
}

 3 Model 和 View 分离  [形参Model]

我们还可以将他们两分离,其中Model 做形参,但是返回的字符串类型【视图】。

@Controller
public class TestController {
    @RequestMapping(value = "/go",method = RequestMethod.GET)
    //Model 和 View 分离:返回String 添加形参Model
    public String GoUrl(Model model){
        //即使我是Model 我也可以携带参数[键-值]
        model.addAttribute("name","BiHu");
        return "s1";    //因为容器配了 前缀和后缀 所以咳咳
    }
}


4 除了上面三个 还可以用原始的方式来【Request】:

你想的到的方法,SpringMVC的作者都想到了,所以:原始的Request也可以实现跳转【可以说是 视图 和 Request分离】

@Controller
public class TestController {
    @RequestMapping(value = "/go",method = RequestMethod.GET)
    public String GoUrl(HttpServletRequest request){
        request.setAttribute("name","BiHu");
        return "s1";    //因为容器配了 前缀和后缀 所以咳咳
    }
}

注意: modeandvie 他addobject 的参数 因为你跳转了嘛 所以我猜测呢是 跳转后域中才生效了,而且是仅在页面生效,所以呢我们要注意他的命名哟 别搞混即可,只是猜测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值