欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ServletContext上下文

程序员文章站 2022-05-24 14:37:03
...
  • 1.什么是Servlet上下文
    容器启动之后,会为每一个Web应用创建唯一的一个符合ServletContext接口要求的对象,该对象就是servlet上下文。
    理解:环境(上下文)可以给处于环境内的个体提供共享资源:可以给环境内的对象提供共享数据。
    注意:Config和Servlet是1对1的关系,可以理解为它是Servlet的是有环境。
    特点a.唯一性:一个web应用对应唯一的一个上下文。b.持久性:只要容器没有关闭,并且应用没有被删除,则上下文会一直存在。
  • 2.Servlet上下文的作用:(可以给多个Servlet提供预置数据。在程序运行阶段,可以使用该对象实现存取变量数据)
    在Web应用范围内存取共享数据:如 setAttribute(),getAttribute() 获取的数据是Object类型。
    注:将数据绑订到上下文,可以随时访问。在满足使用条件的情况下,优先使用生命周期短的(request < session < 上下文)。先获取上下文
    ServletContext ctx = getServletContext(); 通过他绑订数据到 setAttribute,getAttribute,removeAttribute
    访问Web应用的静态资源:如getRealPath(String path) 跨多个请求、用户和Servlet
    实现了跨Servlet的数据共享
    3如何实现多个Servlet提供预置数据
    1)在web中添加独立的标签
<!-- 给所有Servlet预置共享的数据 -->
    <context-param>
  	    <param-name>maxOnline</param-name>
  	    <param-value>500</param-value>
     </context-param>

2)如何获取读取web.xml中预置的数据(如何获得上下文?)

	GenericServlet,ServletConfig,FilterConfig,HttpSession提供了一个getServletContext方法来获得上下文。	
	 ServletContext ctx = getServletContext();		
	String maxOnline =ctx.getInitParameter("maxOnline");

六:Servet为什么会有线程安全问题
1.如何保证Servlet线程安全使用synchronized对代码加锁即可。何时出现线程安全:多个线程同时修改一份数据。
2.产生的原因:如果Servlet有成员变量,并且允许修改。则可能出现线程安全。
3.解决:不用成员变量 。 加锁:synchronized