数据响应方式
1)页面跳转
- 直接返回字符串
- 通过ModelAndView对象进行返回
2)回写数据
- 直接返回字符串
- 返回对象或集合
页面跳转
返回字符串形式
我们进行页面跳转,最简单的一种就是如下形式,直接返回一个字符串,SpringMVC就会去找到字符串代表的页面进行跳转。
@RequestMapping("rtest1")
public String rtest1(){
return "hello.jsp";
}
注意:
1、返回的字符串是有格式要去的,需要写页面相对于根目录的地址和后缀
2、跳转的方式是转发
3、转发的关键字是"forward:",可以省略不写的,但是如果是重定向,则必须写,格式如**“redirect:hello.jsp”**
4、我们通过都会写视图解析器,返回字符串的路径和后缀通常都是配置好了的,但是要主要,转发才能进WEB-INF,因为它是受保护的,重定向的页面必须是在其他文件夹中,或者再次转发进WEB-INF
返回ModelAndView形式
我们知道ModelAndView是SpringMVC的一个组件,我们可以通过它进行返回,只需要通过setViewName设置好返回的页面即可。
@RequestMapping("rtest2")
public ModelAndView rtest2(){
ModelAndView m = new ModelAndView();
m.setViewName("hello.jsp");
return m;
}
当然了,我们也可以携带值进行返回,通过addObject方法即可。
@RequestMapping("rtest2")
public ModelAndView rtest2(){
ModelAndView m = new ModelAndView();
m.addObject("name","zhangsan");
m.setViewName("hello.jsp");
return m;
}
扩展
除了以上方式进行数据响应,我们还可以通过其他的一些方式或写法,但是都是在上述的基础上实现的,如下。
1)ModelAndView作为形参
@RequestMapping("rtest3")
public ModelAndView rtest3(ModelAndView m){
m.addObject("name","zhangsan");
m.setViewName("hello.jsp");
return m;
}
2)Model作为形参
@RequestMapping("rtest4")
public String rtest4(Model m){
m.addAttribute("name","zhangsan");
return "hello.jsp";
}
3)ModelMap作为形参
@RequestMapping("rtest5")
public String rtest5(ModelMap m){
m.addAttribute("name","zhangsan");
return "hello.jsp";
}
4)HttpServletRequest作为形参
@RequestMapping("rtest6")
public String rtest6(HttpServletRequest m){
m.setAttribute("name", "lisi");
return "hello.jsp";
}
5)HttpSession作为形参
@RequestMapping("rtest7")
public String rtest7(HttpSession m){
m.setAttribute("name", "lisi");
return "hello.jsp";
}
为了和Java web阶段的知识点解耦,我们还是尽量不使用Request、session等方式,当然,作者我好像工作中用的还蛮多的…哈哈哈
回写数据
最原始的数据回写是通过response实现的,如下。
@RequestMapping("rtest8")
public void rtest8(HttpServletResponse resp) throws IOException{
resp.getWriter().print("hello~");
}
返回字符串
直接返回字符串,其实就和页面跳转的直接返回字符串一样了,SpringMVC就不清楚你到底是要跳转页面还是回写数据,因此,它会按照跳转页面的方式进行操作。
此时我们需要借助一个注解告诉SpringMVC我们是需要回写数据,而非页面跳转,这个注解就是@ResposeBody.
@RequestMapping("rtest9")
@ResponseBody
public String rtest9(){
return "hello java";
}
返回对象或集合
我们平时直接返回字符串的方式是很少的,一般都是返回对象或集合,我们可以将对象或结合转成json格式再进行传输,这样做我们需要自己写,但是Spring其实已经集成Jackson,我们只需要配置一下就可以了,最简单的一种配置就是配置注解驱动<mvc:annotation-driven />,它底层会自动配置jackson的。
配置好后,直接使用。注意,此时虽然看着是返回地对象,但是传输时是将对象转成json对象进行传输的。
@RequestMapping("rtest10")
@ResponseBody
public User rtest10(){
User u = new User();
u.setName("zs");
u.setAge("18");
return u;
}
参考
https://www.bilibili.com/video/BV1WZ4y1P7Bp