解决不同用户的数据共享问题

情景:你是否会遇到一种情况,多个人都阅读过一篇相同文案,在文案的某个位置会显示已阅读人数,那个已阅读人数就是所有用户共享的一个数据

思考:不同用户要实现数据共享该怎么办?
解决方法:通过servletContext对象

ServletContext原理:
ServletContext对象是由服务器进行创建,一个项目只有一个对象,不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也是同一个对象了,该对象由用户共同拥有。

ServletContext API

返回值类型 方法 作用
void setAttribute(String name,Object obj) 设置共享属性
Object getAttribute(String name) 读取共享属性
void removeAttribute(String name) 移除共享属性
ServletContext getContext(String uri) 获取指定uri的上下文对象
String getContextPath() 返回web程序的上下文路径
String getInitParameter(String param) 获取上下文初始化参数
String getRealPath(String path) 返回资源在服务器的真实路径
RequestDispatcher getRequestDispatcher(String path) 返回一个包装了路径信息的Dispatcher

获取ServletContext对象的三种方式:
//1、
ServletContext context = this,getServletContext();
//2、
ServletContext context1 = this.getServletConfig().getServletContext();
//3、
ServletContext context2 = request.getSession().getServletContext();

设置ServletContext的共享属性
context.setAttribute("total","10") ;

在同一项目下,所有servlet都可以通过该方法获取共享数据,获取ServletContext的共享属性
int a = (int)context.setAttribute("total") ;

获取web.xml中配置的公共属性 在web.xml中添加公共属性
<context-param>
	<param-name>name</param-name>
	<param-value>son</param-value>
</context-param>
String str = context.getInitParameter(name);

发布了48 篇原创文章 · 获赞 0 · 访问量 676

猜你喜欢

转载自blog.csdn.net/weixin_44943485/article/details/105068256