如有非阻塞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时 , 对请求正文中的数据加以分析处理。

云步云72.5元/月起云服务器,香港安畅/葵湾/将军澳/沙田/大浦CN2机房,2核2G5M

云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...

Gcore(gcorelabs)俄罗斯海参崴VPS简单测试

有一段时间没有分享Gcore(gcorelabs)的信息了,这是一家成立于2011年的国外主机商,总部位于卢森堡,主要提供VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日本、韩国、新加坡、荷兰、中国(香港)等多个国家和地区的十几个机房,商家针对不同系列的产品分为不同管理系统,比如VPS(Hosting)、Cloud等都是独立的用户中心体系,部落分享的主要是商家的Hosting(Virtu...

Boomer.Host(年付3.5美)休斯敦便宜VPS

Boomer.Host是一家比较新的国外主机商,虽然LEB自述 we’re now more than 2 year old,商家提供虚拟主机和VPS,其中VPS主机基于OpenVZ架构,数据中心为美国得克萨斯州休斯敦。目前,商家在LET发了两款特别促销套餐,年付最低3.5美元起,特别提醒:低价低配,且必须年付,请务必自行斟酌确定需求再入手。下面列出几款促销套餐的配置信息。CPU:1core内存:...

http://www.taobao.com/为你推荐
哈利波特罗恩升级当爸哈利波特2为啥赫敏只抱哈利波特不抱罗恩。只是握手!!!这……摩根币摩根币是什么意思?梦之队官网梦之队是什么呢?是那个国家的呢?他们又是参加那个项目的呢?得了几块金牌呢?关键字关键词标签里写多少个关键词为最好百度关键词价格查询百度关键词排名价格是多少冯媛甑冯媛甄 康熙来了丑福晋历史上真正的八福晋是什么样子的?百度关键词工具如何通过百度官方工具提升关键词排名www.yahoo.com.hk香港的常用网站haole16.com高手们帮我看看我的新网站WWW.16mngt.com怎么不被收录啊?
vps动态ip 免费顶级域名 万网域名证书查询 美国主机排名 512au vip购优惠 网站在线扫描 美国独立日 阿里云手机官网 godaddy空间 阿里云邮箱申请 apnic 乐视会员免费领取 镇江高防服务器 九零网络 windows2008 alexa世界排名 cloudflare 卡巴斯基免费下载 压力测试工具 更多