SpringMVC之域对象共享数据的多种方式

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。SpringMVC之域对象共享数据的多种方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContextHttpSessionHttpServletRequestPageContext

  1. ServletContext 共享域:ServletContext 对象可以在整个 Web 应用程序中共享数据,是最大的共享域。一般可以用于保存整个 Web 应用程序的全局配置信息,以及所有用户都共享的数据。在 ServletContext 中保存的数据是线程安全的。
  2. HttpSession 共享域:HttpSession 对象可以在同一用户发出的多个请求之间共享数据,但只能在同一个会话中使用。比如,可以将用户登录状态保存在 HttpSession 中,让用户在多个页面间保持登录状态。
  3. HttpServletRequest 共享域:HttpServletRequest 对象可以在同一个请求的多个处理器方法之间共享数据。比如,可以将请求的参数和属性存储在 HttpServletRequest 中,让处理器方法之间可以访问这些数据。
  4. PageContext 共享域:PageContext 对象是在 JSP 页面Servlet 创建时自动创建的。它可以在 JSP 的各个作用域中共享数据,包括pageScoperequestScopesessionScopeapplicationScope 等作用域。

共享域的作用是提供了方便实用的方式在同一 Web 应用程序的多个组件之间传递数据,并且可以将数据保存在不同的共享域中,根据需要进行选择和使用。

本次场景演示使用Thymeleaf服务器渲染技术。

向Request域中共享数据

使用HttpServletRequest向域中共享数据

@GetMapping("/testServletScope")
public String testServlet(HttpServletRequest request) {
     request.setAttribute("testRequestScope", "hello,servlet");
     return "success";
}

使用ModelAndView向域中共享数据

@GetMapping("/testModelAndView")
public ModelAndView testModelAndView() {
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("testRequestScope", "hello,ModelAndView");
	modelAndView.setViewName("success");
	return modelAndView;
}

使用Model向域中共享数据

@GetMapping("/testModel")
public String testModel(Model model) {
	model.addAttribute("testRequestScope", "hello,Model");
	return "success";
}

使用Map集合向域中共享数据

@GetMapping("/testMap")
public String testMap(Map<String, Object> map) {
	map.put("testRequestScope","hello,Map");
	return "success";
}

使用ModelMap向域中共享数据

@GetMapping("/testModelMap")
public String testModelMap(ModelMap modelMap) {
	modelMap.addAttribute("testRequestScope","hello,ModelMap");
	return "success";
}

向session域中共享数据

@GetMapping("/testSession")
public String testSession(HttpSession session) {
	session.setAttribute("testSessionScope","hello,session");
	return "success";
}

向Application域中共享数据

//方式1
@GetMapping("/testApplication")
public String testApplication(HttpSession session) {
	ServletContext application = session.getServletContext();
	application.setAttribute("testApplicationScope","hello,Application");
	return "success";
}

//方式2
//springmvc会在初始化容器的时候,将ServletContext对象存储到IoC容器中
@Autowired
private ServletContext servletContext;

@GetMapping("/testApplication2")
public String testApplication2(HttpSession session) {
	ServletContext application = session.getServletContext();
	application.setAttribute("testApplicationScope","Hello,ApplicationContext");
	return "success";
}

测试

创建testScope.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>测试域对象</title>
</head>
    <body>
        <a th:href="@{/testServletScope}">测试通过Servlet向域中共享数据</a><br/>
        <a th:href="@{/testModelAndView}">测试通过ModelAndView向域中共享数据</a><br/>
        <a th:href="@{/testModel}">测试通过Model向域中共享数据</a><br/>
        <a th:href="@{/testMap}">测试通过Map集合向域中共享数据</a><br/>
        <a th:href="@{/testModelMap}">测试通过ModelMap向域中共享数据</a><br/>
        <a th:href="@{/testSession}">测试向Session域中共享数据</a><br/>
        <a th:href="@{/testApplication}">测试向Application域中共享数据</a><br/>
    </body>
</html>

创建success.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>SUCCESS...</h2>
<p th:text="${testRequestScope}"></p>
<p th:text="${session.testSessionScope}"></p>
<p th:text="${application.testApplication}"></p>
</body>
</html>

请求页面跳转

@GetMapping("/testScope")
public String testScope() {
    return "testScope";
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/227734.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!