|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net网页编程和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
1、HTTP协定的感化道理
HTTP协定的事情道理包含四个步骤:
1.毗连:Web扫瞄器与Web服务器创建毗连。
2.哀求:Web扫瞄器经由过程socket向Web服务器提交哀求。
3.应对:Web扫瞄器提交哀求后,经由过程HTTP传送给Web服务器。Web服务器接到哀求后,举行事件处置,处置了局又经由过程HTTP传回给Web扫瞄器,从而在Web扫瞄器上显现出所哀求的页面。
4.干系毗连:当应对停止后,Web扫瞄器与Web服务器必需断开,以包管别的Web扫瞄器可以与Web服务器创建毗连。
2、用Java完成Web服务器的程序计划
依据上述HTTP协定的感化道理,完成GET哀求的Web服务器程序的办法以下:
1.创立ServerSocket类对象,监听端口8080。这是为了区分于HTTP的尺度TCP/IP端口80而取的;2.守候、承受客户机毗连到端口8080,失掉与客户机毗连的socket;3.创立与socket联系关系的输出流instream和输出出流outstream;
格局为:GET路径/文件名HTTP/1.0;4.从与socket联系关系的输出流instream中读取一行客户机提交的哀求信息,哀求信息的格局为:GET路径/文件名HTTP/1.0;5.从哀求信息中猎取哀求范例。假如哀求范例是GET,则从哀求信息中猎取所会见的HTML文件名。没有HTML文件名时,则以index.htm1作为文件名;6.假如HTML文件存在,则翻开HTML文件,把HTTP头信息和HTML文件内容经由过程socket传回给Web服务器,然后封闭文件,不然发送毛病信息给Web扫瞄器;7.封闭与响应Web扫瞄器毗连的socket字。
上面的程序是依据上述办法编写的,可完成多线程的Web服务器,以包管多个客户性能同时与该Web服务器毗连。
//WebServer.java用Java编写Web服务器
importjava.io.*;
importjava.net.*;
importjava.util.Date;
publicclassWebServer{
publicstaticvoidmain(Stringargs[])
{
inti=1,PORT=8080;
ServerSocketserver=null;
Socketclient=null;
try{
server=newServerSocket(PORT);
System.out.println("WebServerislisteningonport"
+server.getLocalPort());
for(;;){
client=server.accept();
//承受客户机的毗连哀求
newConnectionThread(client,i).start();
i++;
}
}catch(Exceptione){System.out.println(e);}
}
}
/*ConnnectionThread类完成
与一个Web扫瞄器的通讯*/
classConnectionThreadextendsThread{
Socketclient;//毗连Web扫瞄器的socket字
intcounter;//计数器
publicConnectionThread(Socketcl,intc){
client=cl;
counter=c;
}
publicvoidrun()//线程体
{
try{
StringdeskIP=client.getInetAddress().toString();
//客户机IP地点
intdestport=client.getPort();
//客户机端标语
System.out.println("Connecction"+counter+":
connectedto"+destIP+"onport"+destport+".");
PrintStreamoutstream=newprintStream(client.getOoutputStream());
DataInputStreaminstream+newDataInputStream(client.getInputStream());
Stringinline=instream.readLine();
//读取Web扫瞄器提交的哀求信息
System.out.println("Received:"+inline);
if(getrequest(inline)){//假如是GET哀求
Stringfilename=getfilename(inline);
Filefile=newFile(filename);
if(file.exists()){
//若文件存在,则将文件送给Web扫瞄器
System.out.println(filename+"requested.");
outstream.println("HTTP/1.0200OK");
outstream.println("MIME_version:1.0");
outstream.println("Content_Type:text/htm1");
intlen=(int)file.length();
outstream.println("Content_Length:"+len);
outstream.println("");
sendfile(outstream,file);//发送文件
outstream.flush();
}else{//文件不存在时
Stringnotfound="<html><head><title>
NotFound</title></head>
<body><hl>Error404-Filenotfound
</hl></body></html>";
outstream.println("HTTP/1.0404nofound");
outstream.println("Content_Type:text/html");
outstream.println("Content_Length:"+notfound.length()+2);
outstream.println("");
outstream.println(notfound);
outstream.flush();
}
}
longm1=1;
while(m10)
{
if(s.substring(0,3).equalsIgnoreCase("GET"))returntrue;
}
returnfalse;
}
/*猎取要会见的文件名*/
Stringgetfilename(Strings){
Stringf=s.substring(s.indexOf()+1);
f=f.substring(0,f.indexOf());
try{
if(f.charAt(0)==/)
f=f.substring(1);
}catch(StringIndexOutOfBoundsExceptione){
System.out.println("Exception:"+e);
}
if(f.equals(""))f="index.html";
returnf;
}
/*把指定文件发送给Web扫瞄器*/
voidsendfile(PrintStreamouts,Filefile){
try{
DataInputStreamin=newDataInputStream(newFileInputStream(file));
intlen=(int)file.length();
bytebuf[]=newbyte[len];
in.readFully(buf);
outs.write(buf,0,len);
outs.flush();
in.close();
}catch(Exceptione){
System.out.println("Errorretrievingfile.");
System.exit(1);
}
}
}
程序中的ConnectionThread线程子类用来剖析一个Web扫瞄器提交的哀求,并将应对信息传回给Web扫瞄器。个中,getrequest()办法用来检测客户的哀求是不是为"GET";getfilename(s)办法是从客户哀求信息s中猎取要会见的HTML文件名;sendfile()办法把指定文件内容经由过程socket传回给Web扫瞄器。
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。 |
|