spring_在基于Spring的Web应用程序中使用Http Session
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相关推荐
- 在基于Spring的Web应用程序中使用Http Session
在基于Spring的Web应用程序中拥有和使用Http会话有多种方法. 这是基于最近项目经验的总结. 方法1 只需在需要的HttpSession中注入即可. @Service public class ...
- 如何使用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的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但它并不能真正告诉我们我们的应用程 ...
最新文章
- 亿级PV超大型网站集群架构图形深度揭秘讲解
- python界面翻译-我用40行python代码写一个桌面翻译器,很nice
- 【NLP】从0梳理1场NLP赛事!
- md5会重复吗_自媒体平台视频重复审查机制,如何避免自己做的视频和别人的重复...
- java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
- 十三、PyQt5的QFileDialog文件打开、文件保存、文件夹选择对话框
- 【离散数学】实验 旅行路线规划问题
- SpringMVC系列(九)自定义视图、重定向、转发
- 武汉大学计算机学院c404,985录取名单(武大)!武大不歧视!80分政治复习路线图!最新调剂信息!...
- android tmp目录权限不够,/tmp目录下执行脚本失败提示Permission denied
- 声纹识别的模式识别方法
- 数据结构:线性表理论题目集
- C/C++ 用zlib解压gzip文件
- 使用esp32-s2模拟实现usb多点触摸
- 自动配置和 thymeleaf模板引擎
- Halcon实战之MLP颜色匹配(一)
- html的nofollow、noindex标签
- LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)
- 分享几个写英文论文的网页和软件
- 第五人格维修服务器中要不要玩,第五人格:匹配制度辣鸡!服务器还是崩!第五真的要凉了吗?...