当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

Java理论与实践: Web层的情况复制[Java编程]

赞助商链接



  本文“Java理论与实践: Web层的情况复制[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

不管正在构建的是 J2EE 还是 J2SE 服务器利用程序,都有大概以某种方法 利用 Java Servlet —— 大概是直接地通过像 JSP 技术、Velocity 大概 WebMacro 这样的表示层,也大概通过一个基于 servlet 的 Web 服务实现,如 Axis 大概 Glue.Servlet API 供应的一个最重要的功效是会话管理 —— 通过 HttpSession 接口举行用户状况的认证、失效和保护.

会话状况

几近每一个 Web 利用程序都有一些会话状况,这些状况有大概像记着您能否 已登录这么简单,也大概是您的会话的更具体的历史,如购物车的内容、从前查 询后果的缓存大概 20 页动态问卷表的完好呼应历史.因为 HTTP 协议本身是无 状况的,所以需求将会话状况存储在某处并与浏览会话以某种方法相关联,使得 下次恳求同一 Web 利用程序的页面时可以简单地获得.幸运的是,J2EE 供应了 几种管理睬话状况的办法 —— 状况可以存储在数据层,用 Servlet API 的 HttpSession 接口存储在 Web 层,用有状况会话 bean 存储在 Enterprise JavaBeans(EJB)层,乃至用 cookie 大概躲藏表单字段将状况存储在客户层. 不幸的是,会话状况管理不当会带来严重的性能问题.

假如利用程序可以在 HttpSession 中存储用户状况,这种办法普通比其他方 法更好.在客户端用 HTTP cookie 大概躲藏表单字段存储会话状况有很大的安 全风险 —— 它将利用程序的一部份内部内容表露给了非受信任的客户层.(一 个早期的电子商务网站将购物车内容(包含价钱)存储在躲藏表单字段中,从而 可以很简单被不法操纵,让任何理解 HTML 和 HTTP 的用户可以以 0.01 美圆购 买任何商品.噢)此外,利用 cookie 大概躲藏表单字段很混乱,简单出错,并 且脆弱(假如用户禁止在浏览器中利用 cookie,那么基于 cookie 的办法就完 全不能工作).

在 J2EE 利用程序中存储服务器端状况的其他办法是利用有状况会话 bean, 大概在数据库中存储会话状况.固然有状况会话 bean 在会话状况管理方面有更 大的机动性,但是在大概的情形下,将会话状况存储在 Web 层仍旧有好处.如 果业务对象是无状况的,那么普通可以仅仅增添更多 Web 服务器来扩大利用程 序,而不用增添更多 Web 服务器和更多 EJB 容器, 这样的本钱普通要低一些 并且简单完成.利用 HttpSession 存储会话状况的另一个好处是 Servlet API 供应了一种会话失效时告诉的简单办法.在数据库中存储会话状况的本钱大概难 以承受.

servlet 标准没有要求 servlet 容器举行某种范例的会话复制大概长期性, 但是它倡议将状况复制作为 servlet 主要 存在来由(raison d'etre) 的重要 部份,并且它对作为举行会话复制的容器提出了一些要求.会话复制可以供应大 量好处 —— 负载均衡、伸缩性、容错和高可用性.呼应地,大大都 servlet 容器支持某种情势的 HttpSession 复制,但是复制的机制、配置和时间是由实 现决意的.

HttpSession API

简单地说, HttpSession 接口支持几种办法,servlet、JSP 页大概其他表 示层组件可以用这些办法来跨多个 HTTP 恳求保护会话信息.会话绑定到特定的 用户,但是在 Web 利用程序的全部 servlet 中同享 —— 不特定于某一个 servlet.一种考虑会话的有效办法是,会话像一个在会话期间存储对象的 Map —— 可以用 setAttribute 按名字存储会话属性,并用 getAttribute 提取它 们. HttpSession 接口还包含会话生存周期办法,如 invalidate() (它告诉 容器应丢弃会话).清单 1 显示 HttpSession 接口最常用的元素:

清单 1. HttpSession API

public interface HttpSession {
   Object getAttribute(String s);
   Enumeration getAttributeNames();
   void setAttribute(String s, Object o);
   void removeAttribute(String s);
   boolean isNew();
   void invalidate();
   void setMaxInactiveInterval(int i);
   int getMaxInactiveInterval();
   ...
}

理论上,可以跨聚集一致性地完好复制会话状况,这样聚集合的全部节点都 可以服务任何恳求,一个简单的负载均衡器可以以轮询方法传送恳求,避开有故 障的主机.不过,这种精密的复制有很高的性能本钱,并且难于实现,当聚集接 近某一规模时,还会有伸缩性的问题.

一种更常用的方法是将负载均衡与会话类似性(affinity) 结合起来 —— 负载均衡器可以将会话与衔接相关联,并将会话中今后的恳求发送给同一服务器 .有很多硬件和软件负载均衡器支持这个功效,并且这意味着只有主衔接主机和 会话需求弊端转移到另一台服务器时才拜候复制的会话信息.

复制方法

复制供应了一些大概的好处,包含可用性、容错和伸缩性.此外,有大量会 话复制的办法可用:办法的挑选取决于利用程序聚集的规模、复制的目标和 servlet 容器支持的复制设备.复制有性能本钱,包含 CPU 周期(存储在会话 中的序列化对象)、网络带宽(广播更新),以及基于磁盘的筹划中写入到磁盘 大概数据库的本钱.

几近全部 servlet 容器都通过存储在 HttpSession 中的序列化对象举行 HttpSession 复制,所以假如是成立一个分布式利用程序,该当确保只将可序列 化对象放到会话中.(一些容器对像 EJB 引用、事件上下文、还有其他非可序 列化的 J2EE 对象范例有特别的处理.)


  以上是“Java理论与实践: Web层的情况复制[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .