SpringMVC_03响应篇
无数据跳转页面
-
当处理器方法的返回值类型为String类型时,返回值就是设置的页面
-
默认是转发,格式:return “forward:地址” 支持访问WEB-INF下的页面
使用重定向,格式:return “redirect:地址” 不支持访问WEB-INF下的页面
@Controller public class UserController{ @RequestMapping("/page") public String page(){ System.out.println("------page"); return "page.jsp";//相当于return "forward:page.jsp" } }
-
页面访问快捷设定,设定后页面只支持跳转,不支持重定向
<!--设定页面加载的前缀后缀,仅适用于默认形式,不适用于手工标注转发或重定向的方式--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean>
@RequestMapping("/page2") public String page2() { return "page"; //配置页面加载的前后缀后,即访问的地址是:拼接字符串“forward:/WEB-INF/page/"+"page"+"".jsp” } //若方法返回值为void,则默认使用映射路径拼接页面地址的前后缀后作为访问路径 @RequestMapping("/page") public void page(){ //访问地址为:/WEB-INF/page/page.jsp }
带数据跳转页面
-
使用HttpServletRequest类型形参进行数据传递
@RequestMapping("/showPageAndData1") public String showPageAndData1(HttpServletRequest request) { request.setAttribute("name","Tom"); return "page"; }
-
使用Model类型形参进行数据传递
- String:仅封装跳转页面的基本信息,底层由ModelAndView实现
- Model:仅封装数据
- ModelAndView:封装数据和视图,包含Model和View两个对象
//使用Model形参传递参数 @RequestMapping("/showPageAndData2") public String showPageAndData2(Model model) { //添加数据的方式,key对value model.addAttribute("name","Tom"); Book book = new Book(); book.setName("SpringMVC"); book.setPrice(100); //添加数据的方式,key对value model.addAttribute("book",book); return "page"; }
-
使用ModelAndView类型形参进行数据传递,返回该对象
//使用ModelAndView形参传递参数,该对象还封装了页面信息 @RequestMapping("/showPageAndData3") public ModelAndView showPageAndData3(ModelAndView modelAndView) { //ModelAndView mav = new ModelAndView(); 替换形参中的参数 Book book = new Book(); book.setName("SpringMVC"); book.setPrice(100); //添加数据的方式,key对value modelAndView.addObject("book",book); //添加数据的方式,key对value modelAndView.addObject("name","Jockme"); //设置页面的方式,该方法最后一次执行的结果生效 //支持转发的手工设定,该设定不会启用前缀后缀的页面拼接格式 //支持重定向的手工设定,该设定不会启用前缀后缀的页面拼接格式 modelAndView.setViewName("page");//转发手工设定“forward:/WEB-INF/page/page.jsp" //返回值设定成ModelAndView对象 return modelAndView; }
数据返回
-
使用response对象返回数据
//使用原生response对象响应数据 @RequestMapping("/showData1") public void showData1(HttpServletResponse response) throws IOException { response.getWriter().write("message"); } //使用@ResponseBody将返回的结果作为响应内容,而非响应的页面名称 @RequestMapping("/showData2") @ResponseBody public String showData2(){ return "{'name':'Tom'}"; }
-
返回JSON数据
<!--开启springmvc注解驱动,对@ResponseBody的注解进行格式增强,追加其类型转换的功能,具体实现由MappingJackson2HttpMessageConverter进行--> <mvc:annotation-driven/>
//使用jackson进行json数据格式转化 @RequestMapping("/showData3") @ResponseBody public String showData3() throws JsonProcessingException { Book book = new Book(); book.setName("SpringMVC"); book.setPrice(100); ObjectMapper om = new ObjectMapper(); return om.writeValueAsString(book); } //使用SpringMVC注解驱动,对标注@ResponseBody注解的控制器方法进行结果转换,由于返回值为引用类型,自动调用jackson提供的类型转换器进行格式转换 @RequestMapping("/showData4") @ResponseBody public Book showData4() { Book book = new Book(); book.setName("SpringMVC"); book.setPrice(100); return book; } //转换集合类型数据 @RequestMapping("/showData5") @ResponseBody public List showData5() { Book book1 = new Book(); book1.setName("SpringMVC入门"); book1.setPrice(100); Book book2 = new Book(); book2.setName("SpringMVC加强"); book2.setPrice(200); ArrayList al = new ArrayList(); al.add(book1); al.add(book2); return al; }
Servlet相关API
-
获取HttpServletRequest/HttpServletResponse/HttpSession
//获取request,response,session对象的原生接口 @RequestMapping("/servletApi") public String servletApi(HttpServletRequest request, HttpServletResponse response, HttpSession session){ System.out.println(request); System.out.println(response); System.out.println(session); return "page"; }
-
获取Head数据
形参注解@RequestHeader:绑定请求头数据和形参的对应关系
//获取head数据的快捷操作方式 @RequestMapping("/headApi") public String headApi(@RequestHeader("Accept-Encoding") String headMsg){ System.out.println(headMsg); return "page"; }
-
获取Cookie数据
形参注解@CookieValue:绑定Cookie数据和形参的对应关系
//获取cookie数据的快捷操作方式 @RequestMapping("/cookieApi") public String cookieApi(@CookieValue("JSESSIONID") String jsessionid){ System.out.println(jsessionid); return "page"; }
-
获取Session数据的快捷方法
形参注解@SessionAttribute:绑定Session数据和形参的对应关系
//获取session数据的快捷操作方式 @RequestMapping("/sessionApi") public String sessionApi(@SessionAttribute("name") String name, @SessionAttribute("age") int age, @SessionAttribute("gender") String gender){ System.out.println(name); System.out.println(age); System.out.println(gender); return "page"; }
类注解@SessionAttributes:声明放入session范围的变量名,适用于Model类型数据传参
@Controller @SessionAttributes(names={"name"}) public class ServletController { @RequestMapping("/setSessionData2") public String setSessionDate2(Model model) { model.addAttribute("name", "Tom"); return "page.jsp"; } }