海妖 发表于 2015-1-18 11:26:45

了解下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的企业模块,专门针对企业数据库服务器的连接维护。

乐观 发表于 2015-1-18 18:54:25

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

莫相离 发表于 2015-1-22 23:55:11

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

若相依 发表于 2015-1-24 12:38:02

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

小妖女 发表于 2015-1-25 20:57:54

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

冷月葬花魂 发表于 2015-1-26 19:21:09

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

飘飘悠悠 发表于 2015-2-1 12:06:58

Java 编程语言的风格十分接近C、C++语言。

精灵巫婆 发表于 2015-2-7 04:38:10

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

再见西城 发表于 2015-2-8 14:34:02

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

老尸 发表于 2015-2-10 17:52:54

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

蒙在股里 发表于 2015-2-21 19:41:46

是一种使用者不需花费很多时间学习的语言

只想知道 发表于 2015-3-4 11:27:49

是一种使网页(Web Page)产生生动活泼画面的语言

兰色精灵 发表于 2015-3-11 19:03:45

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

若天明 发表于 2015-3-19 08:05:01

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

因胸联盟 发表于 2015-3-27 13:52:42

是一种突破用户端机器环境和CPU
页: [1]
查看完整版本: 了解下JAVA的使用Java完成Web服务器