共享信息

Web组件,和大多数对象一样,通常与其他对象一起完成他们的任务。Web组件实现共享通过下列步骤:

  • 使用私有帮助对象(例如,JavaBeans组件)
  • 共享公共范围的对象
  • 使用数据库
  • 调用其他web资源。Java Servlet 提供访问其他web资源的机制 Invoking Other Web Resources。

使用范围对象

web组件使用4种范围对象来共享信心。你可以使用代表范围对象的类的getAttribute 和setAttribute方法访问他们的属性。下面的列表列出了4种范围对象:

Web context

javax.servlet.ServletContext
web上下文的组件。查看 Accessing the Web Context章节。

Session

javax.servlet.http.HttpSession
处理附属于session的相应的web组件。查看Maintaining Client State章节。

Request

javax.servlet.ServletRequest类的子类。
处理请求的web组件。

Page

javax.servlet.jsp.JspContext
jsp页面创建的web组件。

控制对共享资源的并发访问

在一个多线程服务器,共享资源支持并发访问。添加到范围对象中属性,在内存中共享数据,例如实例和变量,和一些扩展对象,如文件、数据库连接、网络连接等。
并发访问发生在下列场景中:

  • 多个web组件访问存储在web上下文中的对象
  • 多个web组件访问村吃在session中的对象
  • 一个web组件多线程访问实例变量。web容器通常给每一个请求分配一个线程。这保证了一个Servlet实例在同一时间只能处理一个线程,一个Serlet可以实现SingleThreadModel接口。如果一个Servlet实现了SingleThreadModel接口,将不会有2个线程在程序中并发执行。一个web容器通过同步访问一个Servlet实例或维持一个web组件的实例池并分配到空闲实例中来保证这个实现。这个接口不会防止对web资源访问的同步问题,例如一个静态类变量或外部对象。

当资源可以并发访问,他们有一些共同的使用模式。你可以使用章节 http://docs.oracle.com/javase/tutorial/essential/concurrency/中描述的同步策略来控制并预防多线程访问问题。

相关推荐