这种方法会将返回的字符串与视图解析器的前后缀拼接后跳转
返回带有前缀字符串:
转发:forward :/WEB-INF/view/index.jsp
重定向: redirect: /index.jsp
再spring-mvc.xml中配置内部资源解析器
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/">property>
<property name="suffix" value=".jsp">property>
bean>
Model : 模型—>封装数据
View: 视图–>展示数据
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/quick2")//请求映射
public ModelAndView save2(){
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username","wu");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping(value = "/quick3")//请求映射
public ModelAndView save3(ModelAndView modelAndView){
modelAndView.addObject("username","wu");
modelAndView.setViewName("success");
return modelAndView;
}
原始方式
@RequestMapping(value = "/quick5")//请求映射
public String save5(HttpServletRequest request){
request.setAttribute("username","wuyongzhao");
return "success";
}
Web基础阶段, 客户端访问服务器, 如果想直接回写字符串作为响应体返回的话, 只需使用response.getWriter().print( “hello world” )即可
在Controller中回写字符串:
①通过Spring MVC框架注入response对象, 使用response.getWriter().print("hello world ")回写数据,此时不需要视图跳转, 业务方法返回值为void
@RequestMapping(value = "/quick6")//请求映射
public void save6(HttpServletResponse response) throws IOException {
response.getWriter().print("hello world");
}
②将需要回写的字符串字节返回, 但此时需要通过@ResponseBody注解告知SpringMVC框架, 方法返回的字符串不是跳转是直接在http响应体中返回
@RequestMapping(value = "/quick7")//请求映射
@ResponseBody//告知SpringMVC框架不进行视图跳转, 直接进行数据响应
public String save7() throws IOException {
return "hello world";
}
@RequestMapping(value = "/quick8")//请求映射
@ResponseBody
public String save() throws IOException {
return "{\"username\":\"zhangsan\",\"age\":18}";
}
下面通过对象的形式来回写json数据格式
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.9.0version>
dependency>
package com.domain;
public class User {
private String name;
private int age;
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;
}
}
回写成json格式
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/quick9")//请求映射
@ResponseBody
public String save9() throws IOException {
User user = new User();
user.setName("lisi");
user.setAge(18);
//使用json转换工具: 将对象转换成json格式的字符串
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
}
在spring-mvc.xml中配置处理器映射器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
list>
property>
bean>
@Controller
@RequestMapping("/user")
public class UserController {
//返回对象或集合
//期望SpringMVC自动将User转换成json格式字符串
@RequestMapping(value = "/quick10")//请求映射
@ResponseBody
public User save10() throws IOException {
User user = new User();
user.setName("lisi");
user.setAge(20);
return user;
}
}
在方法上添加@ResponseBody
就可以返回json格式的字符串, 但是这样配置比较麻烦, 配置的代码比较多, 因此我们可以使用mvc的注解驱动替代上述配置
在SpringMVC的各个组件中, 处理器映射器, 处理器适配器, 视图解析器称为 SpringMVC的三大组件
使用
自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理器适配器), 可用在Spring-mvc.xml配置文件中使用
替代注解处理器和适配器的配置
同时使用
默认底层就会集成Jackson进行对象或集合的json格式字符串的转换
在spring-xml文件中相对应的位置加上这两行配置代码
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd