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
目录中,否则无法找到。