1.响应之返回值是String类型~
@Controller
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("testString方法执行了...");
// 模拟从数据库中查询出User对象
User user = new User();
user.setUsername("美美");
user.setPassword("123");
user.setAge(30);
// model对象
model.addAttribute("user",user);
return "success";
}
}
注意 Model的addAttribute()可以往request域中存数据,这样在跳转jsp页面时就可以使用el表达式取值
2.响应之返回值是void类型
@Controller
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid方法执行了...");
// 编写请求转发的程序
// request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
// 重定向
// response.sendRedirect(request.getContextPath()+"/index.jsp");
// 直接会进行响应
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("你好");
return;
}
}
注意:如果是通过重定向的方式进行页面跳转时不能访问/WEB-INF目录下资源,/WEB-INF只能通过请求转发的方式访问到
3.响应之返回值是ModelAndView类型
@Controller
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView方法执行了...");
// 封装数据
mv.addObject("result","hello ModelAndView");
// 封装结果视图
mv.setViewName("success");
return mv;
}
}
配合jsp
补充
Model、ModelMap和ModelAndView的使用详解
https://blog.csdn.net/itbiggod/article/details/79685610
4.响应之使用forward和redirect进行页面跳转
@Controller
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了...");
// 请求的转发
// return "forward:/WEB-INF/pages/success.jsp";
// 重定向
return "redirect:/index.jsp";
}
}
注意事项:
重定向不能直接访问/WEB-INF/目录下资源
5.响应json数据
前端代码
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
</head>
<body>
<button id="btn">发送ajax的请求</button>
</body>
</html>
前端代码注意事项
1.contentType必须是"application/json;charset=UTF-8" 否则会报415错误
2.data传的参数必须是'{"key":value,"key":value}' 否则会报400错误
注意不能是 {"key":value} 或 "key=value"
控制器代码
@Controller
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testAjax方法执行了...");
System.out.println(user);
// 做响应
user.setUsername("ajax modify");
// 做响应
return user;
}
}
spring.xml的配置: mvc:annotation-driven 注解驱动
需要用到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>
注意: 配合异步ajax
1.此处是post请求
2.@RequestBody User user 代表将前段提交过来的json字符串数据直接封装到对象中
3.@ResponseBody User 代表将返回的user对象转换成json字符串回写到浏览器ajax的回调处
4.jackson版本需要在2.7.0以上