(一)设置页面跳转方式
1. 默认跳转方式请求转发
@RequestMapping("demo08")
public String demo08() {
//不写默认是转发
return "mian";
};
2. 设置返回值字符串内容
2.1 添加 redirect:资源路径重定向
@RequestMapping("demo10")
public String demo010() {
//设置为重定向到main.jsp页面
return "redirect:/main.jsp";
};
2.2 添加 forward:资源路径或省略 forward: 转发
@RequestMapping("demo09")
public String demo09() {
//设置为转发到main.jsp页面
return "forward:/main.jsp" ;
};
(二)设置自定义视图解析器
1. SpringMVC 会提供默认视图解析器.
2. 程序员自定义视图解析器(在SpringMvc配置文件中配置)
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
3. 如果希望不执行自定义视图解析器,在方法返回值前面添加 forward:或 redirect:
@RequestMapping("demo10")
public String demo010() {
//设置为重定向到main.jsp页面
return "redirect:/main.jsp";
};
注意:如果在方法返回值前加forward:或者redirect:则SpringMVC配置文件中的自定义视图解析器无效。return "forward:/main"表示转发到映射名为main的controller,而return "forward:/main.jsp"表示转发到main.jsp页面。
(三)@ResponseBody
1. 在方法上只有@RequestMapping 时,无论方法返回值是什么认为需要跳转
2. 在方法上添加@ResponseBody(恒不跳转)
@RequestMapping("demo11")
@ResponseBody
public People demo11() {
People p=new People();
p.setAge(20);
p.setName("张三");
return p;
};
public class People {
private String name;
private int age;
public People() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + "]";
}
}
在浏览器输入:http://localhost:8080/SpringMVCLearn/demo11
返回:
{"name":"张三","age":20}
注意:@ResponseBody底层使用 Jackson 进行 json 转换,在项目中一定要导入 jackson 的 jar
Jackson的下载地址:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/
关于Jackson的功能介绍与使用,参见:https://blog.csdn.net/u011054333/article/details/80504154
2.1 如果返回值满足 key-value 形式(对象或 map) @ResponseBody的底层把响应头设置为 application/json;charset=utf-8 ,把转换后的内容输出流的形式响应给客户端。
2.2 如果返回值不满足 key-value,例如返回值为 String。底层把相应头设置为 text/html ,把方法返回值以流的形式直接输出.。
2.3 如果返回值包含中文,会出现中文乱码。此时,这样解决:
@RequestMapping(value="demo12",produces="text/html;charset=utf-8")