如有非阻塞HTTP

http://www.taobao.com/  时间:2021-03-06  阅读:()

实验报告

( 实验二: 非阻塞HTTP服务器 )课程名称: 网络课程设计II

姓 名:

学 院:

专 业:

年 级: 大三年级

学 号:

指导教师:

职 称:

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

年 11月 15 日

一、 实验目的和要求

理解进程和线程的概念;

1.掌握使用j av a.n i o包中的类创立非阻塞模式的服务器的方法,并能给出实现代码;

2.掌握HTTP协议的处理原理和代码实现过程。

二、实验内容

1. 分析说明 :

( 1 )分析课本5. 2节创立的非阻塞的HTTP服务器中主要包含了哪些主要的类?这些类的功能是什么?

1 .HttpServer :服务器主程序, 负责启动服务器;

2.AcceptHandler : 负责接收客户端连接;

3.ReuqestHandler : 负责接收客户端的HTTP请求,解析,生成HTTP响应, 再返回给客户端;

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

4.Request :抽象化HTTP请求;

5.Response :抽象化HTTP响应;

6.Content :表示HTTP响应的正文;

( 2 )分析课本例5-2 , 并逐行进行注释, 说明其意义。public class HttpServer {private Selector selector = null ; //声明一个Selector成员变量private ServerSocketChannel serverSocketChannel = null;//声明一个ServerSocketChannel成员变量private int port = 8062; //设置端口号为8062private Charset charset = Charset.forName("UTF-8") ; //设置字符集为UT F-8public HttpServer() throws IOException{ //HttpServer类唯一构造器selector = Selector.open() ;//注册一个selector对象serverSocketChannel = ServerSocketChannel.open() ;//

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

创立一个serverSocketChannel对象serverSocketChannel. socket() . setReuseAddress(true) ;//设置为能够顺利在重启后绑定端口serverSocketChannel. configureBlocking(false) ;//设置为非阻塞模式serverSocketChannel. socket() .bind(new

InetSocketAddress(port)) ;//把服务器与一个本地端口进行绑定

System.out.println("server is running!") ;

}public void service() throws IOException{

//注册连接就绪事件serverSocketChannel.register(selector,

SelectionKey.OP_ACCEPT,new AcceptHandler() ) ;

//死循环保持监听for(; ;) {int n= selector. select() ;//取得监听到的事件的数量

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。if(n==0) continue; //若无事件发生,则进入下一次循环

Set readyKeys = selector. selectedKeys() ; //将事件存入Set集合中

Iterator it = readyKeys. iterator() ; //获取Set集合的迭代器while(it.hasNext()) {

SelectionKey key = null ;try{key = (SelectionKey) it.next() ; //使用迭代器将事件存入句柄对象it.remove() ; //将取出的对象从集合中移除final Handler handler = (Handler)key.attachment() ; //将与key关联的附件传给handlerhandl er.handle(key) ; //在Handler中处理事件

}catch(IOException e) {//若捕获IO异常做如下

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

处理e.printStackTrace() ;//打印异常信息try{if(key!=null) {//判断key是否为空key.cancel() ;//使这个key失效//使得Selector不在监控这个SelectionKey感兴趣的事件key. channel() .close() ;

}

}catch(Exception ex) {//若捕获异常ex.printStackTrace() ;//打印异常信息}

}

}

}

}

}

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

2. 实例操作:

对课本5. 2节中的代码进行扩展,完成课本5. 3节中扩展方法

( 1 ) ~ ( 4 ) 。

解答:

(1).首先再Request的属性中加入参数这一项:

经过对URI字符串的多次分割处理, 将键值对存入参数中

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

结果:

(2).由于我们已经将参数这一项以HashMap对象的形式加入到了Request类中, 获取函数getParameter()实现如下:

(3)创立一个Servlet接口 , service方法负责生成动态网页。

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

(4)要支持POST方法,就要能获得请求正文中的数据, 因此要首先重新编写Reuquest 中删除请求正文的方法,在action =Request.Action.POST时 , 对请求正文中的数据加以分析处理。

ShockHosting($4.99/月),东京机房 可享受五折优惠,下单赠送10美金

ShockHosting商家在前面文章中有介绍过几次。ShockHosting商家成立于2013年的美国主机商,目前主要提供虚拟主机、VPS主机、独立服务器和域名注册等综合IDC业务,现有美国洛杉矶、新泽西、芝加哥、达拉斯、荷兰阿姆斯特丹、英国和澳大利亚悉尼七大数据中心。这次有新增日本东京机房。而且同时有推出5折优惠促销,而且即刻使用支付宝下单的话还可获赠10美金的账户信用额度,折扣相比之前的常规...

日本CN2、香港CTG(150元/月) E5 2650 16G内存 20M CN2带宽 1T硬盘

提速啦简单介绍下提速啦 是成立于2012年的IDC老兵 长期以来是很多入门级IDC用户的必选商家 便宜 稳定 廉价 是你创业分销的不二之选,目前市场上很多的商家都是从提速啦拿货然后去分销的。提速啦最新物理机活动 爆炸便宜的香港CN2物理服务器 和 日本CN2物理服务器香港CTG E5 2650 16G内存 20M CN2带宽 1T硬盘 150元/月日本CN2 E5 2650 16G内存 20M C...

杭州王小玉网-美国CERA 2核8G内存19.9元/月,香港,日本E3/16G/20M CN2带宽150元/月,美国宿主机1500元,国内宿主机1200元

官方网站:点击访问王小玉网络官网活动方案:买美国云服务器就选MF.0220.CN 实力 强 强 强!!!杭州王小玉网络 旗下 魔方资源池 “我亏本你引流活动 ” mf.0220.CNCPU型号内存硬盘美国CERA机房 E5 2696v2 2核心8G30G总硬盘1个独立IP19.9元/月 续费同价mf.0220.CN 购买湖北100G防御 E5 2690v2 4核心4G...

http://www.taobao.com/为你推荐
咏春大师被ko练了十几年的 “ 咏春高手”~~被练一年空手道的轻易打败,难道如今的国术就像国足,不堪一击~~西部妈妈网我爸妈在云南做非法集资了,钱肯定交了很多,我不恨她们。他们叫我明天去看,让我用心的看,,说是什么...陈嘉垣陈嘉桓是谁?冯媛甑冯媛甄多大啊?月神谭求男变女类的变身小说www.yahoo.com.hk香港有什么有名的娱乐门户网站吗?sss17.com为什么GAO17.COM网站打不开了haokandianyingwang谁有好看电影网站啊、要无毒播放速度快的、在线等www.hhh258comwww.tx88d.com 有这个网站吗?bbs2.99nets.com这个"风情东南亚"网站有78kg.cn做网址又用bbs.风情东南亚.cn那么多此一举啊!
com域名价格 duniu hostmonster gomezpeer 美国仿牌空间 debian源 e蜗 数字域名 admit的用法 域名转接 域名和空间 傲盾官网 昆明蜗牛家 Updog 万网主机管理 海外空间 免费asp空间申请 tracker服务器 server2008 easypanel 更多