在基于Spring的Web应用程序中拥有和使用Http会话有多种方法。 这是基于最近项目经验的总结。

方法1

只需在需要的HttpSession中注入即可。

@Service
public class ShoppingCartService {@Autowired private HttpSession httpSession;...
}

尽管令人惊讶,但由于上述服务是单例服务,因此效果很好。 Spring智能地将代理插入到实际的HttpSession中,并且该代理知道如何在内部委派给请求的正确会话。

但是,以这种方式处理会话的问题在于,必须由用户来管理要在会话中检索和保存回的对象:

public void removeFromCart(long productId) {ShoppingCart shoppingCart = getShoppingCartInSession();shoppingCart.removeItemFromCart(productId);updateCartInSession(shoppingCart);
}

方法2

接受它作为参数,尽管如此,它仅在Web层中有效:

@Controller
public class ShoppingCartController {@RequestMapping("/addToCart")public String addToCart(long productId, HttpSession httpSession) {//do something with the httpSession }}

方法3

创建一个bean并将其范围设置为会话:

@Component
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS, value="session")
public class ShoppingCart implements Serializable{
...
}

Spring为会话范围的Bean创建代理,并使该代理可用于注入该Bean的服务。 使用这种方法的优点是,该bean上的任何状态更改均由Spring处理,它将负责从会话中检索此bean并将对bean的任何更改传播回会话。 此外,如果bean具有任何Spring生命周期方法(例如@PostConstruct或@PreDestroy注释的方法),则会对其进行适当调用。

方法4

使用@SessionAttribute批注来批注Spring MVC模型属性:

@SessionAttributes("shoppingCart")
public class OrderFlowController {public String step1(@ModelAttribute("shoppingCart") ShoppingCart shoppingCart) {}public String step2(@ModelAttribute("shoppingCart") ShoppingCart shoppingCart) {}public String step3(@ModelAttribute("shoppingCart") ShoppingCart shoppingCart, SessionStatus status) {status.setComplete();} }

使用SessionAttributes批注的用例非常具体,可以在上述流程中保持状态。

有了这些方法,我个人更喜欢使用会话范围的bean的方法3,这种方法取决于Spring来管理将对象检索和存储到会话中的底层细节。 尽管根据您可能会遇到的情况,其他方法也很有用,从要求对原始Http会话进行更多控制到需要处理临时状态(如上述方法4)。

翻译自: https://www.javacodegeeks.com/2014/04/using-http-session-with-spring-based-web-applications.html

在基于Spring的Web应用程序中使用Http Session相关推荐

  1. spring_在基于Spring的Web应用程序中使用Http Session

    spring 在基于Spring的Web应用程序中拥有和使用Http会话有多种方法. 这是基于最近项目经验的总结. 方法1 只需在需要的HttpSession中注入即可. @Service publi ...

  2. 如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha

    如何使用recaptcha CAPTCHA是一个程序,可以生成人类可以通过但计算机程序" 不能 "通过的测试并对其进行评分. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用 ...

  3. 在Spring MVC Web应用程序中添加社交登录:集成测试

    我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但是它并不能真正告诉我们我们的应用程序是否正常运行. 这就是 ...

  4. 在Spring MVC Web应用程序中添加社交登录:单元测试

    Spring Social 1.0具有spring-social-test模块,该模块为测试Connect实现和API绑定提供支持. 该模块已从Spring Social 1.1.0中删除,并由 Sp ...

  5. 在Spring MVC Web应用程序中使用reCaptcha

    CAPTCHA是一种程序,可以生成人类可以通过的测试并对其进行评分,而计算机程序" 不能 "通过. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用户应在输入区域中书写文本. ...

  6. 在基于Spring MVC的应用程序中配置favicon.ico

    Favicon是与您的网站相关的图标(favicon.ico). 并非每个网站都在使用favicon. 但是大多数浏览器并不关心它,反正他们都要求它. 当图标图标不在适当位置时,服务器将返回不必要的4 ...

  7. Spring Boot Web应用程序中注册 Servlet 的方法实例

    Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...

  8. 使用Gradle禁止Java和Spring Boot Web应用程序中的FindBugs警告

    如何在+ Spring Boot和+ Java应用程序中使用注释抑制FindBugs警告 如果您的构建由于FindBugs问题而中断,并且是假阳性,或者由于其他考虑而无法解决问题,则可以添加注释来忽略 ...

  9. 集成spring mvc_向Spring MVC Web应用程序添加社交登录:集成测试

    集成spring mvc 我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但它并不能真正告诉我们我们的应用程 ...

最新文章

  1. 【 FPGA 】FIR 滤波器结构和优化(一)之滤波器的对称性(Filter Symmetry)
  2. ASP.NET的五大数据控件分析
  3. 【机器学习基础】对样本不均衡的处理
  4. 9.为包含指针的关联容器指定比较类型
  5. I/O复用函数的使用——select
  6. 国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!
  7. 论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization
  8. Python类的魔法方法
  9. 手机UI界面模板psd源文件格式!
  10. Android性能优化 笔记
  11. HDU1213How Many Tables
  12. Mac目录映射到docker容器ubuntu目录
  13. 管理新语:根据工作难度,及时调整负责人员
  14. 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
  15. 基建管控系统_基建项目管理系统
  16. mac和windows共享键盘鼠标方案
  17. iPhone已停用,请连接iTunes
  18. DAX: 用SWITCH函数替换嵌套IF函数
  19. 我和王争学设计模式|建造者模式
  20. python:水果与设计模式-原型模式

热门文章

  1. mybatisplus 强制制空 空覆盖原来的字符串
  2. 阅读副本和Spring Data第2部分:配置基础项目
  3. openhub_OpenHub框架–下一个有趣的功能
  4. ssm影城项目_影场与属性访问器界面
  5. junit注释_通过此注释改善您的JUnit体验
  6. maven项目 jetty_如何使用Java,Maven,Jetty创建Web应用程序项目
  7. web ua检测_UA Web挑战会议:针对初创公司的SpringIO
  8. 502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...
  9. es 调整gc_实际中进行GC调整
  10. jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换