• [SpringMVC]第三篇:作用域传参


    四大域: 

     

    PageContext对象(不常用)

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

    request对象(经常用)

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

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

    session对象(登录,会话时会用)

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

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

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

    application(ServletContext)对象(不常用)

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

    特点:一个项目只有一个,在服务器启动的时候即完成初始化创建无论如何获取都是同一个项目。

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

    1 传统方式传递数据(不推荐)


    定义Controller
     

    1.  package com.msb.controller;
    2. import com.msb.pojo.User;
    3. import com.msb.service.UserService;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.stereotype.Controller;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import javax.servlet.ServletContext;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletRequestWrapper;
    10. import javax.servlet.http.HttpSession;
    11. import java.util.List;
    12. /**
    13.  * @Author:
    14.  * @Description: MircoMessage:Mark_7001
    15.  */
    16. @Controller
    17. public class ScopeController {
    18.     @Autowired
    19.     private UserService userService;
    20.     /*
    21.     * request,session 这两个域直接放在参数列表上即可,SpringMVC就可以给我们注入
    22.     * ServletContext对象(application域) 不能直接放在参数列表上的
    23.     * */
    24.     @RequestMapping("setData")
    25.     public String setData(HttpServletRequest req,HttpSession session){
    26.         List users = userService.findAllUser();
    27.         // 向三个域中放入数据
    28.         req.setAttribute("message", "reqMessage");
    29.         req.setAttribute("users", users);
    30.         session.setAttribute("message", "sesssionMessage");
    31.         session.setAttribute("users", users);
    32.         ServletContext application = req.getServletContext();
    33.         application.setAttribute("message", "applictionMessage");
    34.         application.setAttribute("users", users);
    35.         // 跳转至showDataPage
    36.         return "/showDataPage.jsp";
    37.     }
    38. }


    定义showDataPage.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4.     <title>Titletitle>
    5. head>
    6. <body>
    7. <%--域中的数据--%>
    8. requestScope :message:${requestScope.message} ,uname:${requestScope.users[0].uname} <br/>
    9. sessionScope :message:${sessionScope.message} ,uname:${sessionScope.users[0].uname} <br/>
    10. applicationScope :message:${applicationScope.message} ,uname:${applicationScope.users[0].uname} <br/>
    11. <%--请求参数--%>
    12. requestParam:${param.message}
    13. body>
    14. html>

    2使用Model传递数据(只作用于request作用域,若是想使用session域或者application域,还需使用方式一)

    1.     /*model对象addAttribute
    2.     * 主要是对请求域传递数据进行了API上的封装
    3.     * 降低controller和Servlet之间的耦合度
    4.     * 重定向下,没法使用model传递域中的数据
    5.     * model中的字符串类型的键值对信息会转换为请求参数,转发给目标组件
    6.     * */
    7.     @RequestMapping("setData2")
    8.     public String setData2(Model model){
    9.         List users = userService.findAllUser();
    10.         // 向域中放入数据
    11.         model.addAttribute("message", "reqMessage");
    12.         model.addAttribute("users", users);
    13.         // 跳转至showDataPage
    14.                                                                                 // return "forward:/showDataPage.jsp";
    15.         return "redirect:/showDataPage.jsp";
    16.     }


    3使用ModelAndView传递数据(只作用于request作用域,若是想使用session域或者application域,还需使用方式一)


     

    1. /*
    2.     * ModelAndView
    3.     * Model数据
    4.     * View 视图
    5.     * */
    6.     @RequestMapping("setData3")
    7.     public ModelAndView setData3(){
    8.         ModelAndView mv=new ModelAndView();
    9.         Map model = mv.getModel();
    10.         // 向request域中放入数据
    11.         List users = userService.findAllUser();
    12.         model.put("message", "reqMessage");
    13.         model.put("users", users);
    14.         // 设置视图
    15.         //mv.setViewName("forward:/showDataPage.jsp");
    16.         mv.setViewName("redirect:/showDataPage.jsp");
    17.         return mv;
    18.     }

  • 相关阅读:
    RabbitMQ实践——最大长度队列
    人体改造 VS 数字化身
    Spring自动加载数据几种方式执行顺序
    Flutter布局组件:水平/垂直组件、叠加布局组件、流式布局组件
    OpenStack 删除一个计算节点
    文件操作(个人学习笔记黑马学习)
    37.解数独(内含回溯算法重要思路)
    MyBatis环境配置及查询操作
    鸿蒙Harmony应用开发—ArkTS声明式开发(自定义事件分发)
    为什么许多shopify独立站卖家都在用聊天机器人?一分钟读懂行业秘密!
  • 原文地址:https://blog.csdn.net/listeningdu/article/details/128129404