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 的参数 因为你跳转了嘛 所以我猜测呢是 跳转后域中才生效了,而且是仅在页面生效,所以呢我们要注意他的命名哟 别搞混即可,只是猜测
本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14946401.html