仓酷云

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

[学习教程] JAVA网页编程之Servlet老戏新唱之再说Session

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

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

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

x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。servlet|session1、术语session
在我的履历里,session这个词被滥用的水平也许仅次于transaction,加倍风趣的是transaction与session在某些语境下的寄义是不异的。

session,中文常常翻译为会话,其原本的寄义是指善始善终的一系列举措/动静,好比打德律风时从拿起德律风拨号到挂断德律风这两头的一系列历程能够称之为一个session。偶然候我们能够看到如许的话“在一个扫瞄器会话时代,...”,这里的会话一词用的就是其转义,是指从一个扫瞄器窗口翻开到封闭这个时代①。最凌乱的是“用户(客户端)在一次会话时代”如许一句话,它大概指用户的一系列举措(一样平常情形下是同某个详细目标相干的一系列举措,好比从登录到选购商品到结账登出如许一个网上购物的历程,偶然候也被称为一个transaction),但是偶然候也大概仅仅是指一次毗连,也有多是指寄义①,个中的不同只能靠高低文来揣度②。

但是当session一词与收集协定相干联时,它又常常隐含了“面向毗连”和/或“坚持形态”如许两个寄义,“面向毗连”指的是在通讯两边在通讯之前要先创建一个通讯的渠道,好比打德律风,直到对方接了德律风通讯才干入手下手,与此绝对的是写信,在你把信收回往的时分你其实不能确认对方的地点是不是准确,通讯渠道纷歧定能创建,但对发信人来讲,通讯已入手下手了。“坚持形态”则是指通讯的一方可以把一系列的动静联系关系起来,使得动静之间能够相互依附,好比一个服务员可以认出再次到临的老主顾而且记得前次这个主顾还欠店里一块钱。这一类的例子有“一个TCPsession”大概“一个POP3session”③。

而到了web服务器兴旺开展的时期,session在web开辟语境下的语义又有了新的扩大,它的寄义是指一类用来在客户端与服务器之间坚持形态的办理计划④。偶然候session也用来指这类办理计划的存储布局,如“把xxx保留在session里”⑤。因为各类用于web开辟的言语在必定水平上都供应了对这类办理计划的撑持,以是在某种特定言语的语境下,session也被用来指代该言语的办理计划,好比常常把Java里供应的javax.servlet.http.HttpSession简称为session⑥。

鉴于这类凌乱已不成改动,本文中session一词的使用也会依据高低文有分歧的寄义,请人人注重分辩。
在本文中,利用中文“扫瞄器会话时代”来表达寄义①,利用“session机制”来表达寄义④,利用“session”表达寄义⑤,利用详细的“HttpSession”来表达寄义⑥

2、HTTP协定与形态坚持
HTTP协定自己是无形态的,这与HTTP协定原本的目标是符合的,客户端只必要复杂的向服务器哀求下载某些文件,不管是客户端仍是服务器都没有需要记录相互已往的举动,每次哀求之间都是自力的,比如一个主顾和一个主动售货机大概一个一般的(非会员制)年夜卖场之间的干系一样。

但是伶俐(大概贪婪?)的人们很快发明假如可以供应一些按需天生的静态信息会使web变得加倍有效,就像给有线电视加上点播功效一样。这类需求一方面迫使HTML慢慢增加了表单、剧本、DOM等客户端举动,另外一方面在服务器端则呈现了CGI标准以呼应客户真个静态哀求,作为传输载体的HTTP协定也增加了文件上载、cookie这些特征。个中cookie的感化就是为懂得决HTTP协定无形态的缺点所作出的勉力。至于厥后呈现的session机制则是又一种在客户端与服务器之间坚持形态的办理计划。

让我们用几个例子来形貌一下cookie和session机制之间的区分与接洽。笔者已经常往的一家咖啡店有喝5杯咖啡收费赠一杯咖啡的优惠,但是一次性消耗5杯咖啡的时机微不足道,这时候就必要某种体例来记录某位主顾的消耗数目。设想一下实在也无外乎上面的几种计划:
1、该店的伙计很凶猛,能记着每位主顾的消耗数目,只需主顾一走进咖啡店,伙计就晓得该怎样看待了。这类做法就是协定自己撑持形态。
2、发给主顾一张卡片,下面纪录着消耗的数目,一样平常另有个无效刻日。每次消耗时,假如主顾出示这张卡片,则此次消耗就会与之前或今后的消耗相接洽起来。这类做法就是在客户端坚持形态。
3、发给主顾一张会员卡,除卡号以外甚么信息也不记录,每次消耗时,假如主顾出示该卡片,则伙计在店里的记录本上找到这个卡号对应的记录增加一些消耗信息。这类做法就是在服务器端坚持形态。

因为HTTP协定是无形态的,而出于各种思索也不但愿使之成为有形态的,因而,前面两种计划就成为实际的选择。详细来讲cookie机制接纳的是在客户端坚持形态的计划,而session机制接纳的是在服务器端坚持形态的计划。同时我们也看到,因为接纳服务器端坚持形态的计划在客户端也必要保留一个标识,以是session机制大概必要借助于cookie机制来到达保留标识的目标,但实践上它另有其他选择。

3、了解cookie机制
cookie机制的基础道理就如下面的例子一样复杂,可是另有几个成绩必要办理:“会员卡”怎样分发;“会员卡”的内容;和客户怎样利用“会员卡”。

正统的cookie分发是经由过程扩大HTTP协定来完成的,服务器经由过程在HTTP的呼应头中加上一行特别的唆使以提醒扫瞄器依照唆使天生响应的cookie。但是地道的客户端剧本如JavaScript大概VBScript也能够天生cookie。

而cookie的利用是由扫瞄器依照必定的准绳在背景主动发送给服务器的。扫瞄器反省一切存储的cookie,假如某个cookie所声明的感化局限年夜于即是将要哀求的资本地点的地位,则把该cookie附在哀求资本的HTTP哀求头上发送给服务器。意义是麦当劳的会员卡只能在麦当劳的店里出示,假如某家分店还刊行了本人的会员卡,那末进这家店的时分除要出示麦当劳的会员卡,还要出示这家店的会员卡。

cookie的内容次要包含:名字,值,过时工夫,路径和域。
个中域能够指定某一个域好比.google.com,相称于总店招牌,好比宝洁公司,也能够指定一个域下的详细某台呆板好比www.google.com大概froogle.google.com,能够用飘柔来做比。
路径就是跟在域名前面的URL路径,好比/大概/foo等等,能够用某飘柔专柜做比。
路径与域合在一同就组成了cookie的感化局限。
假如不设置过时工夫,则暗示这个cookie的性命期为扫瞄器会话时代,只需封闭扫瞄器窗口,cookie就消散了。这类性命期为扫瞄器会话期的cookie被称为会话cookie。会话cookie一样平常不存储在硬盘上而是保留在内存里,固然这类举动并非标准划定的。假如设置了过时工夫,扫瞄器就会把cookie保留到硬盘上,封闭后再次翻开扫瞄器,这些cookie仍旧无效直到凌驾设定的过时工夫。
存储在硬盘上的cookie能够在分歧的扫瞄器历程间共享,好比两个IE窗口。而关于保留在内存里的cookie,分歧的扫瞄器有分歧的处置体例。关于IE,在一个翻开的窗口上按Ctrl-N(大概从文件菜单)翻开的窗口能够与原窗口共享,而利用其他体例新开的IE历程则不克不及共享已翻开的窗口的内存cookie;关于MozillaFirefox0.8,一切的历程和标签页都能够共享一样的cookie。一样平常来讲是用javascript的window.open翻开的窗口会与原窗口共享内存cookie。扫瞄器关于会话cookie的这类只认cookie不认人的处置体例常常给接纳session机制的web使用程序开辟者形成很年夜的困扰。

上面就是一个goolge设置cookie的呼应头的例子
HTTP/1.1302Found
Location:http://www.google.com/intl/zh-CN/
Set-Cookie:PREF=ID=0565f77e132de138:NW=1:TM=1098082649
:LM=1098082649:S=KaeaCFPo49RiA_d8;expires=Sun,17-Jan-203819:14:07GMT;path=/;domain=.google.com
Content-Type:text/html

这是利用HTTPLook这个HTTPSniffer软件来俘获的HTTP通信记录的一部分

扫瞄器在再次会见goolge的资本时主动向外发送cookie

利用Firefox能够很简单的察看现有的cookie的值
利用HTTPLook共同Firefox能够很简单的了解cookie的事情道理。

IE也能够设置在承受cookie前扣问

这是一个扣问承受cookie的对话框。

4、了解session机制
session机制是一种服务器真个机制,服务器利用一品种似于散列表的布局(也大概就是利用散列表)来保留信息。

当程序必要为某个客户真个哀求创立一个session的时分,服务器起首反省这个客户真个哀求里是不是已包括了一个session标识-称为sessionid,假如已包括一个sessionid则申明之前已为此客户端创立过session,服务器就依照sessionid把这个session检索出来利用(假如检索不到,大概会新建一个),假如客户端哀求不包括sessionid,则为此客户端创立一个session而且天生一个与此session相干联的sessionid,sessionid的值应当是一个既不会反复,又不简单被找到纪律以仿制的字符串,这个sessionid将被在本次呼应中前往给客户端保留。

保留这个sessionid的体例能够接纳cookie,如许在交互过程当中扫瞄器能够主动的依照划定规矩把这个标识发扬给服务器。一样平常这个cookie的名字都是相似于SEEESIONID,而。好比weblogic关于web使用程序天生的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID。

因为cookie能够被工资的克制,必需有其他机制以便在cookie被克制时仍旧可以把sessionid传送回服务器。常常被利用的一种手艺叫做URL重写,就是把sessionid间接附加在URL路径的前面,附加体例也有两种,一种是作为URL路径的附加信息,体现情势为http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另外一种是作为查询字符串附加在URL前面,体现情势为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
这两种体例关于用户来讲是没有区分的,只是服务器在剖析的时分处置的体例分歧,接纳第一种体例也有益于把sessionid的信息和一般程序参数辨别开来。
为了在全部交互过程当中一直坚持形态,就必需在每一个客户端大概哀求的路径前面都包括这个sessionid。

另外一种手艺叫做表单埋没字段。就是服务器会主动修正表单,增加一个埋没字段,以便在表单提交时可以把sessionid传送回服务器。好比上面的表单


在被传送给客户端之前将被改写成
value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">


这类手艺如今已较少使用,笔者打仗过的很陈旧的iPlanet6(SunONE使用服务器的前身)就利用了这类手艺。
实践上这类手艺能够复杂的用对action使用URL重写来取代。

在议论session机制的时分,经常听到如许一种曲解“只需封闭扫瞄器,session就消散了”。实在能够设想一下会员卡的例子,除非主顾自动对店家提出销卡,不然店家相对不会容易删除主顾的材料。对session来讲也是一样的,除非程序关照服务器删除一个session,不然服务器会一向保存,程序一样平常都是在用户做logoff的时分发个指令往删除session。但是扫瞄器历来不会自动在封闭之前关照服务器它将要封闭,因而服务器基本不会无机会晓得扫瞄器已封闭,之以是会有这类错觉,是年夜部分session机制都利用会话cookie来保留sessionid,而封闭扫瞄器后这个sessionid就消散了,再次毗连服务器时也就没法找到本来的session。假如服务器设置的cookie被保留到硬盘上,大概利用某种手腕改写扫瞄器收回的HTTP哀求头,把本来的sessionid发送给服务器,则再次翻开扫瞄器仍旧可以找到本来的session。

恰好是因为封闭扫瞄器不会招致session被删除,迫使服务器为seesion设置了一个生效工夫,当间隔客户端上一次利用session的工夫凌驾这个生效工夫时,服务器就能够以为客户端已中断了举动,才会把session删除以节俭存储空间。
5、了解javax.servlet.http.HttpSession
HttpSession是Java平台对session机制的完成标准,由于它仅仅是个接口,详细到每一个web使用服务器的供应商,除对标准撑持以外,仍旧会有一些标准里没有划定的渺小差别。这里我们以BEA的WeblogicServer8.1作为例子来演示。

起首,WeblogicServer供应了一系列的参数来把持它的HttpSession的完成,包含利用cookie的开关选项,利用URL重写的开关选项,session耐久化的设置,session生效工夫的设置,和针对cookie的各类设置,好比设置cookie的名字、路径、域,cookie的保存工夫等。

一样平常情形下,session都是存储在内存里,当服务器历程被中断大概重启的时分,内存里的session也会被清空,假如设置了session的耐久化特征,服务器就会把session保留到硬盘上,当服务器历程从头启动或这些信息将可以被再次利用,WeblogicServer撑持的耐久性体例包含文件、数据库、客户端cookie保留和复制。

复制严厉说来不算耐久化保留,由于session实践上仍是保留在内存里,不外一样的信息被复制到各个cluster内的服务器历程中,如许即便某个服务器历程中断事情也仍旧能够从其他历程中获得session。

cookie保存工夫的设置则会影响扫瞄器天生的cookie是不是是一个会话cookie。默许是利用会话cookie。有乐趣的能够用它来实验我们在第四节里提到的谁人曲解。

cookie的路径关于web使用程序来讲是一个十分主要的选项,WeblogicServer对这个选项的默许处置体例使得它与其他服务器有分明的区分。前面我们会专题会商。

关于session的设置参考[5]http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869

6、HttpSession罕见成绩
(在本大节中session的寄义为⑤和⑥的夹杂)

1、session在什么时候被创立
一个罕见的曲解是觉得session在有客户端会见时就被创立,但是现实是直到某server端程序挪用HttpServletRequest.getSession(true)如许的语句时才被创立,注重假如JSP没有显现的利用<%@pagesession="false"%>封闭session,则JSP文件在编译成Servlet时将会主动加上如许一条语句HttpSessionsession=HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来源。

因为session会损耗内存资本,因而,假如不盘算利用session,应当在一切的JSP中封闭它。

2、session什么时候被删除
综合后面的会商,session鄙人列情形下被删除a.程序挪用HttpSession.invalidate();或b.间隔上一次收到客户端发送的sessionid工夫距离凌驾了session的超时设置;或c.服务器历程被中断(非耐久session)

3、怎样做到在扫瞄器封闭时删除session
严厉的讲,做不到这一点。能够做一点勉力的举措是在一切的客户端页面里利用javascript代码window.oncolose来监督扫瞄器的封闭举措,然后向服务器发送一个哀求来删除session。可是关于扫瞄器溃散大概强行杀逝世历程这些十分规手腕仍旧力所不及。

4、有个HttpSessionListener是怎样回事
你能够创立如许的listener往监控session的创立和烧毁事务,使得在产生如许的事务时你能够做一些响应的事情。注重是session的创立和烧毁举措触发listener,而不是相反。相似的与HttpSession有关的listener另有HttpSessionBindingListener,HttpSessionActivationListener和HttpSessionAttributeListener。

5、寄存在session中的对象必需是可序列化的吗
不是必须的。请求对象可序列化只是为了session可以在集群中被复制大概可以耐久保留大概在需要时server可以临时把session互换出内存。在WeblogicServer的session中安排一个不成序列化的对象在把持台上会收到一个告诫。我所用过的某个iPlanet版本假如session中有不成序列化的对象,在session烧毁时会有一个Exception,很奇异。

6、怎样才干准确的对付客户端克制cookie的大概性
对一切的URL利用URL重写,包含超链接,form的action,和重定向的URL,详细做法拜见[6]
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770

7、开两个扫瞄器窗口会见使用程序会利用统一个session仍是分歧的session
拜见第三大节对cookie的会商,对session来讲是只认id不认人,因而分歧的扫瞄器,分歧的窗口翻开体例和分歧的cookie存储体例城市对这个成绩的谜底有影响。

8、怎样避免用户翻开两个扫瞄器窗口操纵招致的session凌乱
这个成绩与避免表单屡次提交是相似的,能够经由过程设置客户真个令牌来办理。就是在服务器每次天生一个分歧的id前往给客户端,同时保留在session里,客户端提交表单时必需把这个id也前往服务器,程序起首对照前往的id与保留在session里的值是不是分歧,假如纷歧致则申明本次操纵已被提交过了。能够参看《J2EE中心形式》关于暗示层形式的部分。必要注重的是关于利用javascriptwindow.open翻开的窗口,一样平常不设置这个id,大概利用独自的id,以防主窗口没法操纵,倡议不要再window.open翻开的窗口里做修正操纵,如许就能够不必设置。

9、为何在WeblogicServer中改动session的值后要从头挪用一次session.setValue
做这个举措次要是为了在集群情况中提醒WeblogicServersession中的值产生了改动,必要向其他服务器历程复制新的session值。

10、为何session不见了
扫除session一般生效的要素以外,服务器自己的大概性应当是微不足道的,固然笔者在iPlanet6SP1加多少补钉的Solaris版本上倒也碰到过;扫瞄器插件的大概性次之,笔者也碰到过3721插件酿成的成绩;实际上防火墙大概代办署理服务器在cookie处置上也有大概会呈现成绩。
呈现这一成绩的年夜部分缘故原由都是程序的毛病,最多见的就是在一个使用程序中往会见别的一个使用程序。我们鄙人一节会商这个成绩。
7、跨使用程序的session共享

经常有如许的情形,一个年夜项目被支解成多少小项目开辟,为了可以互不搅扰,请求每一个小项目作为一个独自的web使用程序开辟,但是到了最初俄然发明某几个小项目之间必要共享一些信息,大概想利用session来完成SSO(singlesignon),在session中保留login的用户信息,最天然的请求是使用程序间可以会见相互的session。

但是依照Servlet标准,session的感化局限应当仅仅限于以后使用程序下,分歧的使用程序之间是不克不及够相互会见对方的session的。各个使用服务器从实践效果上都恪守了这一标准,可是完成的细节却大概各有分歧,因而办理跨使用程序session共享的办法也各不不异。

起首来看一下Tomcat是怎样完成web使用程序之间session的断绝的,从Tomcat设置的cookie路径来看,它对分歧的使用程序设置的cookie路径是分歧的,如许分歧的使用程序所用的sessionid是分歧的,因而即便在统一个扫瞄器窗口里会见分歧的使用程序,发送给服务器的sessionid也能够是分歧的。

依据这个特征,我们能够推想Tomcat中session的内存布局大抵以下。

笔者之前用过的iPlanet也接纳的是一样的体例,估量SunONE与iPlanet之间不会有太年夜的不同。关于这类体例的服务器,办理的思绪很复杂,实践实施起来也不难。要末让一切的使用程序共享一个sessionid,要末让使用程序可以取得其他使用程序的sessionid。

iPlanet中有一种很复杂的办法来完成共享一个sessionid,那就是把各个使用程序的cookie路径都设为/(实践上应当是/NASApp,关于使用程序来说它的感化相称于根)。
/NASApp


必要注重的是,操纵共享的session应当遵守一些编程商定,好比在sessionattribute名字的后面加上使用程序的前缀,使得setAttribute("name","neo")酿成setAttribute("app1.name","neo"),以避免定名空间抵触,招致相互掩盖。


在Tomcat中则没有这么便利的选择。在Tomcat版本3上,我们还能够有一些手腕来共享session。关于版本4以上的Tomcat,今朝笔者还没有发明复杂的举措。只能借助于第三方的力气,好比利用文件、数据库、JMS大概客户端cookie,URL参数大概埋没字段等手腕。

我们再看一下WeblogicServer是怎样处置session的。

从截屏画面上能够看到WeblogicServer对一切的使用程序设置的cookie的路径都是/,这是否是意味着在WeblogicServer中默许的就能够共享session了呢?但是一个小实行便可证实即便分歧的使用程序利用的是统一个session,各个使用程序仍旧只能会见本人所设置的那些属性。这申明WeblogicServer中的session的内存布局大概以下

关于如许一种布局,在session机制自己下去办理session共享的成绩应当是不成能的了。除借助于第三方的力气,好比利用文件、数据库、JMS大概客户端cookie,URL参数大概埋没字段等手腕,另有一种较为便利的做法,就是把一个使用程序的session放到ServletContext中,如许别的一个使用程序就能够从ServletContext中获得前一个使用程序的援用。示例代码以下,

使用程序A
context.setAttribute("appA",session);

使用程序B
contextA=context.getContext("/appA");
HttpSessionsessionA=(HttpSession)contextA.getAttribute("appA");

值得注重的是这类用法不成移植,由于依据ServletContext的JavaDoc,使用服务器能够处于平安的缘故原由关于context.getContext("/appA");前往空值,以上做法在WeblogicServer8.1中经由过程。

那末WeblogicServer为何要把一切的使用程序的cookie路径都设为/呢?本来是为了SSO,但凡共享这个session的使用程序都能够共享认证的信息。一个复杂的实行就能够证实这一点,修正起首登录的谁人使用程序的形貌符weblogic.xml,把cookie路径修正为/appA会见别的一个使用程序会从头请求登录,即便是反过去,先会见cookie路径为/的使用程序,再会见修正过路径的这个,固然不再提醒登录,可是登录的用户信息也会丧失。注重做这个实行时认证体例应当利用FORM,由于扫瞄器和web服务器对basic认证体例有其他的处置体例,第二次哀求的认证不是经由过程session来完成的。详细请参看[7]secion14.8Authorization,你能够修正所附的示例程序来做这些实验。

8、总结
session机制自己其实不庞大,但是实在现和设置上的天真性却使得详细情形庞大多变。这也请求我们不克不及把仅仅某一次的履历大概某一个扫瞄器,服务器的履历看成广泛合用的履历,而是一直必要详细情形详细剖析。
择要:固然session机制在web使用程序中被接纳已很长工夫了,可是仍旧有良多人不分明session机制的实质,以致不克不及准确的使用这一手艺。本文将具体会商session的事情机制而且对在Javawebapplication中使用session机制经常见的成绩作出解答。

java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
因胸联盟 该用户已被删除
沙发
发表于 2015-1-20 12:13:47 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
乐观 该用户已被删除
板凳
发表于 2015-1-25 10:38:11 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
谁可相欹 该用户已被删除
地板
发表于 2015-2-2 21:42:15 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
柔情似水 该用户已被删除
5#
发表于 2015-2-8 07:03:19 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-12 08:38:37 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
不帅 该用户已被删除
7#
发表于 2015-2-13 01:00:06 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
爱飞 该用户已被删除
8#
发表于 2015-2-16 09:20:47 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
海妖 该用户已被删除
9#
发表于 2015-3-5 03:24:12 | 只看该作者
是一种使用者不需花费很多时间学习的语言
萌萌妈妈 该用户已被删除
10#
 楼主| 发表于 2015-3-5 16:03:03 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
11#
发表于 2015-3-7 03:41:27 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
小女巫 该用户已被删除
12#
发表于 2015-3-14 07:58:47 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
若天明 该用户已被删除
13#
发表于 2015-3-21 00:54:56 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-28 13:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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