1、返回ModelAndView
ModelAndView中的视图会经过你视图解析器处理得到真实的jsp文件页面并且跳转。
@RequestMapping("test01")
public ModelAndView test01() {
ModelAndView mv = new ModelAndView();
// 携带数据
mv.addObject("teamName", "牛逼");
// 页码转载
mv.setViewName("result");// 经过视图解析器处理: /jsp/result.jsp
return mv;
}
2、返回字符串
默认还是会经过视图解析器,将该字符串转为对应的jsp页面地址以及跳转
@RequestMapping("test02")
public String test02(HttpServletRequest req) {
Team team = new Team();
team.setLocation("henan");
team.setTeamId(12);
team.setTeamName("AE");
// 携带数据
req.setAttribute("team", team);
req.getSession().setAttribute("team", team);
// 页面跳转
return "result";
}
3、返回对象类型
任意对象类型都可以返回,而是直接作为数据返回后直接展示,一般都是前端发起ajax异步请求
返回的时候需要添加注解@ResponseBody ,将对象转化为你json格式的数据放入到响应体,所以需要引入json依赖
前端可以通过ajax进行请求,然后对返回值进行获取
加上@ResponseBody注解之后,返回值不会经过视图解析器,所以返回值只是单纯的字符串,不会进行页面的跳转。
<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-databind</artifactId>
<version>2.9.0</version>
</dependency>
@ResponseBody
@RequestMapping("test03-1")
public Integer test031(HttpServletRequest req) {
return 66;
}
@ResponseBody
@RequestMapping("test03-2")
public String test032(HttpServletRequest req) {
return "test"; // 直接返回数据,分返回字符串区别开
}
@ResponseBody
@RequestMapping("test03-3")
public Team test033(HttpServletRequest req) {
Team team = new Team();
team.setLocation("南阳");
team.setTeamId(12);
team.setTeamName("AE");
return team;
}
@ResponseBody
@RequestMapping("test03-4")
public List<Team> test034(HttpServletRequest req) {
List<Team> teams = new ArrayList<Team>();
for(int i = 1; i < 5; i ++){
Team team = new Team();
team.setLocation("南阳" + i);
team.setTeamId(12+i);
team.setTeamName("AE"+i);
teams.add(team);
}
return teams;
}
@ResponseBody
@RequestMapping("test03-5")
public Map<String, Team> test035(HttpServletRequest req) {
Map<String, Team> teams = new HashMap<String, Team>();
for(int i = 1; i < 5; i ++){
Team team = new Team();
team.setLocation("南阳" + i);
team.setTeamId(12+i);
team.setTeamName("AE"+i);
team.setDate(new Date());
teams.put(team.getTeamId()+"", team);
}
return teams;
}
4、无返回值
//通过 HttpServletRequest 做服务端跳转
@RequestMapping("test04-1")
public void test041(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("直接使用HttpServletRequest进行服务器转发");
req.getRequestDispatcher("/jsp/OK.jsp").forward(req, resp);
}
//通过 HttpServletResponse 做重定向
@RequestMapping("test04-2")
public void test042(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("直接使用HttpServletResponse进行客户端重定向");
resp.sendRedirect("/jsp/OK.jsp");
}
//通过 HttpServletResponse 给出响应
@RequestMapping("test04-3")
public void test043(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html:charset=utf-8");
System.out.println("返回void类型测试---直接返回字符串");
PrintWriter writer = resp.getWriter();
writer.write("返回void类型测试---直接返回字符串");
writer.flush();
writer.close();
}
//也可以自己手动指定响应头去实现重定向:
@RequestMapping("test04-4")
public void test044(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(302);
resp.setHeader("Location", "/jsp/OK.jsp");
}