响应的返回值类型为String(即视图名)
控制器部分:
@RequestMapping("/testString")
public String testString(Model model){
User user = new User();
user.setUsername("张三");
user.setPassword("123");
user.setAge(30);
// model对象
model.addAttribute("user",user);
return "success";
}
success.jsp:
<body>
${user.username}
${user.password}
</body>
响应的返回值类型为void
方式1:请求转发到指定jsp
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 编写请求转发的程序
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
return;
}
方式2:重定向
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.sendRedirect(request.getContextPath()+"/index.jsp");
return;
}
方式3:直接响应,并不想跳转页面
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 直接会进行响应
response.getWriter().print("你好");
return;
}
方式4:默认去找testVoid.jsp
@RequestMapping("/testVoid")
public void testVoid(){
}
响应的返回值类型为ModelAndView
ModelAndView是SpringMVC框架提供的一个对象,该对象可以作为控制器方法的返回值。
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();
User user = new User();
user.setUsername("张三");
user.setPassword("123");
user.setAge(30);
// 把user对象存储到mv对象中,也会把user对象存入到request对象中
mv.addObject("user",user);
// 设置跳转页面,利用了视图解析器,根据"success"找到success.jsp
mv.setViewName("success");
return mv;
}
上面这种方式其实和响应的返回值类型为String
的方式一样,因为响应的返回值类型为String
中的方式底层还是ModelAndView来实现响应和跳转。
success.jsp:
<body>
${user.username}
${user.password}
</body>
使用forward(转发)和redirect(重定向)进行页面跳转
这种方式不会使用视图解析器,使用forward的时候需要写全路径
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
// 请求的转发
// return "forward:/WEB-INF/pages/success.jsp";
// 重定向
return "redirect:/index.jsp";
}
返回json格式响应
需要引入jar包:
<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>
<script>
// 页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
$.ajax({
url:"testAjax",
contentType:"application/json;charset=UTF-8",
//data:'{"username":"张三","password":"123","age":30}',
data:JSON.stringify({"username":"张三","password":"123","age":30}),
dataType:"json",
type:"post",
success:function(data){
// data服务器端响应的json的数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
}
});
});
});
</script>
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
// 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
user.setUsername("李四");
user.setAge(40);
// 返回user对象,因为有@ResponseBody注解,框架会自动将该对象的属性转成json字符串
return user;
}