JAVA网站制作之Java 在Client/Server 收集中的使用 (转...
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.client|server|收集Java在Client/Server收集中的使用( 2000年08月09日10:19)
跟着Java言语的日趋盛行,出格是Java与InternetWeb的亲切分离,使它在环球获得了伟大的乐成。Java言语以其自力于平台、面向对象、散布式、多线索及完美的平安机制等特征,成为古代信息体系建立中的优秀的开辟平台和运转情况。
1、Java收集使用模子
和Internet上的很多情况一样,完全的Java使用情况实践上也是一个客户机/服务器情况,更切实地说是扫瞄器/服务器模子(即Browser/Server模子,简称Web模子)。但与传统的客户机/服务器(C/S)的二层布局分歧,使用Java的Web模子是由三层布局构成的。传统的C/S布局经由过程动静传送机制,由客户端收回哀求给服务器,服务器举行响应处置后经传送机制送回客户端。而在Web模子中,服务器一端被分化成两部分:一部分是使用服务器(Web服务器),另外一部分是数据库服务器。
针对散布式盘算情况,Java经由过程其收集类库供应了优秀的撑持。对数据散布,Java供应了一个URL(UniformResourceLocator)对象,使用此对象可翻开并会见收集上的对象,其会见体例与会见当地文件体系几近完整不异。对操纵散布,Java的客户机/服务器形式能够把运算从服务器分离到客户一端(服务器卖力供应查询了局,客户机卖力构造了局的显现),从而进步全部体系的实行效力,增添静态可扩大性。Java收集类库是Java言语为顺应Internet情况而举行的扩大。别的,为顺应Internet的不休开展,Java还供应了静态扩大协定,以不休扩大Java收集类库。
Java的收集类库撑持多种Internet协定,包含Telnet,FTP和HTTP(WWW),与此绝对应的Java收集类库的子类库为:
Java.net
Java.net.ftp
Java.net.www.content
Java.net.www.html
Java.net.www.http
这些子类库各自包容了可用于处置Internet协定的类和办法。个中,java.net用于处置一些基础的收集功效,包含远程登录(Telnet);java.net.ftp用于处置ftp协定;java.net.www.content用于处置WWW页面内容;java.net.www.html和java.net.www.http则分离供应了对HTML言语和HTTP协定的撑持。
2、客户机/服务器情况下的Java使用程序
客户机/服务器在散布处置过程当中,利用基于毗连的收集通讯形式。该通讯形式起首在客户机和服务器之间界说一套通讯协定,并创立一Socket类,使用这个类创建一条牢靠的链接;然后,客户机/服务器再在这条链接上牢靠地传输数据。客户机收回哀求,服务器监听来自客户机的哀求,并为客户机供应呼应服务。这就是典范的"哀求--应对"形式。上面是客户机/服务器的一个典范运作历程:
1、服务器监听响应端口的输出;
2、客户机收回一个哀求;
3、服务器吸收到此哀求;
4、服务器处置这个哀求,并把了局前往给客户机;
5、反复上述历程,直至完成一次会话历程。
依照以上历程,我们利用Java言语编写一个分离针对服务器和客户机的使用程序(Application)。该程序在服务器上时,程序卖力监听客户机哀求,为每一个客户机哀求创建Socket毗连,从而为客户机供应服务。本程序供应的服务为:读取来自客户机的一行文本,反转该文本,并把它发还给客户机。
经由过程该程序实例我们看到,利用Java言语计划C/S程序时必要注重以下几点:
(1)、服务器应利用ServerSocket类来处置客户机的毗连哀求。当客户机毗连到服务器所监听的端口时,ServerSocket将分派一新的Socket对象。这个新的Socket对象将毗连到一些新端口,卖力处置与之绝对应客户机的通讯。然后,服务器持续监听ServerSocket,处置新的客户机毗连。
Socket和ServerSocket是Java收集类库供应的两个类。
(2)、服务器利用了多线程机制。Server对象自己就是一个线程,它的run()办法是一个无穷轮回,用以监听来自客户机的毗连。每当有一个新的客户机毗连时,ServerSocket就会创立一个新的Socket类实例,同时服务器也将创立一新线程,即一个Connection对象,以处置基于Socket的通讯。与客户机的一切通讯均由这个Connection对象处置。Connection的机关函数将初始化基于Socket对象的通讯流,并启动线程的运转。与客户机的通讯和服务的供应,均由Connection对象处置。
(3)、客户机起首创立一Socket对象,用以与服务器通讯。以后需创立两个对象:DataInputStream和PrintStream,前者用以从Socket的InputStream输出流中读取数据,后者则用于往Socket的OutputStream中写数据。最初,客户机程序从尺度输出(如:把持台)中读取数据,并把这些数据写到服务器,在从服务器读取应对动静,然后把这些应对动静写到准输入。
以下分离为服务器和客户机真个源程序清单。本程序在NT4.0收集情况(TCP/IP)下利用JDK1.1调试经由过程。
3、编写服务器类Java程序
//Server.java
importjava.io.*;
importjava.net.*;
publicclassServerextendsThread
{
publicfinalstaticintDefault_Port=6543;
protectdintport;
protectdServerSocktlisten_socket;
//界说堕落例程:假如呈现非常毛病,加入程序。
Publicstaticvoidfail(Exceptione,Stringmsg)
{
System.err.println(msg+":"+e);
System.exit(1);
}
//界说并启动服务器的Socket例程,监听客户机的毗连哀求。
publicServer(intport)
{
if(port==0)port=Default_Port;
this.port=port;
try
{
listen_socket=newServerSocket(port);
}
catch(IOExceptione)fail(e,"Exceptioncreatingserversocket");
System.out.println("Server:listeningonport"+port);
This.start();
}
/*上面为服务器监听线程的主程序。该线程一向轮回实行,监听并承受客户机收回的毗连
哀求。对每个毗连,均发生一个毗连对象与之对应,经由过程Socket通道举行通讯。*/
publicvoidrun()
{
try
{
while(true)
{
Socketclient_socket=listen_socket.accept();
Connectionc=newConnection(client_socket);
}
}
catch(IOExceptione)fail(e,"Exceptionwhilelisteningforconnections")
}
//启动服务器主程序
publicstaticvoidmain(Stringargs[])
{
intport=0;
if(args.length==1)
{
tryport=Integer.parseInt(args);
catch(NumberFormatExceptione)port=0;
}
newServer(port);
} //Endofthemain
} //EndofServerclass
//以下界说了Connection类,它是用来处置与客户机的一切通讯的线程。
classConnectionextendsThread
{
protectedSocketclient;
protectedDataInputStreamin;
protectedPrintStreamout;
//初始化通讯流并启动线程
publicConnection(Socketclient_socket)
{
client=client_socket;
try
{
in=newDataInputStream(client.getinputStream());
out=newPrintStream(client.getOutputStream());
}
catch(IOExceptione)
{
tryclient.close();
catch(IOExceptione2);
System.err.println("Exceptionwhilegettingsocketstreram:"+e);
Return;
}
this.start;
} //EndofConnectionmethod
//服务例程:读出一行文本;反转文本;前往文本。
publicvoidrun()
{
Stringline;
StringBufferrevline;
intlen;
try
{
for(;;)
{
//Readaline
line=in.readline();
if(line==null)break;
//Reversetheline
len=line.length();
revline=newStringBuffer(len);
for(inti=len-1;i>=0;i--)
revline.insert(len-1-I;line.charAt(i));
//Writeoutthereverseline
out.println(revline);
}
catch(IOExceptione);
finallytryclient.close();
catch(IOExceptione2);
}
//Endofrunmethod
}
//EndofConnectionclass
3、编写客户机类Java程序
//Client.java
importjava.io.*;
importjava.net.*;
publicclassClientextends
{
publicstaticfinalintDefault_Port=6543;
//界说堕落例程
publicstaticfinalvoidusage()
{
System.out.println("Usage:JavaClient[]");
System.exit(0);
}
publicstaticvoidmain(Stringargs[])
{
intport=Default_Port;
Sockets=null;
//剖析端口参数
if((args.length!=1)&&(args.length!=2))usage();
if(args.length==1)
port=Default_Port;
else
{
tryport=Integer.parseInt(args);
catch(NumberFormaatExceptione)usage();
}
try{
//发生一个Socket,经由过程指定的端口与主机通讯。
s=newSocket(args,port);
//发生用于收回和吸收的文本字符流
DataInputStreamsin=newDataInputStream(s.getInputStream());
PrintStreamsout=newDataInputStream(s.getInputStream());
//从把持台读进字符流
DataInputStreamin=newDataInputStream(System.in);
//前往毗连的地点和端口
System.out.println("Connectedto"+s.getInetAddress()+":"+s.getPort());
Stringline;
For(;;)
{
//显现提醒符
System.out.print(">");
System.out.flush();
//读进把持台输出的一行字符
line=in.readline();
if(line==null)break;
//将吸收的文本行送至服务器
sout.println(line);
//从服务器吸收一行字符
line=sin.readline();
//Checkifconnectionisclosed(i.e.forEOF)
if(line==null)
{
System.out.println("Connectionclosedbyserver.");
Break;
}
//在把持台上显现吸收的字符
System.out.println(line);
}
//Endofforloop
}
/Endoftry
catch(IOExceptione)System.err.println(e);
//Alwaysbesuretoclosethesocket
finally
{
tryif(s!=null)s.close();
catch(IOExceptione2);
}
} //Endofmain
} //EndofClient
运转该客户机程序时,必需以服务器主机名作为第一个参数,服务器端标语为第二个参数,
个中服务器端标语可缺省。
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种突破用户端机器环境和CPU 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 是一种为 Internet发展的计算机语言 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
页:
[1]