老尸 发表于 2015-1-18 11:43:56

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。

因胸联盟 发表于 2015-1-18 21:18:54

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

乐观 发表于 2015-1-23 18:11:51

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

深爱那片海 发表于 2015-1-31 18:40:07

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

精灵巫婆 发表于 2015-2-6 02:40:47

是一种突破用户端机器环境和CPU

简单生活 发表于 2015-2-7 17:29:43

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

仓酷云 发表于 2015-2-22 17:25:54

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

活着的死人 发表于 2015-3-1 20:32:38

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

飘灵儿 发表于 2015-3-4 00:57:26

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

若相依 发表于 2015-3-7 05:53:48

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

第二个灵魂 发表于 2015-3-14 11:49:59

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

分手快乐 发表于 2015-3-28 23:57:25

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

谁可相欹 发表于 2015-3-29 17:21:25

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

再现理想 发表于 2015-4-4 09:46:02

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

兰色精灵 发表于 2015-5-6 17:09:43

是一种为 Internet发展的计算机语言

飘飘悠悠 发表于 2015-6-9 06:59:49

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

若天明 发表于 2015-6-9 18:36:50

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

灵魂腐蚀 发表于 2015-6-13 02:38:22

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

莫相离 发表于 2015-6-14 15:46:45

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

海妖 发表于 2015-6-15 22:49:00

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
页: [1]
查看完整版本: JAVA网站制作之Java 在Client/Server 收集中的使用 (转...