springmvc 响应数据和结果视图

1. 返回值分类
字符串
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
// 指定逻辑视图名,经过视图解析器解析为 jsp 物理路径: /WEB-INF/pages/success.jsp
@RequestMapping( "/testReturnString" )
public String testReturnString() {
System. out .println( "AccountController testReturnString 方法执行了。。。。 " );
return "success" ;
}
2 void
在昨天的学习中,我们知道 Servlet 原始 API 可以作为控制器中方法的参数:
@RequestMapping( "/testReturnVoid" )
public void testReturnVoid(HttpServletRequest request ,HttpServletResponse response )
throws Exception {
}
controller 方法形参上可以定义 request response ,使用 request response 指定响应结果:
1 、使用 request 转向页面,如下:
request .getRequestDispatcher( "/WEB-INF/pages/success.jsp" ).forward( request ,
response );
2 、也可以通过 response 页面重定向:
response .sendRedirect( "testRetrunString ")
3 、也可以通过 response 指定响应结果, 例如响应 json 数据:
response .setCharacterEncoding("utf-8");
response .setContentType("application/json;charset=utf-8");
response .getWriter().write(" json 串" );
3 ModelAndView
ModelAndView SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。
该对象中有两个方法:
示例代码:
/**
* 返回 ModeAndView
* @return
*/
@RequestMapping ( "/testReturnModelAndView" )
public ModelAndView testReturnModelAndView() {
ModelAndView mv = new ModelAndView();
mv .addObject( "username" , " 张三 " );
mv .setViewName( "success" );
return mv ;
}
响应的 jsp 代码:
<%@ page language = "java" contentType = "text/html; charset=UTF-8"
pageEncoding = "UTF-8" %>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
< title > 执行成功 title >
head >
< body >
执行成功!
${requestScope.username}
body >
html >
2 转发和重定向
forward 转发
controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。我们也可以写成:
/**
* 转发
* @return
*/
@RequestMapping ( "/testForward" )
public String testForward() {
System. out .println( "AccountController testForward 方法执行了。。。。 " );
return "forward:/WEB-INF/pages/success.jsp" ;
}
需要注意的是,如果用了 formward 则路径必须写成实际视图 url ,不能写逻辑视图。
它相当于 request.getRequestDispatcher(" url ").forward(request,response) 。使用请求
转发,既可以转发到 jsp ,也可以转发到其他的控制器方法。
Redirect 重定向
contrller 方法提供了一个 String 类型返回值之后,它需要在返回值里使用 : redirect:
/**
* 重定向
* @return
*/
@RequestMapping ( "/testRedirect" )
public String testRedirect() {
System. out .println( "AccountController testRedirect 方法执行了。。。。 " );
return "redirect:testReturnModelAndView" ;
}
它相当于“ response.sendRedirect( url ) ”。需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不
能写在 WEB-INF 目录中,否则无法找到。

你可能感兴趣的:(springMvc)