SpringMVC 响应数据和结果视图
返回值分类
- 返回值为字符串类型
@RequestMapping(value = "findAll")
public String findAll(){
return "success";
}
controller 方法返回类型为字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/jsp/success.jsp
- 返回值为void类型
Servlet 原始 API 可以作为控制器中方法的参数:
1、使用 request 转向页面
@RequestMapping(value = "requestParam",method = RequestMethod.GET)
public void requestModel1(HttpServletRequest request, HttpServletResponse response) {
try {
UserVO userVO = new UserVO();
userVO.setUserId(101);
userVO.setUserName("ll");
request.setAttribute("userVo",userVO); request.getRequestDispatcher("WEB-INF/jsp/requestParam.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、通过 response 页面重定向
@RequestMapping(value = "requestParam",method = RequestMethod.GET)
public void requestModel1(HttpServletRequest request, HttpServletResponse response) {
try {
UserVO userVO = new UserVO();
userVO.setUserId(101);
userVO.setUserName("ll");
request.setAttribute("userVo",userVO); response.sendRedirect("modelview1");
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3、通过 response 指定响应结果
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json 串");
注意:
request请求对象中,设置自定义的属性,可以在转发的目标页面获取设置的自定义属性,从而实现在同一请求周期内不同页面间的参数共享
重定向的转发相当于在浏览器地址上发起一个新的请求,一般给定的地址是在浏览器可以访问到的地址才可以定向转发,所以重定向的jsp页面不能写在WEB-INF下,可以在外面,因为WEB-INF下的jsp不能通过浏览器地址栏访问
- 返回值为ModelAndView类型
@RequestMapping(value = "modelview2",method = RequestMethod.GET)
public ModelAndView modelview2(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("success");
UserVO userVO = new UserVO();
userVO.setUserId(101);
userVO.setUserName("ll");
modelAndView.addObject("users","ff");
modelAndView.addObject("userVo",userVO);
return modelAndView;
}
转发和重定向
- 转发
@RequestMapping(value = "forwardPage",method = RequestMethod.GET)
public String forwardPage(){
return "success";
}
controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。
@RequestMapping(value = "forwardPage",method = RequestMethod.GET)
public String forwardPage(){
return "forward:/WEB-INF/pages/success.jsp";
}
如果用了 forward:路径必须写成实际视图的 url,不能写逻辑视图。
等价于“request.getRequestDispatcher(“url”).forward(request,response)”。
- 重定向
@RequestMapping(value = "redirectPage",method = RequestMethod.GET)
public String redircetPage(){
//return "redirect:success";//不会进行视图适配器前缀加后缀进行渲染,所以一般不会给视图资源
return "redirect:modelview1";//一般给controller方法
}
相当于“response.sendRedirect(url)”。需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到。