咨询电话:023-88959644    24小时服务热线:400-023-8809
NEWS CENTER ·
新闻动态
关注中技互联 关注前沿

怎样运用Java来实现Web服务器?

发表日期:2012-04-30    文章编辑:山城阿修    浏览次数:83    标签:重庆网站建设;重庆网页制作

重庆网页制作 提供

  首先,HTTP和谈,真理的效果

       万维网是互联网作为传输系统的序言中,最基本的传输单位的WWW互联网网页。基于WWW的客户端的任务/服务网络读者(客户端)和Web服务(服务),超文本传输​​和谈(HTTP)的设备占模具两者之间的沟通。 HTTP和谈是TCP / IP为基础的和平谈判,和谈上,使用层之间的网络读者和网络服务和谈,是一种常见的形式面向对象的和谈。 HTTP和谈,真理的影响包括四个步伐:

链接:(1)的Web网页服务建立衔接,打开一个虚拟的文件被称为一个socket(套接字),这个文件的建设,标志着寄养成功的衔接。

(2)恳求:网络读者是一个套接字设备的Web服务的恳求。 HTTP的请求一般是GET或者POST敕令(POST表单参数传递)。获取过关敕令:

获取途径/文件名HTTP/1.0的

那次访问文件,文件名的HTTP/1.0指出,网络读者使用的HTTP版本。

(3)款:提交通过HTTP和谈的恳求和发送到网络服务的网络读者。 Web服务收到的事务处理,处理后的HTTP返回网站读者页面恳求的后果,然后显示在网络上的读者。

例如:假设客户端和www.mycompany.com:8080/mydir/index.html建立衔接,它会发送一个GET敕令:GET / mydir的/的index.html HTTP/1.0的。主机名www.mycompany.com 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类型的版本。

(3)CONTENT_TYPE:类型

这个头信息是一个非常重大,这表明MIME类型的信息的HTTP正文。如:“CONTENT_TYPE:text / html的指示数据发送到一个HTML文档。

④CONTENT_LENGTH:长度值

这表明信息的HTTP身体的长度(字节)。

(4)封闭的衔接:网络读者与Web服务的必要处理后断开,以保证其他网站读者可以建立与设备的Web服务的融合。

第二,Java Web服务的设备的功能设计,为了完成

基于上述HTTP和谈真理的效果,得到承认的Web服务方法的顺序如下:

(1)创建ServerSocket类对象,监听端口8080。这是HTTP规范的TCP / IP端口80,以区别于它,并采取;

(2)等待承受收敛到8080端口,与客户端的套接字接口的客户端;

(3)创建一个输入流套接字字河道和输出流outstream之间的关联;

(4)从输入流inStream读取与客户端的插座触点提交恳求线的关系,恳求信息模式:获取途径/文件名HTTP/1.0的

(5)获得恳求恳求信息类型。如果承认类型GET,恳求信息获取访问的HTML文件名。没有HTML文件名作为文件名,地方的index.html;

(6)如果HTML文件,打开该HTML文件,返回的HTTP头和HTML内容的文件后插座读者到Web,然后关闭该文件。 Web或发送错误信息的读者;

(7)封闭和响应Web阅读器接口插座字。

下列顺序准备按照上面的方法可以完成多线程的Web发球局,以保证多个客户端的功能与Web服务的衔接。

1为了:WebServer.java文件
/ / WebServer.java使用设备的Java Web服务
进口java.io. *;
导入java.net。 *;
公共类WebServer的{
公共静态无效的主要(字符串作为参数[]){
I = 1端口= 8080;
ServerSocket的服务器= NULL;
Socket的客户端= NULL;
尝试{
服务器=新的ServerSocket(PORT);
(\ + server.getLocalPort()“Web服务器监听端口\”);
(; ;) {
客户端= server.accept(); / /下的恳求客户端的收敛
新ConnectionThread(客户端)。启动();
I + +;
}
}赶上(例外五){(E);}
}
}

/ * ConnnectionThread类,通信与网络读者完成* /
类ConnectionThread延伸主题{
Socket的客户端/ /收敛的网络读者插座字
INT计数器; / /计数器
公共ConnectionThread(CL插座,诠释三){
客户端= CL;
计数器= C;
}
公共无效的run()/ /线程体
{
尝试{
字符串destIP = client.getInetAddress()。的ToString(); / /客户端的IP地址
destport INT = client.getPort()/ /客户端横幅
(\“连接\”+计数器+ \“:\”+ destIP + \“端口\”destport + \“\”);
PrintStream的outstream =新的PrintStream(client.getOutputStream());
数据输入流河道新的数据输入流(client.getInputStream());
字符串联= instream.readLine(); / /读取由Web读者提出认罪
(\“的收稿日期:\”+内联);
如果(getrequest(联)){/ /如果的GET恳求
字符串的文件名= getfilename(内联);
文件的文件=新的文件(文件名);
(file.exists()){/ /如果文件存在,文件传送到Web阅读器
(文件名+ \“要求\”);
outstream.println(\“HTTP/1.0 200 OK \”);
outstream.println(\“MIME_version:1.0 \”);
outstream.println(\“内容类型:文本/ html \”);
LEN =(INT)file.length的();
outstream.println(CONTENT_LENGTH:\“\”+ LEN);
outstream.println(\“\”);
的sendfile(outstream,文件); / /发送文件
outstream.flush();
{/ /文件不存在
字符串NOTFOUND = \“未找到


错误404文件未找到
\“;
outstream.println(\“的HTTP/1.0 404没有找到\”);
outstream.println(\“内容类型:文本/ html \”);
outstream.println(\“CONTENT_LENGTH:\”+ notfound.length()+ 2);
outstream.println(\“\”);
outstream.println(NOTFOUND);
outstream.flush();
}
}
长M1 = 1;
(M1是1110万美元)<{M1 + +;} / /延时
client.close();
}捕获的(IOException e)条{
system.out.println(\“异常:\”+ E);
}
}

/ *获取恳求型的能力,“GET”* /
布尔getrequest(弦乐){
(s.length()> 0)
{
((0,3)。s.substring equalsIgnoreCase(\“\”)),如果返回true;
}
返回false;
}

/ *要访问的文件名* /
在的字符串getfilename(字符串){
字符串F = s.substring(s.indexOf(\'\')+1);
F = f.substring(0 f.indexOf(\'\'));
尝试{
(f.charAt(0)== \'/ \')
F = f.substring(1);
}捕捉(StringIndexOutOfBoundsException E){
system.out.println(\“异常:\”+ E);
}
如果(f.equals(\“\”))= \“的index.html \”;
返回f;
}

/ *指定的文件发送到Web浏览器* /
无效的sendfile(PrintStream的是出局,档案文件){
尝试{
数据输入流中的新的数据输入流=(新FileInputStream中(文件));
LEN =(INT)file.length的();
字节缓冲区[] =新的字节[LEN];
in.readFully(BUF);
outs.write(BUF,0,LEN);
outs.flush();
in.close();
}赶上(例外五){
system.out.println(\“错误检索文件\”);
system.exit(1);
}
}
}

子类为了ConnectionThread线程,用于解析一个Web读取设备提交的呼吁,并应对信息返回到Web的读者。在中学,getrequest()方法用来检测客户的请求是否在“的GET”getfilename(S)的方法获得的的HTML文件名您要访问客户乞求的信息小号;“的sendfile()指定后套接字文件的内容返回到Web的读者。

上述顺序getrequest()方法和当地的相关修正案,发表恳求处置。

三,操作实例

为了测试的准确性上面的命令,编译WebServer.class,ConnectionThread.class和index.html文件放置在收集统一的目录表(主机:主机NT40SRV:\ \的JWEB表的内容)。

为了2:index.html文件

Java Web服务的设备

这是书面与Java Web服务主页

起首上运行的主机与Java敕令WebServer.class:
C:\ \ jweb> Java的Web服务器

Reader软件,然后运行在客户端输入的WebServer序列属于读者窗口中显示指定的HTML文件中的URL网址:(http://nt40srv:8080/index.html)。

注意,不是默认的一面旗帜默认情况下,如8080,操作主机的正常的Web服务。

不具有收集长度单机安装Windows 95的测试方法的前提是当地的替代URL地址的域名localhost或127.0.0.1,URL地址的访问http://localhost:8080

如没特殊注明,文章均为中技互联原创,转载请注明来自www.zjcoo.com
上一篇:web服务器安全设置配置-超全攻略,超详细~ 下一篇:已经是最后一篇了
相关新闻

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 备11003429号

  • qq客服
  • 公众号
  • 手机版
  • 新浪微博