在基于Spring的Web应用程序中使用Http Session
在基于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相关推荐
- spring_在基于Spring的Web应用程序中使用Http Session
spring 在基于Spring的Web应用程序中拥有和使用Http会话有多种方法. 这是基于最近项目经验的总结. 方法1 只需在需要的HttpSession中注入即可. @Service publi ...
- 如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha
如何使用recaptcha CAPTCHA是一个程序,可以生成人类可以通过但计算机程序" 不能 "通过的测试并对其进行评分. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用 ...
- 在Spring MVC Web应用程序中添加社交登录:集成测试
我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但是它并不能真正告诉我们我们的应用程序是否正常运行. 这就是 ...
- 在Spring MVC Web应用程序中添加社交登录:单元测试
Spring Social 1.0具有spring-social-test模块,该模块为测试Connect实现和API绑定提供支持. 该模块已从Spring Social 1.1.0中删除,并由 Sp ...
- 在Spring MVC Web应用程序中使用reCaptcha
CAPTCHA是一种程序,可以生成人类可以通过的测试并对其进行评分,而计算机程序" 不能 "通过. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用户应在输入区域中书写文本. ...
- 在基于Spring MVC的应用程序中配置favicon.ico
Favicon是与您的网站相关的图标(favicon.ico). 并非每个网站都在使用favicon. 但是大多数浏览器并不关心它,反正他们都要求它. 当图标图标不在适当位置时,服务器将返回不必要的4 ...
- Spring Boot Web应用程序中注册 Servlet 的方法实例
Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...
- 使用Gradle禁止Java和Spring Boot Web应用程序中的FindBugs警告
如何在+ Spring Boot和+ Java应用程序中使用注释抑制FindBugs警告 如果您的构建由于FindBugs问题而中断,并且是假阳性,或者由于其他考虑而无法解决问题,则可以添加注释来忽略 ...
- 集成spring mvc_向Spring MVC Web应用程序添加社交登录:集成测试
集成spring mvc 我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但它并不能真正告诉我们我们的应用程 ...
最新文章
- 【 FPGA 】FIR 滤波器结构和优化(一)之滤波器的对称性(Filter Symmetry)
- ASP.NET的五大数据控件分析
- 【机器学习基础】对样本不均衡的处理
- 9.为包含指针的关联容器指定比较类型
- I/O复用函数的使用——select
- 国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!
- 论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization
- Python类的魔法方法
- 手机UI界面模板psd源文件格式!
- Android性能优化 笔记
- HDU1213How Many Tables
- Mac目录映射到docker容器ubuntu目录
- 管理新语:根据工作难度,及时调整负责人员
- 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
- 基建管控系统_基建项目管理系统
- mac和windows共享键盘鼠标方案
- iPhone已停用,请连接iTunes
- DAX: 用SWITCH函数替换嵌套IF函数
- 我和王争学设计模式|建造者模式
- python:水果与设计模式-原型模式
热门文章
- mybatisplus 强制制空 空覆盖原来的字符串
- 阅读副本和Spring Data第2部分:配置基础项目
- openhub_OpenHub框架–下一个有趣的功能
- ssm影城项目_影场与属性访问器界面
- junit注释_通过此注释改善您的JUnit体验
- maven项目 jetty_如何使用Java,Maven,Jetty创建Web应用程序项目
- web ua检测_UA Web挑战会议:针对初创公司的SpringIO
- 502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...
- es 调整gc_实际中进行GC调整
- jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换