响应数据与视图
返回字符串
Controller 方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

@RequestMapping(value="/hello")
public String sayHello() {
// 跳转到 success 页面
return "success";
}返回 void
1、默认会跳转到同 mapping 同名的页面,如@RequestMapping(value="/hello") 默认跳转到 hello 页面,不存在报 404
2、已知道 Servlet 原始 API 可以作为控制器中方法的参数,可使用其做转发或重定向
@RequestMapping(value = "/initAdd")
public void initAdd(HttpServletRequest request, HttpServletResponse response) throws
Exception { System.out.println(" 请求转发或者重定向 ");
// 请求转发 转发网址栏地址不变 页面变
// request.getRequestDispatcher("/WEB-INF/pages/add.jsp").forward(request,response);
// 重定向 跳转网址会产生变化
// response.sendRedirect(request.getContextPath()+"/add2.jsp");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 用 getWriter()直接响应数据
response.getWriter().print(" 你好 ");
return;
}3、使用 SpringMVC 关键字进行转发与重定向
如下重定向与转发不仅仅可以跳页面也能跳到其他 Controller 的 mapping
//"forward: 转发的 JSP 路径 ",不走视图解析器了,所以需要编写完整的路径
// 转发
@RequestMapping("/delete")
public String delete() throws Exception {
// return "forward:/WEB-INF/pages/success.jsp";
return "forward:/user/findAll";
}
// 重定向 到本机不需要完整路径
@RequestMapping("/count")
public String count() throws Exception {
return "redirect:/add.jsp";
// return "redirect:/user/findAll";
}Model 与 ModelAndView
Model
Model 作为参数可调用其 addAttribute 方法添加数据到 request 域,如下:
@RequestMapping(value = "/initUpdate")
public String initUpdate(Model model) {
// 模拟从数据库中查询的数据
User user = new User();
user.setUsername(" 张三 ");
model.addAttribute("user", user);
return "update";
}在 jsp 页面可通过 ${requestScope} 或 ${user.username} 调用 request 中内容。
ModelAndView
ModelAndView 对象是 Spring 提供的一个对象,可以用来调整具体的 JSP 视图。它可以同时传入跳转页面名与数据对象,与上方 Model 功能差不多。只是 Model 将数据存在 Model 中,返回 String 页面名称,一般作为参数,但 ModelAndView 是作为返回值的。
/**
* 返回 ModelAndView 对象
* 可以传入视图的名称(即跳转的页面),还可以传入对象。
*
* @return
* @throws Exception
*/
@RequestMapping(value = "/findAll")
public ModelAndView findAll() throws Exception { ModelAndView mv = new ModelAndView();
// 跳转到 list.jsp 的页面
mv.setViewName("list");
// 模拟从数据库中查询所有的用户信息
List<User> users = new ArrayList<>();
User user1 = new User();
user1.setUsername(" 张三 ");
user1.setPassword("123");
User user2 = new User();
user2.setUsername(" 赵四 ");
user2.setPassword("456");
users.add(user1);
users.add(user2);
// 添加对象
mv.addObject("users", users);
return mv;
}JSP 页面开启 c 标签调用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
获取集合中值通过 forEach 遍历
<c:forEach items="${ users }" var="user">
${ user.username }
</c:forEach>ResponseBody 返回 json
@ResponseBody 注解写在方法上或者方法返回的类型前,或者写在类上或者使用 @RestCotroller 注解
public @ResponseBody Address testJson(@RequestBody String body) {}RequestBody 转对象
上述代码如果 @RequestBody 注解修饰的 String 变量封装成 JavaBean 对象
public @ResponseBody Address testJson(@RequestBody Address address) {}使用 jackson 添加 jar 包即可,Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换
<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>
- 返回字符串
- 返回 void
- Model 与 ModelAndView
- Model
- ModelAndView
- ResponseBody 返回 json
- RequestBody 转对象
- 返回字符串
- 返回 void
- Model 与 ModelAndView
- Model
- ModelAndView
- ResponseBody 返回 json
- RequestBody 转对象