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

<b>J2EE操纵程序的Web层情况复制</b>[Java编程]

赞助商链接



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

大大都具有一定重要性的 Web 利用程序都要求保护某种会话状况,如用户购物车的内容.如安在聚集服务器利用程序中管理和复制状况对利用程序的可伸缩性有明显影响.很多 J2SE 和 J2EE 利用程序将状况存储在由 Servlet API 供应的 HttpSession 中.本文作者解析了状况复制的一些选项以及若何最有效地利用 HttpSession 以供应好的伸缩性和性能.

不管正在构建的是 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) 结合起来 —— 负载均衡器可以将会话与衔接相关联,并将会话中今后的恳求发送给同一服务器.有很多硬件和软件负载均衡器支持这个功效,并且这意味着只有主衔接主机和会话需求弊端转移到另一台服务器时才拜候复制的会话信息.


  以上是“<b>J2EE操纵程序的Web层情况复制</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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