一、实现页面跳转的方式
如何实现页面跳转?
1. 直接返回逻辑视图名称
-
方法返回的字符串,和视图解析器里的前缀、后缀拼接得到真实路径,再进行跳转
-
是请求转发跳转
2. 返回带有前缀的物理视图
-
请求转发:
forward:/success.jsp
-
重定向:
redirect:/success.jsp
-
注意:如果带有
forward
或者redirect
,那么路径必须是真实路径
示例:
@RequestMapping("/jump")
public String resp1(){
System.out.println("/jump.....");
// return "success";
// return "forward:/success.jsp";
return "redirect:/success.jsp";
}
二、请求转发并传递数据
ModelAndView
说明
ModelAndView
是SpringMVC提供的组件之一,其中
Model
,模型,用于封装数据(相当于放到了request域中)
View
,视图,用于展示数据如果我们设置了视图名称,并且封装了数据模型,SpringMVC会:
把Model的数据放到request域对象中,然后请求转发到指定的视图
我们可以视图页面中获取数据显示出来
使用示例:
/**
* 页面请求转发跳转,并传递数据.
* 方式一:方法返回String,是视图路径;如果要传递数据,可以使用Model
*
* 我们向Model对象里放的数据,最终是被SpringMVC给放到了request域对象里
*/
@RequestMapping("/data2")
public String data2(Model model){
model.addAttribute("name", "大王");
return "success";
}
/**
* 请求转发跳转,并传递数据.
* 方式二:方法直接返回ModelAndView
*/
@RequestMapping("/data3")
public ModelAndView data3(){
ModelAndView mav = new ModelAndView();
//设置视图名称:要跳转的路径
mav.setViewName("success");
//设置要传递的数据
mav.addObject("name", "老王");
return mav;
}
/**
* 请求转发跳转,并传递数据
* 方式二:方法直接返回ModelAndView。
* 不用自己创建ModelAndView,让SpringMVC传递给我们一个
*/
@RequestMapping("/data4")
public ModelAndView data4(ModelAndView mav){
//设置视图名称:要跳转的路径
mav.setViewName("forward:/success.jsp");
//设置要传递的数据
mav.addObject("name", "王中王");
return mav;
}
三、直接返回响应数据
示例:
/**
* 给客户端直接返回数据:使用注解@ResponseBody
* 加上这个注解之后,方法的返回值不再是视图路径,而是要返回给客户端的数据
*/
@ResponseBody
@RequestMapping("/ajaxData2")
public String ajaxData2(){
return "success";
}
拓展
如果使用
@ResponseBody
直接响应的中文字符串,即使配置了CharacterEncodingFilter
,也会有乱码解决方法:在
springmvc.xml
里配置如下:
配置SpringMVC的
StringHttpMessageConverter
进行字符串处理转换,设置采用utf-8
字符集
<!--开启mvc的注解驱动-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="defaultCharset" value="utf-8"/>
<property name="supportedMediaTypes">
<set>
<value>text/plain;charset=utf-8</value>
<value>text/html;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</set>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
响应json格式的两种方式:
-
可以由自己把JavaBean对象转换成json格式的字符串,然后再响应给客户端
-
也可以在方法里直接返回JavaBean对象,使用
@ResponseBody
注解让框架帮我们转换成json格式
因为spring使用的是jacksong,需要在pom.xml中导入依赖:jackson-databind
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
使用示例:
/**
* 给客户端直接返回数据:使用注解@ResponseBody
* 加上这个注解之后,方法的返回值如果是JavaBean对象,SpringMVC会帮我们转换成json,再返回给客户端
* 注意:SpringMVC使用的是Jackson,所以在pom.xml里必须要导入jackson的依赖坐标
*/
@ResponseBody
@RequestMapping("/ajaxData3")
public User ajaxData3(){
User user = new User();
user.setUsername("张三");
user.setAge(20);
return user;
}