资源描述:
《java_socket服务器给浏览器发信息(1)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JavaSocket现实简单的HTTP服务一个简单的用JavaSocket编写的HTTP服务器应用,演示了请求和应答的协议通信内容以及给客户端返回HTML文本和二进制数据文件(一个图片),同时展示了404,200等状态码. 首先运行这个程序,然后打开Web浏览器,键入http://localhost,则这个程序能够显示出浏览器发送了那些信息并且向浏览器返回一个网页和一副图片,并测试同浏览器对话. 当浏览器看到HTML中带有图片地址时,则会发出第二次连接来请求图片等资源. 这个例子可以帮您理解Java的HTTP服务器软件是基于J2SE的Socket等软件
2、编写的概念,并熟悉HTTP协议. 相反的用Telnet连接到已有的服务器则可以帮忙理解浏览器的运行过程和服务器端的返回内容. 当用户在Web浏览器地址栏中输入一个带有http://前缀的URL并按下Enter后,或者在Web页面中某个以http://开头的超链接上单击鼠标,HTTP事务处理的第一个阶段--建立连接阶段就开始了.HTTP的默认端口是80. 随着连接的建立,HTTP就进入了客户向服务器发送请求的阶段.客户向服务器发送的请求是一个有特定格式的ASCII消息,其语法规则为: 3、> {:} {EntityBody} 请求消息的顶端是请求行,用于指定方法,URL和HTTP协议的版本,请求行的最后是回车换行.方法GET,POST,HEAD,PUT,DELETE等. 在请求行之后是若干个报头(Header)行.每个报头行都是由一个报头和一个取值构成的二元对,报头和取值之间以":"分隔;报头行的最后是回车换行.常见的报头有Accept(指定MIME媒体类型),Accept_Charset(响应消息的编码方式),Accept_Encoding(响应消息的字符集),User_Age
4、nt(用户的浏览器信息)等. 在请求消息的报头行之后是一个回车换行,表明请求消息的报头部分结束.在这个之后是请求消息的消息实体(EntityBody).具体的例子参看httpRequest.txt. Web服务器在收到客户请求并作出处理之后,要向客户发送应答消息.与请求消息一样,应答消息的语法规则为: [] {:} {EntityBody} 应答消息的第一行为状态行,其中包括了HTTP版本号,状态码和对状态码进行
5、简短解释的消息;状态行的最后是回车换行.状态码由3位数字组成,有5类: 参看:HTTP应答码及其意义 1XX保留 2XX表示成功 3XX表示URL已经被移走 4XX表示客户错误 5XX表示服务器错误 例如:415,表示不支持改媒体类型;503,表示服务器不能访问.最常见的是200,表示成功.常见的报头有:Last_Modified(最后修改时间),Content_Type(消息内容的MIME类型),Content_Length(内容长度)等. 在报头行之后也是一个回车换行,用以表示应答消息的报头部分的结束,以及应答消息实体的开
6、始. 下面是一个应答消息的例子: HTTP/1.0200OK Date:Moday,07-Apr-9721:13:02GMT Server:NCSA/1.1 MIME_Version:1.0 Content_Type:text/html Last_Modified:ThuDec509:28:011996 Coentent_Length:3107
在用Java语言实现HTTP服务器时,首先启动一个java.net.ServerSocket在提供服务的端口上监听连接.向客户返回文
7、本时,可以用PrintWriter,但是如果返回二进制数据,则必须使用OutputStream.write(byte[])方法,返回的应答消息字符串可以使用String.getBytes()方法转换为字节数组返回,或者使用PrintStream的print()方法写入文本,用write(byte[])方法写入二进制数据. 源程序来自http://blog.csdn.net/myeclipse_java,本程序是在原有基础上进行了一些调整,源程序在POST请求时会阻塞,本程序解决了此问题,另外,本程序在原有的基础上增加了文件上传与下载模拟功能: Java代码
8、import java.io.File; impo