- String类型的转发
@RequestMapping("/testInterceptor")
public String testInterceptor(){
System.out.println("controller方法执行了");
return "success";
}
- void类型的转发
@RequestMapping("/testRequestAndResponse")
public void testRequestAndResponse(HttpServletRequest request, HttpServletResponse response) throws Exception{
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
// return "forward:/WEB-INF/pages/success.jsp";
}
这两种方法路径必须写成实际视图 url,不能写逻辑视图。
- void类型的重定向
@RequestMapping("/testRequestAndResponse")
public void testRequestAndResponse(HttpServletRequest request, HttpServletResponse response) throws Exception{
response.sendRedirect(request.getContextPath()+"/index.jsp");
// return "redirect:/success.jsp";
}
如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF目录中,否则无法找到。
如果使用return的方法就不需要加上项目名,redirect底层会帮我们加上。
- ModelAndView
public ModelAndView testModelAndView(){
ModelAndView mv = new ModelAndView();
User user = new User();
user.setPassword("123");
user.setUsername("zhangsan");
user.setAge(123);
mv.addObject("user",user);
mv.setViewName("success");
return mv;
}
ModelAndView可以添加对象,也可以设置转发的逻辑视图。
- ResponseBody 响应 json 数据
Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入 jackson 的包。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
使用实例
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println(user);
user.setUsername("aaa");
return user;
}
springmvc将requestbody中的Json数据封装到user中,再将user转为json数据返回回去。