1、返回ModelAndView
ModelAndView中的视图会经过你视图解析器处理得到真实的jsp文件页面并且跳转。
@RequestMapping("test01")public ModelAndView test01() {ModelAndView mv = new ModelAndView();// 携带数据mv.addObject("teamName", "牛逼");// 页码转载mv.setViewName("result");// 经过视图解析器处理: /jsp/result.jspreturn 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");}