了解下JAVA的使用Java完成Web服务器
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;
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的企业模块,专门针对企业数据库服务器的连接维护。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 Java 编程语言的风格十分接近C、C++语言。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 是一种使用者不需花费很多时间学习的语言 是一种使网页(Web Page)产生生动活泼画面的语言 是一种突破用户端机器环境和CPU J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 是一种突破用户端机器环境和CPU
页:
[1]