SpringMVC_03响应篇

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"; 
        } 
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值