深度学习springMVC(四)springmvc如何实现数据的响应,SpringMVC中使用作用域对象完成数据的流转(看不懂你打我)

2021-07-08 15:23:28 浏览数 (1)

目录

  • 前提
  • 使用Response对象完成响应
  • 使用forward关键字完成响应
  • 使用redirect关键字完成响应
  • SpringMVC中使用作用域对象完成数据的流转
    • 作用域对象复习
    • SpringMVC中使用作用域对象流转数据
      • 使用request对象作为请求转发数据流转的载体
      • 2.使用session对象作为同一个用户的不同请求的数据流转的载体
      • 3.使用application对象作用项目公共数据的载体。
    • SpringMVC的Model对象的使用

前提

我们已经知道了如何使用springmvc获取前端的数据

深度学习springMVC(二)SpringMVC中单元方法如何获取请求数据,5种方法(看不懂你打我)

那么获取到数据,处理完成,返回给用户什么呢?返回的数据格式是什么呢?

使用Response对象完成响应

代码语言:javascript复制
  /***
     * 使用response对象完成响应
     *  1.单元方法的返回值类型设置void
     *      因为使用response对象在单元方法中直接对此次请求进行了响应,不再通过
     *      DispatcherServlet了,既然已经响应了,就不需要再给DispatcherServlet返回值了。
     *  2. 在单元方法上声明HttpServletResponse形参,来接收
     *      此次请求的response对象。
     *  3.在单元方法中直接使用response对象完成响应
     *      直接响应
     *      请求转发
     *      重定向
     */
    @RequestMapping("resp")
    public void demoResp(String uname,Integer age,HttpServletRequest req,HttpServletResponse response) throws IOException, ServletException {
            //处理请求
                System.out.println("MyControllerResp.demoResp:使用原生的response对象完成响应:" uname ":" age);
            //响应结果
                response.setContentType("text/html;charset=utf-8");
                //直接响应
                    //response.getWriter().write("直接响应");
                //请求转发
                    //req.getRequestDispatcher("/index.jsp").forward(req,response);
                //重定向
                    response.sendRedirect(req.getContextPath() "/redirect.jsp");
    }

直接响应

使用forward关键字完成响应

作用:实现请求转发

使用:通过单元方法的返回值来告诉DispatcherServlet请求转发指定的资源。

注意:如果是请求转发,forward关键字可以省略不写的。

代码语言:javascript复制
    /**
     * 使用forward关键字完成请求转发jsp资源
     * 使用:
     *  通过单元方法的返回值,来告诉DispatcherServlet要请求转发的资源。
     * 格式:
     *   return "forward:/jsp资源路径";
     * 注意:
     *  第一个/表示项目根目录
     */
    @RequestMapping("forwardJsp")
    public String demoForwardJsp(String uname,Integer age){
        //处理请求
        System.out.println("MyControllerResp.demoForwardJsp:forward关键字请求转发jsp:" uname ":" age);
        //响应结果
        return "forward:/index.jsp";
    }

使用redirect关键字完成响应

作用:完成资源的重定向

使用:通过单元方法的返回值来告诉DispatcherServlet重定向指定的资源。

代码语言:javascript复制
  /**
     * redirect关键字重定向到jsp资源
     *  使用:
     *      在单元方法的返回值中使用redirect关键字告诉DispatcherServlet要重定向的jsp资源路径
     *  注意:
     *       第一个/表示项目根目录
     *
     */
    @RequestMapping("redirectJsp")
    public String demoRedirectJsp(String uname,Integer age){
        //处理请求
        System.out.println("MyControllerResp.demoRedirectJsp:重定向到jsp资源:" uname ":" age);
        //响应结果
        return "redirect:/redirect.jsp";
    }
    /**
     * redirect关键字重定向到单元方法
     *  使用:
     *      在单元方法的返回值中使用redirect关键字告诉DispatcherServlet要重定向的jsp资源路径
     *  注意:
     *       第一个/表示项目根目录
     *
     */
    @RequestMapping("redirectMethod")
    public String demoRedirectMethod(String uname,Integer age){
        //处理请求
        System.out.println("MyControllerResp.demoRedirectMethod:重定向到单元方法:" uname ":" age);
        //响应结果
        return "redirect:/testMethod";
    }

SpringMVC中使用作用域对象完成数据的流转

作用域对象复习

1.PageContext对象

作用域范围:当前jsp页面内有效

2.request对象

作用域范围:一次请求内。

作用: 解决了一次请求内的资源的数据共享问题

3.session对象

作用域范围:一次会话内有效。

说明:浏览器不关闭,并且后台的session不失效,在任意请求中都可以获取

到同一个session对象。

作用:解决了一个用户不同请求的数据共享问题。

4.application(ServletContext)对象

作用域范围:整个项目内有效。

特点:一个项目只有一个,在服务器启动的时候即完成初始化创建

无论如何获取都是同一个项目。

作用:解决了不同用户的数据共享问题。

SpringMVC中使用作用域对象流转数据

使用request对象作为请求转发数据流转的载体

注意:使用方式和原有Servlet中使用方式完全一致,只不过

现在需要在单元方法中来使用。

代码语言:javascript复制
 //声明单元方法:使用request对象作为数据流转的载体
    @RequestMapping("dataReq")
    public String demoReq(HttpServletRequest request){
        //处理请求
        System.out.println("MyController.demoReq:使用request对象作为数据流转的载体");
        //响应结果
        request.setAttribute("str","我是request对象");
        return "forward:/req.jsp";
    }

2.使用session对象作为同一个用户的不同请求的数据流转的载体

注意:使用方式和原有Servlet中使用方式完全一致,只不过

现在需要在单元方法中来使用,在单元方法的形参上直接声明session即可。

代码语言:javascript复制
 //声明单元方法:使用session对象作为数据流转的载体
    @RequestMapping("dataSession")
    public String demoSession(HttpSession session){
        //处理请求
        System.out.println("MyController.demoSession:使用session对象作为数据流转的载体");
        //响应结果
        session.setAttribute("str","我是session对象");
        return "redirect:/session.jsp";
    }

3.使用application对象作用项目公共数据的载体。

注意:application对象的获取,只能我们自己在单元方法中获取,不能

使用形参的方式,让DispatcherServlet帮我们获取。

代码语言:javascript复制
 //声明单元方法:使用application对象作为数据流转的载体
    @RequestMapping("dataApplication")
    public String demoApplication(HttpServletRequest request){
        //处理请求
        System.out.println("MyController.demoApplication:使用application对象作为数据流转的载体");
        //获取application对象
        ServletContext servletContext=request.getServletContext();
        //响应结果
        servletContext.setAttribute("str","我是application对象");
        return "redirect:/application.jsp";
    }

SpringMVC的Model对象的使用

作用: 作为数据流转的载体,SpringMVC官方提供的一个对象。

使用在单元方法上声明Model类型的形参即可。

注意:Model对象是由DispatcherServlet创建并作为实参传递给单元方法使用

特点:

请求转发:

model对象中存储的数据,相当于存储到了request对象中

我们在jsp中直接按照request对象作用域取值的方式来获取数据即可。

重定向:

在重定向中,会将第一次请求中model对象的数据作为第二次请求的

请求数据携带,第一次请求的model对象销毁。只能携带基本类型的数据。

代码示例:

请求转发中使用Model对象作为数据流转的载体

代码语言:javascript复制
 //声明单元方法:请求转发中使用model作为数据流转的载体
    @RequestMapping("dataModel")
    public String demoModel(Model model){
        //处理请求
        System.out.println("MyController.demoModel:请求转发中使用Model对象作为数据流转的载体");
        //响应结果
        model.addAttribute("str","我是model对象--请求转发");
        return "forward:/model.jsp";

    }




    //声明单元方法:请求转发中使用model作为数据流转的载体
    @RequestMapping("dataModel2")
    public String demoModel2(Model model){
        //处理请求
        System.out.println("MyController.demoModel2:重定向中使用Model对象作为数据流转的载体");
        //响应结果
        model.addAttribute("str","我是model对象--重定向");
        return "redirect:/model.jsp";
    }

0 人点赞