在springMVC中支持六种类型的返回方式,接下来我们介绍常用的四种:
1.ModelAndView
[Java] 纯文本查看 复制代码 @RequestMapping("/say.do")
public ModelAndView say() {
String msg="测试返回方式ModelAndView";
/**
* 参数一:视图名称,即要跳转的页面
* 参数二:携带到视图上面的参数名
* 参数三:携带到视图上参数对应的值
*/
return new ModelAndView("success","msg",msg);
}
注意:通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面
2.Map
[Java] 纯文本查看 复制代码 @RequestMapping("/show.do")
public Map<String, String> getMap() {
Map<String, String> map = new HashMap<String, String>();
map.put("keyOne", "hello");
map.put("keyTwo", "nihao");
return map;
}
注意:在jsp页面中可直通过${keyOne}获得到值, map.put()相当于request.setAttribute方法。
3.String
[Java] 纯文本查看 复制代码 @RequestMapping("/eat.do")
public String useString() {
return "success";
}
指定返回的视图页面名称,结合设置的返回地址路径加上页面名称后缀即可访问到。
注意:如果方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。
[Java] 纯文本查看 复制代码 @RequestMapping(value="/print.do")
@ResponseBody
public String print(){
String message = "Hello World, Spring MVC!";
return message;
}
4.void
Controller中定义void方法,这种场景一般是通过HttpServletResponse对象来输出页面内容。注意:Controller的void方法中一定要声明HttpServletResponse类型的方法入参!void方法不定义HttpServletResponse类型的入参,HttpServletResponse对象通过RequestContextHolder上下文获取 ,注意:这种方式是不可行的,void方法不定义HttpServletResponse类型的入参Spring MVC会认为@RequestMapping注解中指定的路径就是要返回的视图name。如下示例:
[Java] 纯文本查看 复制代码 @RequestMapping("/hello.do")
public void hello() throws IOException {
System.out.println("处理请求的方法...");
}
正确的方式应该是:
[Java] 纯文本查看 复制代码 @RequestMapping("/hello.do")
public void hello(HttpServletResponse response) throws IOException {
System.out.println("处理请求的方法...");
}
|