浅谈Spring学习之request,session与globalSession作用域

浅谈Spring学习之request,session与globalSession作用域

1. 介绍

在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据。这些作用域的范围从小到大逐级升高,对应的生命周期也逐级递增,具体的介绍如下:

  • request:处理一次请求的过程中有效,即发送一次请求到服务器和接收服务器响应的这段时间。
  • session:处理一次用户登录过程的有效期间。
  • globalSession(基于 Portlet 环境):处理一次用户登录过程的有效期间,在多个 portlet 应用间共享。

2. request 作用域

request 作用域的数据在请求结束后就会销毁,可以用于传递数据给同一个请求处理过程中的其他方法,在 Spring 中使用 request 作用域需要获取对应的 HttpServletRequest 对象,示例代码如下:

@RequestMapping("/test")
public String test(HttpServletRequest request) {
    request.setAttribute("name", "jack");
    return "test";
}

@RequestMapping("/getResult")
public void getResult(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String name = (String) request.getAttribute("name");
    response.getWriter().println("name: " + name);
}

在以上代码中,test 方法向 request 中存储了一个 "name" 属性,getResult 方法从 request 中获取了这个属性并将其输出。

3. session 作用域

session 作用域的数据在用户退出登录或 session 超时后销毁,可以存储用户的登录信息、用户个性化设置等信息,在 Spring 中使用 session 作用域需要获取对应的 HttpSession 对象,示例代码如下:

@RequestMapping("/login")
public String login(HttpSession session) {
    session.setAttribute("username", "jack");
    return "login";
}

@RequestMapping("/getUserInfo")
public void getUserInfo(HttpSession session, HttpServletResponse response) throws IOException {
    String username = (String) session.getAttribute("username");
    response.getWriter().println("username: " + username);
}

在以上代码中,login 方法向 session 中存储了一个 "username" 属性,getUserInfo 方法从 session 中获取了这个属性并将其输出。

需要注意的是,当用户在其他地方登录时,原本存储在 session 中的数据就会丢失,所以我们一般会在每次访问时都重新验证用户的身份。

4. globalSession 作用域

globalSession 作用域与 session 作用域类似,是一个基于 Portlet 环境的全局会话,它可以在多个 portlet 应用间共享数据。在 Spring 中使用 globalSession 作用域需要获取 PortletSession 对象,示例代码如下:

@ActionMapping(params = "action=getUser")
public void getUser(PortletSession session, ActionResponse response) {
    session.setAttribute("username", "jack", PortletSession.APPLICATION_SCOPE);
    response.setRenderParameter("jspPage", "/userInfo.jsp");
}

@RenderMapping(params = "jspPage=userInfo.jsp")
public ModelAndView getUserInfo(PortletSession session) {
    String username = (String) session.getAttribute("username", PortletSession.APPLICATION_SCOPE);
    ModelAndView modelAndView = new ModelAndView("userInfo");
    modelAndView.addObject("username", username);
    return modelAndView;
}

在以上代码中,getUser 方法向 globalSession 中存储了一个 "username" 属性,getUserInfo 方法从 globalSession 中获取了这个属性并将其放到 ModelAndView 对象中返回,最终通过 "userInfo.jsp" 页面展示出来。

5. 总结

在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据,它们的生命周期和作用范围有所不同。在实际应用中,我们可以根据不同的需要选择不同的作用域来存储数据,从而实现数据的传递、共享和保存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Spring学习之request,session与globalSession作用域 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • springboot连接redis并动态切换database的实现方法

    下面我会详细讲解“springboot连接redis并动态切换database的实现方法”的完整攻略。 1. 引入依赖 首先需要在 pom.xml 文件里引入 Redis 相关的依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifac…

    Java 2023年5月20日
    00
  • Spring Bean创建流程分析讲解

    关于Spring Bean创建流程分析的完整攻略,可以从以下几个方面进行讲解: Spring Bean创建流程 Spring Bean的创建流程主要分为以下5个步骤: 定位阶段(Location):Spring通过配置文件或注解等方式确定Bean定义; 加载阶段(Load):将Bean定义解析成Bean对象,并注册到容器中; 实例化阶段(Instantiat…

    Java 2023年5月31日
    00
  • JSP连接SQL Server 2000系统配置

    JSP连接SQL Server 2000需要进行以下步骤: 环境准备 安装JDBC驱动:在JSP项目中引入SQL Server JDBC驱动包,通常是一个jar文件。可以从官方网站下载(https://docs.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sq…

    Java 2023年6月15日
    00
  • jstl标签基础开发步骤(详解)

    jstl是JavaServer Pages标准标记库的缩写,这是一组XML标记,可用于简化JSP页面开发。jstl是一种常用的简化JSP开发的工具,提供了一些标签和函数库,可以方便地对各种数据类型进行处理,并且具有高度的可重用性。 下面是“jstl标签基础开发步骤(详解)”的完整攻略: 步骤一:导入JSTL库 要使用jstl标签库,必须首先把相应的库文件(.…

    Java 2023年6月15日
    00
  • 浅析jQuery Ajax通用js封装

    我将为您详细讲解“浅析jQuery Ajax通用js封装”的完整攻略: 1. 什么是jQuery Ajax通用js封装 jQuery Ajax通用js封装是一种在Javascript中使用jQuery库对Ajax进行封装的方法。通过对Ajax通用操作的封装,可以实现代码的重用,减少代码冗余,提高代码的可维护性。 2. jQuery Ajax通用js封装要点 …

    Java 2023年6月15日
    00
  • Java线程操作的常见方法【线程名称获取、设置、线程启动判断等】

    Java线程是Java语言中并发编程的基本单位,线程相关的操作及方法是Java中关键的知识点之一。本文将详细讲解Java线程操作的常见方法,包括线程名称获取、设置、线程启动判断等内容。 获取线程名称 在Java中获取线程名称比较简单,可以通过获取当前线程的名称来实现,使用Thread.currentThread().getName()即可获取当前线程的名称。…

    Java 2023年5月19日
    00
  • 浅谈使用java解析和生成JSON

    下面就为你详细讲解: 前言 在现代的互联网应用中,JSON已经成为了一种广泛使用的数据格式,常被用于数据的传输和存储。Java作为一门在企业中广泛使用的编程语言,也自然而然的提供了解析和生成JSON的相关库。本文将介绍如何使用Java解析和生成JSON数据。 解析JSON数据 在Java中,解析JSON数据最常用的方法就是使用Gson库。Gson是一个Goo…

    Java 2023年5月26日
    00
  • 使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    使用IDEA搭建SSM框架的详细教程 简介 SSM框架是目前Java Web开发中最常用的框架之一,它由Spring、SpringMVC和MyBatis三个框架组成,可以很好地解决Java Web开发中的各种问题。本文将详细介绍如何使用IDEA搭建SSM框架,并提供两个示例说明。 环境准备 在开始之前,需要确保以下环境已经准备好: JDK 1.8以上版本 M…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部