http, 演示客户与服务器套接字。 http只支持GET操作及硬编码的MIME类型的一小部分(MIME类型是多媒体内容的类型描述符)。代理HTTP服务器是单线程的,该线程中每一个请求依次被处理,其他请求等待。http作为一个代理服务器时,它还拷贝每一个它获取的文件到本地缓存中。对于本地缓存,它没有用于刷新和无用单元回收的策略。
 
  HTTP服务器是通过5个类和一个接口实现的。更完善的实现方案可能在主类http外分裂很多方法,以使组成结构更抽象。
 
  MimeHeader.java
 
  MIME是通过电子邮件系统传达多媒体内容的一个Internet标准。HTTP协议运用并扩展了MIME标头的概念,在HTTP客户和服务器之间传输常规的属性/值对。 P410
 
该类是Hashtable的一个子类,能方便的存储和检索与MIME标头有关的关键字/值对。
parse方法用来获取一个原始MIME格式的字符串,并使它的关键字/值对进入一个给定的MimeHeader实例。它用StringTokenizer把输入数据分解成独立的有CRLF(\r\n)序列标记的行。
 
class MimeHeader extends Hashtable{
void parse(String data) {
StringTokenizer st = new StringTokenizer(data,"\r\n");
while(st.hasMoreTokens()){
String s = st.nextToken();
int colon = s.indexOf(':');
String key = s.substring(0,colon);
String val = s.substring(colon + 2);
put (key,val);
}} }
 
  HTTPResponse.java
 
  HTTPResponse类是所有与HTTP服务器应答有关的事物的包装程序。它被http类的代理部分使用。当你向一个HTTP服务器发送一个请求时,它以一个存储在statusCode中的整数形式的代码以及一个存储在reasonPhrase中的文本应答(这些变量名在正式的HTTP规范中规定)。这个单行的响应后面跟随着一个包含进一步应答信息的MIME头。我们用MimeHeader对象来解析这个字符串。
 
  UrlCacheEntry.java
 
  为在服务器上保存文档的内容,必须在用于找回文档的URL和文档自身描述之间建立联系。一个文档由它的MimeHeader和原始数据描述。例如一副图像可以被一个Content-Type:image/gif样式的MimeHeader描述,而原始图像数据就是一个字节数组。
  UrlCacheEntry对象的构造函数需要用URL作为关键字以及一个与之相关的MimeHeader。如果MimeHeader内部有一个名为Content-Length成员,数据区域被预先分配足够大的空间来保存它的内容。
 
  append() 用来给UrlCacheEntry对象增添数据的。它不是一个简单的setData()方法,原因是数据可能流经网络且需要在一定时间被存储成块。append方法处理三种情形:1.数据缓冲区根本没有分配; 2.数据缓冲区对于引入的数据来说太小,所以它被重新分配; 3.引入的数据正好可以插入缓冲区。 在任何时候,length成员变量保存数据缓冲区当前的有效大小值。

最新文章

  1. 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
  2. ajax配合一般处理程序(.ashx)登录的一般写法
  3. 磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点
  4. Log4cplus使用
  5. RDIFramework.NET ━ 9.2 员工管理 ━ Web部分
  6. 内置对象(Session、Application、ViewState)
  7. ural 1106,二分图染色,DFS
  8. Mac 如何截屏(快捷键)
  9. 维护没有源代码,float改成double
  10. myhuiban会议,期刊,科研人员,计算机类会议大全
  11. WCF - REST服务
  12. POJ 2799 IP Networks
  13. vijos1010题解
  14. CDNI - RFC7336翻译
  15. [解决]CXF wsdl2java 生成代码存在的一些问题
  16. C语言 提取double的每一位
  17. Python对list列表及子列表进行排序
  18. wx小程序自定义组件与页面之间参数传递
  19. sqlserver中为节约存储空间的收缩数据库机制
  20. achartengine刷新数据

热门文章

  1. 【转】Android使用Log4j例子
  2. 越狱Season 1-Episode 9: Tweener
  3. android向web提交参数的4种方式总结,附带网站案例源码
  4. Python使用MySQL数据库的方法以及一个实例
  5. HTTPS(SSL)详解以及PHP调用方法
  6. ABBYY FineReader 12最新官方版下载
  7. Spring3.1新属性管理API:PropertySource、Environment、Profile
  8. Web Pages razor 学习
  9. CSS 使用小结
  10. C#接口作用的深入理解