响应数据和结果视图
* (ModelAndView,Model,Map,ModelMap)---request域对象中
-
返回字符串
1. Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。 @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/testString") //返回类型是String,默认将String类型的返回值作为视图名;处理器中的类类型参数会自动实例化 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); System.out.println(111); return "success"; } @RequestMapping("d2")//返回类型是String,默认将String类型作为视图名;处理器中的类类型参数会自动实例化 public String demo2(Map m) { m.put("msg", "通过map将数据传到前端页面"); return "main"; } @RequestMapping("d3")//返回类型是String,默认将String类型作为视图名;处理器中的类类型参数会自动实例化 public String demo3(ModelMap mm) { mm.addAttribute("msg", "通过ModelMap将数据传到前端页面"); return "main"; } @RequestMapping("d4")//返回类型是String,默认将String类型作为视图名;处理器中的类类型参数会自动实例化 public String demo5(HttpSession session) { session.setAttribute("msg", "session作用域的值"); return "main"; } } 在success.jsp页面 ${user.username} ${user.password} 2. String字符串直接作为Http响应内容返回 @RequestMapping("r1")//方法返回的字符串作为http响应内容返回 @ResponseBody public String demos() { return "<h1>main</h1>"; } //return 乱码解决 * 第一种方法 @RequestMapping(value="r1",produces="text/html;charset=UTF-8") public @ResponseBody String testResponse1() { return "<h1>你要干嘛</h1>"; } * 第二种方法 在 springmvc.xml 中配置 <mvc:annotation-driven conversion-service="myconverService"> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <value>text/html;charset=UTF-8</value> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
-
返回值是void
1. 如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。 1. 默认将(前缀+请求名+后缀)作为默认视图,也可以不跳转页面直接在当前页面返回字符串。 例如: @RequestMapping(value="/initUpdate") 默认会跳转到 initUpdate.jsp的页面。 @RequestMapping("r3")//默认跳转的页面:前缀+请求名+后缀 /r3.jsp public void r3() { } 2. 可以使用请求转发或者重定向跳转到指定的页面 /** * 是void * 请求转发一次请求,不用编写项目的名称 */ @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"); // 直接会进行响应 到默认jsp页面 testVoid.jsp response.getWriter().print("你好"); return; }
-
返回值是ModelAndView对象
1. ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图 可以直接new 这个对象, addobject()存储到 request域中 setViewName() 用于跳转页面 2. 具体的代码如下 @RequestMapping("/testModelAndView") public ModelAndView testModelAndView() { // 创建ModelAndView对象 ModelAndView mv = new ModelAndView(); System.out.println("testModelAndView方法执行了..."); // 模拟从数据库中查询出User对象 User user = new User(); user.setUsername("小凤"); user.setPassword("456"); user.setAge(30); // 把user对象存储到mv对象中,也会把user对象存入到request对象 mv.addObject("user", user); // 跳转到哪个页面 mv.setViewName("success"); return mv; }
-
Model,Map:默认将(前缀+请求名+后缀)作为默认视图
@RequestMapping("r5")//默认跳转的页面:前缀+请求名+后缀 public Model r5(Model m) { m.addAttribute("msg", "klnk"); return m; } @RequestMapping("r6")//默认跳转的页面:前缀+请求名+后缀 public Map r6(Map m) { m.put("msg", "klnksss"); return m; }