spring

在基于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

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

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

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

  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. 亿级PV超大型网站集群架构图形深度揭秘讲解
  2. python界面翻译-我用40行python代码写一个桌面翻译器,很nice
  3. 【NLP】从0梳理1场NLP赛事!
  4. md5会重复吗_自媒体平台视频重复审查机制,如何避免自己做的视频和别人的重复...
  5. java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
  6. 十三、PyQt5的QFileDialog文件打开、文件保存、文件夹选择对话框
  7. 【离散数学】实验 旅行路线规划问题
  8. SpringMVC系列(九)自定义视图、重定向、转发
  9. 武汉大学计算机学院c404,985录取名单(武大)!武大不歧视!80分政治复习路线图!最新调剂信息!...
  10. android tmp目录权限不够,/tmp目录下执行脚本失败提示Permission denied
  11. 声纹识别的模式识别方法
  12. 数据结构:线性表理论题目集
  13. C/C++ 用zlib解压gzip文件
  14. 使用esp32-s2模拟实现usb多点触摸
  15. 自动配置和 thymeleaf模板引擎
  16. Halcon实战之MLP颜色匹配(一)
  17. html的nofollow、noindex标签
  18. LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)
  19. 分享几个写英文论文的网页和软件
  20. 第五人格维修服务器中要不要玩,第五人格:匹配制度辣鸡!服务器还是崩!第五真的要凉了吗?...

热门文章

  1. spring与springBoot不同之处
  2. 介绍27款经典的CSS框架
  3. Java程序设计学习笔记(四)—— GUI
  4. C++模板之特化与偏特化详解
  5. 项目感言--功能的模块化
  6. 一个DBA的工作写照
  7. linux jemalloc 内存分配器 安装与使用
  8. python 全局变量 局部变量
  9. linux find 忽略大小写查找文件
  10. Libidn 简介 对国际化域名进行编码和解码