SpringMVC - (05) 域对象共享数据

image-20230206074352715

SpringMVC - (05) 域对象共享数据

1. 域对象的简介

域对象的作用:保存数据,获取数据,共享数据.

Servlet三大域对象:

对象名称对象的类型
requestHttpServletRequest
sessionHttpSession
applicationServletContext

1.1 request

创建:客户端向服务器发送一次请求,服务器就会创建request对象.

销毁:服务器对这次请求作出响应后就会销毁request对象.

有效:仅在当前请求中有效。

1.2 session

创建:服务器端第一次调用getSession();(保存在服务器内存中)

销毁
1.非正常关闭服务器(正常关闭session会序列化,再次启动服务器session会被反序列化);
2.session过期了默认30分钟.
3.手动调用session.invalidate();
注意:关闭浏览器再次访问会找不到session的会话id而不是session被销毁了。

有效:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。

1.3 application

创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext类.

销毁:服务器关闭或者项目从服务器中移除的时候.

有效:此信息在整个服务器上被保留。

2. 向request域对象共享数据

向域对象共享数据的方式:

  • 使用原生servlet的API
  • 使用SpringMVC提供的API
    • ModelAndView
    • Model
    • map
    • ModelMap

2.1 使用ServletAPI向request域对象共享数据

将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(HttpServletRequest request){
        // 通过getParameter()获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 通过setAttribute()向域中共享数据
        request.setAttribute("username", username);
        request.setAttribute("password", password);
        return "show";
    }
}

通过request.getParameter(“username”)获取到请求报文中username

通过request.getParameter(“password”)获取到请求报文中password

通过request.setAttribute(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${键名}直接获取

客户端发起请求:

image-20230327003324758

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${username}"></h2>
  <h2 th:text="'password:' + ${password}"></h2>
</body>
</html>

在show.html页面通过 u s e r n a m e 和 {username}和 username{password}获取到username和password

image-20230327003727073

2.2 使用ModelAndView向request域对象共享数据

ModelAndView有Model和View的功能

  • Model主要用于向请求域共享数据
  • View主要用于设置视图,实现页面跳转

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public ModelAndView show(String username, String password){
        //创建ModelAndView对象
        ModelAndView mav = new ModelAndView();
        //向请求域共享数据
        mav.addObject("username", username);
        mav.addObject("password", password);
        //设置视图,实现页面跳转
        mav.setViewName("show");
        return mav;
    }
}

通过mav.addObject(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${键名}直接获取

客户端发起请求:

image-20230327010549244

控制器接收到请求参数,向域中存储username和password,然后通过mav.setViewName(“show”)设置视图,跳转到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${username}"></h2>
  <h2 th:text="'password:' + ${password}"></h2>
</body>
</html>

在show.html页面通过 u s e r n a m e 和 {username}和 username{password}获取到username和password

image-20230327010607016

注意:方法的返回值是一个ModelAndView对象

2.3 使用Model向request域对象共享数据

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(String username, String password,Model model){
        //向域中共享数据
        model.addAttribute("username", username);
        model.addAttribute("password", password);
        return "show";
    }
}

通过model.addAttribute(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${键名}直接获取

客户端发起请求:

image-20230327010447088

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${username}"></h2>
  <h2 th:text="'password:' + ${password}"></h2>
</body>
</html>

在show.html页面通过 u s e r n a m e 和 {username}和 username{password}获取到username和password

image-20230327010519483

2.4 使用Map向request域对象共享数据

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(String username, String password, Map<String, Object> map){
        //向域中共享数据
        map.put("username", username);
        map.put("password", password);
        return "show";
    }
}

通过map.put(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${键名}直接获取

客户端发起请求:

image-20230327010908945

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${username}"></h2>
  <h2 th:text="'password:' + ${password}"></h2>
</body>
</html>

在show.html页面通过 u s e r n a m e 和 {username}和 username{password}获取到username和password

image-20230327010922373

2.5 使用ModelMap向request域对象共享数据

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(String username, String password, ModelMap modelMap){
        //向域中共享数据
        modelMap.addAttribute("username", username);
        modelMap.addAttribute("password", password);
        return "show";
    }
}

通过modelMap.addAttribute(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${键名}直接获取

客户端发起请求:

image-20230327011137378

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${username}"></h2>
  <h2 th:text="'password:' + ${password}"></h2>
</body>
</html>

在show.html页面通过 u s e r n a m e 和 {username}和 username{password}获取到username和password

image-20230327011155865

3. 向session域共享数据

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(String username, String password, HttpSession session){
        //向域中共享数据
        session.setAttribute("username", username);
        session.setAttribute("password", password);
        return "show";
    }
}

通过 session.setAttribute(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${session.键名}直接获取

客户端发起请求:

image-20230327013313357

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${session.username}"></h2>
  <h2 th:text="'password:' + ${session.password}"></h2>
</body>
</html>

在show.html页面通过 s e s s i o n . u s e r n a m e 和 {session.username}和 session.username{session.password}获取到username和password

image-20230327013348260

4. 向application域共享数据

控制器:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/show")
    public String show(String username, String password, HttpSession session){
        // 创建SErvletContext对象
        ServletContext application = session.getServletContext();
        // 向域中共享数据
        application.setAttribute("username", username);
        application.setAttribute("password", password);
        return "show";
    }
}

通过application.setAttribute(键名, 值)方法,将想要向域中共享的数据存储到域中,在展示页面通过${application.键名}直接获取

客户端发起请求:

image-20230327014026029

控制器接收到请求参数,向域中存储username和password,然后转发到show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>共享数据展示</title>
</head>
<body>
  <h1>共享的数据</h1>
  <h2 th:text="'username:' + ${application.username}"></h2>
  <h2 th:text="'password:' + ${application.password}"></h2>
</body>
</html>

在show.html页面通过 a p p l i c a t i o n . u s e r n a m e 和 {application.username}和 application.username{application.password}获取到username和password

image-20230327014050366

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值