选择显示字体大小

如何用java实现web服务器(1)

一、http协议的作用原理

www是以inte.net作为传输媒介的一个应用系统,www网上最基本的传输单位是web网页。www的工作基于客户机/服务器计算模型,由web 浏览器(客户机)和web服务器(服务器)构成,两者之间采用超文本传送协议(http)进行通信。http协议是基于tcp/ip协议之上的协议,是web浏览器和web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。http协议的作用原理包括四个步骤:

(1) 连接:web浏览器与web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。

(2) 请求:web浏览器通过socketweb服务器提交请求。http的请求一般是get或post命令(post用于form参数的传递)。get命令的格式为:

get 路径/文件名 http/1.0

文件名指出所访问的文件,http/1.0指出web浏览器使用的http版本。

(3) 应答:web浏览器提交请求后,通过http协议传送给web服务器web服务器接到后,进行事务处理,处理结果又通过http传回给web浏览器,从而在web浏览器上显示出所请求的页面。

例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送get命令:get /mydir/index.html http/1.0。主机名为www.mycompany.com的web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,web服务器把该文件内容传送给相应的web浏览器。

为了告知 web浏览器传送内容的类型,web服务器首先传送一些http头信息,然后传送具体内容(即http体信息),http头信息和http体信息之间用一个空行分开。

常用的http头信息有:

① http 1.0 200 ok

这是web服务器应答的第一行,列出服务器正在运行的http版本号和应答代码。代码“200 ok”表示请求完成。

② mime_version:1.0

它指示mime类型的版本。

③ content_type:类型

这个头信息非常重要,它指示http体信息的mime类型。如:content_type:text/html指示传送的数据是html文档。

④ content_length:长度值

它指示http体信息的长度(字节)。

(4) 关闭连接:当应答结束后,web浏览器与web服务器必须断开,以保证其它web浏览器能够与web服务器建立连接。

二、java实现web服务器功能的程序设计

根据上述http协议的作用原理,实现get请求的web服务器程序的方法如下:

(1) 创建serversocket类对象,监听端口8080。这是为了区别于http的标准tcp/ip端口80而取的;

(2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket;

(3) 创建与socket字相关联的输入流instream和输出流outstream;

(4) 从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:get 路径/文件名 http/1.0

(5) 从请求信息中获取请求类型。如果请求类型是get,则从请求信息中获取所访问的html文件名。没有html文件名时,则以index.html作为文件名;

(6) 如果html文件存在,则打开html文件,把http头信息和html文件内容通过socket传回给web浏览器,然后关闭文件。否则发送错误信息给web浏览器;

(7) 关闭与相应web浏览器连接的socket字。

下面的程序是根据上述方法编写的、可实现多线程web服务器,以保证多个客户机能同时与该web服务器连接。

程序1:webserver.java文件

//webserver.javajava编写web服务器

import java.io.*;

import java.net.*;

public class webserver {

public static void main(string args[]) {

int i=1, port=8080;

serversocket server=null;

socket client=null;

try {

server=new serversocket(port);

system.out.println("web server is listening on port "+server.getlocalport());

for (;;) {client=server.accept(); //接受客户机的连接请求

new connectionthread(client,i).start();

i++;

}

} catch (exception e) {system.out.println(e);}

}

}

/* connnectionthread类完成与一个web浏览器的通信 */

class connectionthread extends thread {

socket client; //连接web浏览器的socket

int counter; //计数器

public connectionthread(socket cl,int c) {

client=cl;

counter=c;

}


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons