第一种:ModelAndView
- 伪代码:
//切记:不论是哪种返回值类型,最终都要经过SpringMVC的适配器内置策略返回ModelAndView类型!
/*第一种方法:当方法返回值为类型为ModelAndView
*需要方法结束时,定义ModelAndView
*将model和view分别进行设置
*/
@RequestMapping(value = "/login",method = {RequestMethod.GET})
public ModelAndView getLogin(){
ModelAndView modelAndView = new ModelAndView();
//设置视图,如果在视图解析器中配置了jsp路径的前缀和后缀,修改为如下:
//model.setViewName("/WEB-INF/pages/login.jsp");
modelAndView.setViewName("login");
//ModelAndView的addObject()方法相当于在Servlet中request的setAttribute()
//设置模型数据
modelAndView.addObject("username","user1");
//相当于转发,但是需要视图解析器进行解析
return modelAndView;
}
*第二种:String
- 伪代码:
/*第二种方法:当方法返回值类型为String
*标识返回逻辑视图名!
*真正视图(jsp路径)=前缀+逻辑视图名+后缀
*/
@RequestMapping(value = "/login2",method = {RequestMethod.GET})
public String getLogin2(Model model){
/*设置模型数据
*通过形参model将模型数据传到页面
*Model等价于ModelAndView
*model.addAttribute()方法等价于modelAndView.addObject()
*/
model.addAttribute("username","user2");
//标识返回逻辑视图名!
return "login";
//重定向
//return "redirect:/login.jsp";
//转发
//return "forward:login.mvc";
}
- *转发和重定向的区别和使用
注意:WEB-INF目录底下的jsp界面是不能通过请求直接访问的,需要重定向到SpringMVC中,经过SpringMVC的视图解析器转发才可以间接访问!
(1)springMVC默认转发。因为转发是服务器端行为,所以它只能访问本web服务器上的所有组件资源
- ·jsp:return "forward:/login.jsp":从项目的根路径进行寻找jsp界面
- ·url:return "forward:/login/toUpdate.mvc"
- ·切记:不可以缺少'/'
(2)当使用重定向:重定向不仅可以访问本web服务器上的所有资源,还可以跨站访问!!
- ·jsp:return "redirect:/login.jsp":从项目的根路径进行寻找jsp界面
- ·url:return "redirect:/login/toUpdate.mvc"
- ·切记:不可以缺少'/'
注意:转发和重定向url时有斜线/和没有斜线的区别,有斜线是项目级别,无斜线是类级别下的
(3)SpringMVC默认采用转发形式,但是必须要经过中间组件视图解析器进行url路径拼接查找,字符串指定的仅是逻辑视图名例如:
- ·jsp:return "login";
(4)转发可以访问WEB-INF目录下的资源;而重定向却不可以,要想通过重定向访问WEB-INF目录下的资源,首先必须通过url访问SpringMVC,然后再通过SpringMVC的请求转发间接访问WEB-INF目录下的资源!
- 例如转发:return "forward:/WEB-INF/pages/404.jsp"
第三种:void
- 伪代码:
/*第三种方法:当方法返回值类型为void
*在形参上定义request和response
*等价于HttpRequestHandlerAdapter这一种适配器的Handler执行
*等价于Servlet
*/
@RequestMapping(value = "/login3",method = {RequestMethod.GET})
public void getLogin3(HttpServletRequest request, HttpServletResponse response) throws Exception{
//设置模型数据
request.setAttribute("username", "user3");
//设置转发的视图,转发不需要视图解析器进行解析
request.getRequestDispatcher("/login.jsp").forward(request, response);
//response.sendRedirect("login.mvc");
//使用此种方法可以通过response,设置响应的数据格式,比如json数据
/*response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");*/
}
附项目地址: