仓酷云

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

[学习教程] 发布一篇NameSender程序片

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

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

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

x
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。
正如新近指出的那样,程序片必需用Java1.0编写,使其能与尽年夜多半的扫瞄器顺应。也恰是因为这个缘故原由,我们发生的类数目应尽量地少。以是我们在这儿不思索利用后面计划好的Dgram类,而将数据报的一切保护事情都转到代码行中举行。别的,程序片要用一个线程监督由服务器传回的呼应信息,而非完成Runnable接口,用集成到程序片的一个自力线程来做这件事变。固然,如许做对代码的可读性倒霉,但却能发生一个单类(和单个服务器哀求)程序片:
  1. //:NameSender.java
  2. //Anappletthatsendsanemailaddress
  3. //asadatagram,usingJava1.02.
  4. importjava.awt.*;
  5. importjava.applet.*;
  6. importjava.net.*;
  7. importjava.io.*;
  8. publicclassNameSenderextendsApplet
  9. implementsRunnable{
  10. privateThreadpl=null;
  11. privateButtonsend=newButton(
  12. "Addemailaddresstomailinglist");
  13. privateTextFieldt=newTextField(
  14. "typeyouremailaddresshere",40);
  15. privateStringstr=newString();
  16. privateLabel
  17. l=newLabel(),l2=newLabel();
  18. privateDatagramSockets;
  19. privateInetAddresshostAddress;
  20. privatebyte[]buf=
  21. newbyte[NameCollector.BUFFER_SIZE];
  22. privateDatagramPacketdp=
  23. newDatagramPacket(buf,buf.length);
  24. privateintvcount=0;
  25. publicvoidinit(){
  26. setLayout(newBorderLayout());
  27. Panelp=newPanel();
  28. p.setLayout(newGridLayout(2,1));
  29. p.add(t);
  30. p.add(send);
  31. add("North",p);
  32. Panellabels=newPanel();
  33. labels.setLayout(newGridLayout(2,1));
  34. labels.add(l);
  35. labels.add(l2);
  36. add("Center",labels);
  37. try{
  38. //Auto-assignportnumber:
  39. s=newDatagramSocket();
  40. hostAddress=InetAddress.getByName(
  41. getCodeBase().getHost());
  42. }catch(UnknownHostExceptione){
  43. l.setText("Cannotfindhost");
  44. }catch(SocketExceptione){
  45. l.setText("Cantopensocket");
  46. }
  47. l.setText("Readytosendyouremailaddress");
  48. }
  49. publicbooleanaction(Eventevt,Objectarg){
  50. if(evt.target.equals(send)){
  51. if(pl!=null){
  52. //pl.stop();DeprecatedinJava1.2
  53. Threadremove=pl;
  54. pl=null;
  55. remove.interrupt();
  56. }
  57. l2.setText("");
  58. //Checkforerrorsinemailname:
  59. str=t.getText().toLowerCase().trim();
  60. if(str.indexOf()!=-1){
  61. l.setText("Spacesnotallowedinname");
  62. returntrue;
  63. }
  64. if(str.indexOf(,)!=-1){
  65. l.setText("Commasnotallowedinname");
  66. returntrue;
  67. }
  68. if(str.indexOf(@)==-1){
  69. l.setText("Namemustinclude@");
  70. l2.setText("");
  71. returntrue;
  72. }
  73. if(str.indexOf(@)==0){
  74. l.setText("Namemustpreceed@");
  75. l2.setText("");
  76. returntrue;
  77. }
  78. Stringend=
  79. str.substring(str.indexOf(@));
  80. if(end.indexOf(.)==-1){
  81. l.setText("Portionafter@must"+
  82. "haveanextension,suchas.com");
  83. l2.setText("");
  84. returntrue;
  85. }
  86. //EverythingsOK,sosendthename.Geta
  87. //freshbuffer,soitszeroed.Forsome
  88. //reasonyoumustuseafixedsizerather
  89. //thancalculatingthesizedynamically:
  90. byte[]sbuf=
  91. newbyte[NameCollector.BUFFER_SIZE];
  92. str.getBytes(0,str.length(),sbuf,0);
  93. DatagramPackettoSend=
  94. newDatagramPacket(
  95. sbuf,100,hostAddress,
  96. NameCollector.COLLECTOR_PORT);
  97. try{
  98. s.send(toSend);
  99. }catch(Exceptione){
  100. l.setText("Couldntsenddatagram");
  101. returntrue;
  102. }
  103. l.setText("Sent:"+str);
  104. send.setLabel("Re-send");
  105. pl=newThread(this);
  106. pl.start();
  107. l2.setText(
  108. "Waitingforverification"+++vcount);
  109. }
  110. elsereturnsuper.action(evt,arg);
  111. returntrue;
  112. }
  113. //Thethreadportionoftheappletwatchesfor
  114. //thereplytocomebackfromtheserver:
  115. publicvoidrun(){
  116. try{
  117. s.receive(dp);
  118. }catch(Exceptione){
  119. l2.setText("Couldntreceivedatagram");
  120. return;
  121. }
  122. l2.setText(newString(dp.getData(),
  123. 0,0,dp.getLength()));
  124. }
  125. }///:~
复制代码
程序片的UI(用户界面)十分复杂。它包括了一个TestField(文本字段),以便我们键进一个电子信件地点;和一个Button(按钮),用于将地点发给服务器。两个Label(标签)用于向用户呈报形态信息。
到如今为止,人人已能判别出DatagramSocket、InetAddress、缓冲区和DatagramPacket都属于收集毗连中对照贫苦的部分。最初,人人可看到run()办法完成了线程部分,使程序片可以“侦听”由服务器传回的呼应信息。
init()办法用人人熟习的结构工具设置GUI,然后创立DatagramSocket,它将同时用于数据报的收发。
action()办法只卖力监督我们是不是按下了“发送”(send)按钮。记着,我们已被限定在Java1.0下面,以是不克不及再用较天真的外部类了。按钮按下今后,接纳的第一项举动即是反省线程pl,看看它是不是为null(空)。假如不为null,标明有一个举动线程正在运转。动静初次收回时,会启动一个新线程,用它监督来自服务器的回应。以是倘使有个线程正在运转,就意味着这并不是用户第一次发送动静。pl句柄被设为null,同时中断本来的监督者(这是最公道的一种做法,由于stop()已被Java1.2“否决”,这在前一章已注释过了)。
不管这是不是按钮被第一次按下,I2中的笔墨城市扫除。
下一组语句将反省E-mail名字是不是及格。String.indexOf()办法的感化是搜刮个中的不法字符。假如找到一个,就把情形呈报给用户。注重举行一切这些事情时,都不用触及收集通讯,以是速率十分快,并且不会影响带宽和服务器的功能。
名字校验经由过程今后,它会打包到一个数据报里,然后接纳与后面谁人数据报示例一样的体例发到主机地点和端口编号。第一个标签会产生变更,指出已乐成发送进来。并且按钮上的笔墨也会改动,酿成“重发”(resend)。这时候会启动线程,第二个标签则会告知我们程序片正在期待来自服务器的回应。
线程的run()办法会使用NameSender中包括的DatagramSocket来吸收数据(receive()),除非呈现来自服务器的数据报包,不然receive()会临时处于“梗塞”大概“停息”形态。了局失掉的数据包会放进NameSender的DatagramPacketdp中。数据会从包中提掏出来,并置进NameSender的第二个标签。随后,线程的实行将中止,成为一个“逝世”线程。若某段工夫里没有收到来自服务器的回应,用户大概变得不耐心,再次按下按钮。如许做会中止以后线程(数据收回今后,会再建一个新的)。因为用一个线程来监督回应数据,以是用户在监督时代仍旧能够自在利用UI。

1.Web页
固然,程序片必需放到一个Web页里。上面列出完全的Web页源码;略微研讨一下便可看出,我用它从本人创办的邮寄列表(MaillingList)里主动搜集名字。
  1. <HTML>
  2. <HEAD>
  3. <METACONTENT="text/html">
  4. <TITLE>
  5. AddYourselftoBruceEckelsJavaMailingList
  6. </TITLE>
  7. </HEAD>
  8. <BODYLINK="#0000ff"VLINK="#800080"BGCOLOR="#ffffff">
  9. <FONTSIZE=6><P>
  10. AddYourselftoBruceEckelsJavaMailingList
  11. </P></FONT>
  12. Theappletonthispagewillautomaticallyaddyouremailaddresstothemailinglist,soyouwillreceiveupdateinformationaboutchangestotheonlineversionof"ThinkinginJava,"notificationwhenthebookisinprint,informationaboutupcomingJavaseminars,andnotificationaboutthe“Hands-onJavaSeminar”MultimediaCD.Typeinyouremailaddressandpressthebuttontoautomaticallyaddyourselftothismailinglist.<HR>
  13. <appletcode=NameSenderwidth=400height=100>
  14. </applet>
  15. <HR>
  16. Ifafterseveraltries,youdonotgetverificationitmeansthattheJavaapplicationontheserverishavingproblems.Inthiscase,youcanaddyourselftothelistbysendingemailto
  17. <AHREF="mailto:Bruce@EckelObjects.com">
  18. Bruce@EckelObjects.com</A>
  19. </BODY>
  20. </HTML>
复制代码
程序片标志(<applet>)的利用十分复杂,和第13章展现的那一个并没有甚么区分。
那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net网页编程比java好。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-21 10:31:16 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
admin 该用户已被删除
板凳
发表于 2015-1-24 20:35:19 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-2 12:48:57 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
蒙在股里 该用户已被删除
5#
发表于 2015-2-5 23:06:32 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
谁可相欹 该用户已被删除
6#
发表于 2015-2-6 14:30:31 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
乐观 该用户已被删除
7#
发表于 2015-2-16 12:05:15 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
变相怪杰 该用户已被删除
8#
发表于 2015-3-5 05:43:22 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
老尸 该用户已被删除
9#
发表于 2015-3-7 09:26:50 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再现理想 该用户已被删除
10#
发表于 2015-3-14 16:44:12 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
小妖女 该用户已被删除
11#
发表于 2015-3-21 12:11:25 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
因胸联盟 该用户已被删除
12#
发表于 2015-3-21 18:30:16 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
简单生活 该用户已被删除
13#
发表于 2015-3-25 18:27:55 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
第二个灵魂 该用户已被删除
14#
发表于 2015-4-6 21:47:01 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
爱飞 该用户已被删除
15#
发表于 2015-4-13 12:50:52 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
金色的骷髅 该用户已被删除
16#
发表于 2015-4-25 05:22:54 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
小魔女 该用户已被删除
17#
发表于 2015-5-3 17:01:27 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
活着的死人 该用户已被删除
18#
发表于 2015-6-13 11:07:01 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
只想知道 该用户已被删除
19#
发表于 2015-6-13 18:36:00 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
萌萌妈妈 该用户已被删除
20#
 楼主| 发表于 2015-6-15 16:33:37 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 07:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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