首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

JSP会编译为一个servlet。容器可能同时调用多次servlet JSP的服务方法,不过servlet可能只有一个实例。每个调用都表示一个单独的执行线程,但是都在同一个servlet实例中。这说明,servlet中的类变量实际上会由同时访问该servlet的所有用户共享。所以,servlet 以及相应的JSP中一般都不要有可写的类变量。只有在极少的情况下才会有可写的类变量,但必须通过同步机制来处理对这种可写类变量的访问。同步机制会限制一个对象一次只能服务于一个用户。如果有其他线程需要访问一个同步对象,就必须等待,直到前一个线程访问结束为止。这会使应用的速度减慢,并限制它能处理的负载量。

一般地,即使要进行同步,也不应当在JSP中完成这个工作。尽管这是很显然的,但是还是有可能疏忽,我就曾经花了很长时间想知道为什么我修改的一个Web应用会随机地向用户显示其他用户的个人注册信息。最后发现,程序员把用户profile 对象的一个副本放到了一个servlet 类变量中,而没有放到一个session request 变量中。如果第二个用户访问应用,而且在第一个用户之前结束其任务,第一个用户就会突然看到第二个用户的有关数据。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论