仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 965|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA编程:Java 实际与理论: Web 层的形态复制

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。web年夜多半具有必定主要性的Web使用程序都请求保护某种会话形态,如用户购物车的内容。怎样在聚集服务器使用程序中办理和复制形态对使用程序的可伸缩性有明显影响。很多J2SE和J2EE使用程序将形态存储在由ServletAPI供应的HttpSession中。本月,专栏作家BrianGoetz剖析了形态复制的一些选项和怎样最无效地利用HttpSession以供应好的伸缩性和功能。在本文论坛中与本文作者和其他读者分享您的概念。(能够单击文章顶部大概底部的会商会见论坛。)
不论正在构建的是J2EE仍是J2SE服务器使用程序,都有大概以某种体例利用JavaServlet――多是间接地经由过程像JSP手艺、Velocity大概WebMacro如许的暗示层,也大概经由过程一个基于servlet的Web服务虚现,如Axis大概Glue。ServletAPI供应的一个最主要的功效是会话办理――经由过程HttpSession接口举行用户形态的认证、生效和保护。

会话形态
几近每个Web使用程序都有一些会话形态,这些形态有大概像记着您是不是已登录这么复杂,也多是您的会话的更具体的汗青,如购物车的内容、之前查询了局的缓存大概20页静态问卷表的完全呼应汗青。由于HTTP协定自己是无形态的,以是必要将会话形态存储在某处并与扫瞄会话以某种体例相干联,使得下次哀求统一Web使用程序的页面时能够简单地猎取。侥幸的是,J2EE供应了几种办理会话形态的办法――形态能够存储在数据层,用ServletAPI的HttpSession接口存储在Web层,用有形态会话bean存储在EnterpriseJavaBeans(EJB)层,乃至用cookie大概埋没表单字段将形态存储在客户层。不幸的是,会话形态办理不妥会带来严峻的功能成绩。

假如使用程序可以在HttpSession中存储用户形态,这类办法一般比其他办法更好。在客户端用HTTPcookie大概埋没表单字段存储会话形态有很年夜的平安风险――它将使用程序的一部份内部内容表露给了非受信托的客户层。(一个初期的电子商务网站将购物车内容(包含代价)存储在埋没表单字段中,从而能够很简单被不法使用,让任何懂得HTML和HTTP的用户能够以0.01美圆购置任何商品。噢)别的,利用cookie大概埋没表单字段很凌乱,简单堕落,而且懦弱(假如用户克制在扫瞄器中利用cookie,那末基于cookie的办法就完整不克不及事情)。

在J2EE使用程序中存储服务器端形态的其他办法是利用有形态会话bean,大概在数据库中存储会话形态。固然有形态会话bean在会话形态办理方面有更年夜的天真性,可是在大概的情形下,将会话形态存储在Web层仍旧有优点。假如营业对象是无形态的,那末一般能够仅仅增加更多Web服务器来扩大使用程序,而不必增加更多Web服务器和更多EJB容器,如许的本钱一样平常要低一些而且简单完成。利用HttpSession存储会话形态的另外一个优点是ServletAPI供应了一种会话生效时关照的简单办法。在数据库中存储会话形态的本钱大概难以接受。

servlet标准没有请求servlet容器举行某品种型的会话复制大概耐久性,可是它倡议将形态复制造为servlet主要存在来由(raisondetre)的主要部分,而且它对作为举行会话复制的容器提出了一些请求。会话复制能够供应大批优点――负载均衡、伸缩性、容错和高可用性。响应地,年夜多半servlet容器撑持某种情势的HttpSession复制,可是复制的机制、设置和工夫是由完成决意的。

HttpSessionAPI
复杂地说,HttpSession接口撑持几种办法,servlet、JSP页大概其他暗示层组件能够用这些办法来跨多个HTTP哀求保护会话信息。会话绑定到特定的用户,可是在Web使用程序的一切servlet中共享――不特定于某一个servlet。一种思索会话的有效办法是,会话像一个在会话时代存储对象的Map――能够用setAttribute按名字存储会话属性,并用getAttribute提取它们。HttpSession接口还包括会话保存周期办法,如invalidate()(它关照容器应抛弃会话)。清单1显现HttpSession接口最经常使用的元素:

清单1.HttpSessionAPI

publicinterfaceHttpSession{
ObjectgetAttribute(Strings);
EnumerationgetAttributeNames();
voidsetAttribute(Strings,Objecto);
voidremoveAttribute(Strings);

booleanisNew();
voidinvalidate();
voidsetMaxInactiveInterval(inti);
intgetMaxInactiveInterval();
...
}



实际上,能够跨聚集分歧性地完整复制会话形态,如许聚集中的一切节点都能够服务任何哀求,一个复杂的负载均衡器能够以轮询体例传送哀求,避开有妨碍的主机。不外,这类严密的复制有很高的功能本钱,而且难于完成,当聚集靠近某一范围时,还会有伸缩性的成绩。

一种更经常使用的体例是将负载均衡预会话类似性(affinity)分离起来――负载均衡器能够将会话与毗连相干联,并将会话中今后的哀求发送给统一服务器。有良多硬件和软件负载均衡器撑持这个功效,而且这意味着只要主毗连主机和会话必要妨碍转移到另外一台服务器时才会见复制的会话信息。

复制体例
复制供应了一些大概的优点,包含可用性、容错和伸缩性。别的,有大批会话复制的办法可用:办法的选择取决于使用程序聚集的范围、复制的方针和servlet容器撑持的复制举措措施。复制有功能本钱,包含CPU周期(存储在会话中的序列化对象)、收集带宽(播送更新),和基于磁盘的计划中写进到磁盘大概数据库的本钱。

几近一切servlet容器都经由过程存储在HttpSession中的序列化对象举行HttpSession复制,以是假如是创立一个散布式使用程序,应该确保只将可序列化对象放到会话中。(一些容器对像EJB援用、事件高低文、另有其他非可序列化的J2EE对象范例有特别的处置。)

基于JDBC的复制
一种会话复制的办法是序列化会话内容并将它写进数据库。这类办法相称直不雅,其长处是不但会话能够妨碍转移到其他主机,并且即便全部聚集生效,会话数据也能够保留上去。基于数据库的复制的弱点是功能本钱――数据库事件是高贵的。固然它能够在Web层很好地伸缩,可是它大概在数据层发生伸缩成绩――假如聚集增加年夜到必定水平,扩大数据层以包容会话数据会很坚苦大概本钱没法承受。

基于文件的复制
基于文件的复制相似于利用数据库存储序列化的会话,只不外是利用共享文件服务器而不是数据库来存储会话数据。这类体例的本钱一样平常比利用数据库的本钱(硬件本钱、软件允许证和盘算开支)低,其价值则是牢靠性(数据库可供应比文件体系更强的耐久化包管)。

基于内存的复制
另外一种复制体例是与聚集中的一个大概多个其他服务器共享序列化的会话数据正本。复制一切会话到一切主机中供应了最年夜的可用性,而且负载均衡最简单,可是由于复制动静所损耗的每一个节点的内存和收集带宽,终极会限定聚集的范围。一些使用服务器撑持与“同伴(buddy)”节点的基于内存的复制,个中每个会话存在于主服务器上和一台(或更多)备份服务器上。这类计划比将一切会话复制到一切服务器的伸缩性更好,可是当必要将会话妨碍转移到另外一台服务器上时会使负载均衡义务庞大化,由于它必需找出别的哪一台(几台)服务器有这个会话。

工夫思索
除决意怎样存储复制会话数据,另有甚么时分复制数据的成绩。最牢靠但也最高贵的办法是每次数据改动时复制它(如每次servlet挪用停止)。不那末高贵、可是在妨碍时会有丧失一些数据的风险的办法是在每凌驾N秒时复制数据。

与工夫成绩有关的成绩是,是复制全部会话仍是只试尝复制会话中改动了的属性(它包括的数据会少很多)。这些都必要在牢靠性和功能之间举行弃取。Servlet开辟职员应该熟悉到在妨碍转移时,会话形态大概变得“过期”(是几回哀求前的复制),并应该筹办处置不是最新的会话内容。(比方,假如一个interview的第3步发生一个会话属性,而用户在第4步时,哀求被妨碍转移到一个具有两次哀求之前的会话形态复制的体系上,那末第4步的servlet代码应准备在会话中找不到这个属性,并接纳响应的举动――如重定向,而不是认定它会在那边、并在找不到它时抛出一个NullPointerException。)

容器撑持
Servlet容器的HttpSession复制选项和怎样设置这些选项是各不不异的。IBMWebSphere
谁可相欹 该用户已被删除
沙发
发表于 2015-1-21 13:19:51 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
飘灵儿 该用户已被删除
板凳
发表于 2015-1-23 11:43:39 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
小女巫 该用户已被删除
地板
发表于 2015-1-25 22:49:17 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
第二个灵魂 该用户已被删除
5#
发表于 2015-1-27 08:34:41 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
透明 该用户已被删除
6#
发表于 2015-2-3 22:00:12 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
莫相离 该用户已被删除
7#
发表于 2015-2-9 05:32:55 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-2 01:54:48 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-11 03:34:46 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-13 08:07:15 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
只想知道 该用户已被删除
11#
发表于 2015-3-17 02:07:55 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
爱飞 该用户已被删除
12#
发表于 2015-3-20 18:46:02 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
分手快乐 该用户已被删除
13#
发表于 2015-3-27 01:39:36 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
小妖女 该用户已被删除
14#
发表于 2015-3-28 04:59:48 | 只看该作者
是一种为 Internet发展的计算机语言
变相怪杰 该用户已被删除
15#
发表于 2015-4-3 02:48:28 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-16 20:09:13 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
灵魂腐蚀 该用户已被删除
17#
发表于 2015-4-21 07:13:12 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
再现理想 该用户已被删除
18#
发表于 2015-4-27 02:16:04 | 只看该作者
是一种突破用户端机器环境和CPU
乐观 该用户已被删除
19#
发表于 2015-4-28 03:07:23 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 22:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表