Controller方法的返回
- String
- 逻辑视图名
- 重定向或者转发
- void
- ModelAndView
String
逻辑视图名:
上一遍博客已经提到过,这里就不在讲解了
重定向或者转发:
@RequestMapping(value="/login1.action")
public String login01(HttpServletRequest req) {
req.setAttribute("username", req.getParameter("username"));
return "redirect:result.jsp";
}
@RequestMapping(value="/login2.action")
public String login02(HttpServletRequest req) {
req.setAttribute("username", req.getParameter("username"));
return "forward:result.jsp";
}
- 这里相信大家看见关键字,都已经知道那个是重定向那个是转发了吧
- 重定向request是两次请求,存放的东西湖丢失,转发是一次请求,所以不会
void
@RequestMapping(value="/login3.action")
public void login03(HttpServletRequest req,HttpServletResponse resp) throws IOException {
req.setAttribute("username", req.getParameter("username"));
resp.sendRedirect("result.jsp");
}
@RequestMapping(value="/login4.action")
public void login04(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("username", req.getParameter("username"));
req.getRequestDispatcher("result.jsp").forward(req, resp);
}
- void就是和普通的Servlet一样,没区别了
ModelAndView
@RequestMapping(value="/login5.action")
public ModelAndView login05(HttpServletRequest req,HttpServletResponse resp,HttpSession session) throws ServletException, IOException {
ModelAndView mv=new ModelAndView();
mv.setViewName("result");
mv.addObject("happy", "帅帅哒");
req.setAttribute("hai", "美美哒");
session.setAttribute("ha", "安逸");
req.getServletContext().setAttribute("h", "嗨呀");
return mv;
}
result.jsp
<body>
${happy }
${requestScope.hai }
${sessionScope.ha }
${applicationScope.h }
</body>
- 从这个测试代码中就可以很明显的看出 ModelAndView作用了,
- 里面request、session、sevletContext都是和普通页面一样的使用
mv.addObject("happy", "帅帅哒");
同时ModelAndView还可以自己存放一组键值对,作用域与request相同
总结
- 同时
mv.setViewName("result");
这里也可以设置重定向和转发哦,代码和上面一样的 - 同时还可以使用Map、Model、ModelMap存放数据,可以直接存放,都是保存在request作用域中