首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
[Java 源程序:一个简单的Web服务器] /************************************************************/ /* WebServer.java* / /******
[Java 源程序:一个简单的Web服务器] /************************************************************/ /* WebServer.java* / /******
admin
2005-03-15
77
问题
[Java 源程序:一个简单的Web服务器]
/************************************************************/
/* WebServer.java* /
/************************************************************/
package objclass;
import java.net. * ;
import java.io. * ;
public class WebServer {
public static final int PORT=8080; //Web 服务器侦听的端口号
public static final String WEB_ROOT=
System.getProperty(“user。dir”)+File.separator+“webroot”;
//WEB_ROOT 变量存放Web服务器工作目录,该目录存放HTML、GIF图片等静态文件资源
private static final String SHUTDOWN_COMMAND=“/shutdown”;
//SHUTDOWN_COMMAND变量保存关闭服务器的命令
private boolean shutdown=falset //是否收到关闭服务器命令的标志
public static void main(String[] args) {
WebServer server=new WebServer();
server.await();
}
public void await(){
Serversocbet serverSocket=null
try{
serversocket=new (1) ; //创建侦听端口号为PORT的Serversocket类型的对象
System.out.println(“WebServer Started!”);
}cateh(10Exceptione){
e.printStackTrace();
System.exit(1);
}
while(! shutdown) { //循环等待客户端连接
Socket socket=null
InputStream input=null;
OutputStream output=null;
try{
socket= (2) ; //创建来自客户端的连接套接宇
input=SOCket. (3) , //创建输入流
output=SOCket. (4) //创建输出流
Request request=new Request(input); //创建Request对象
request. (5) ; //解析客户端HTTP请求
Responseresponse=new Response(output); //创建Response对象
response.setRequest(request); //将Request对象传递给Response对象
response (6) ; //给客户端发送所请求的静态资源
(7) , //关闭连接套接字
shutdown=request. (8) .equals(SHUTDOWN_COMMAND);
//判断当前HTTP请求中的URI是否是关闭服务器命令
}
}
}
}
/************************************************************/
/ * Request.java */
/************************************************************/
package objclass;
import java.io.InputStream;
import java.io.IOException;
public class Request {
private InputStream input;
private String uri;
public Request(InputStream input) { this.input=input;}
public void parse() {... parseUri();...} //解析客户端HTTP请求消息
private String parseUri(String requestString) {... } //解析客户端HTTP请求中的URI
public String getUri() {return uri;}
}
/************************************************************/
/ * Response.java */
/************************************************************/
package objclass;
import java.io. * ;
public class Response {
private static final int BUFFER_SIZE=1024;
Request request;
OutputStream output;
OutputStream output;
public Response(OutputStream output) {this.output=output;}
public void setRequest(Request request) {this.requdst=request;}
public void sendStaticResouree() throws IOException{... } //向客户端发送所请求的表态源
}
[运行测试]
在本机运行WebServer程序,然后打开n浏览器。
(1)在IE地址栏中,输入请求“/index.html"页面的命令: (9) ;
(2)在IE地址栏中,输入关闭Web服务器的命令: (10) 。
选项
答案
(1)ServerSocket(PORT) 或 ServerSocket(PORT, 1, InetAddress. getByName("127. 0.0.1")) (2) serverSocket. accept() (3) getlnputStream() (4) getOutputStream() (5) parse() (6) sendStaticResource() (7) socket. close() (8) getUri() (9) http://localhost:8080/index. html 或 http.//127.0.0.1:8080/index.html (10) http://localhost:8080/shutdown 或 http://127.0.0.1: 8080/shutdown
解析
本题考查考生对Socket通信的基本模型和Java的基本调用方法的了解。下面介绍基于Socket的客户/服务器通信模式的基本模型。
在TCP/IP网络应用中,通信的2个进程间相互作用的主要模式是客户/服务器模式 (Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于2点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。
客户/服务器模式在操作过程中采取的是主动请求方式。首先服务器方启动,并根据请求提供相应服务;
(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上(端口,如FTP为 21)接收客户请求;
(2)等待客户请求到达该端口;
(3)接收到重复服务请求,处理该请求并发送应答信号,接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork和exec)。新进程处理此客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路并终止;
(4)返回第2步,等待另一客户请求;
(5)关闭服务器。
客户方的启动过程如下:
(1)打开一通信通道,并连接到服务器所在主机的特定端口:
(2)向服务器发服务请求报文,等待并接收应答,继续提出请求;
(3)请求结束后关闭通信通道并终止。
从上面所描述过程可知:
(1)客户与服务器进程的作用是非对称的,因此编码不同;
(2)服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。
值得注意的是,该题没有给出完整的Java服务程序代码,考查考生对Socket通信的基本过程的理解,要求熟悉Socket传送数据的基本方法。程序给出对Response和 Request对象的定义和2个对象的方法定义,但是方法的具体的功能一定要注意看语句后面的注释,要填空的地方的信息也来自于后面注释的信息。Java程序是区分大小写的,所以一定要弄清楚什么地方指的是类,什么地方是类的实例。因为类和类的实例的拼写通常就是只有大小写的区别。
(1)空很明显,要求创建一个侦听端口为PORT的ServerSocket类型的对象,那么只要调用ServerSocket类的构造函数就可以了,具体的参数可以参照ServerSocket类的成员函数表中的格式调用。因此,(1)空应填ServerSocket(PORT)。
(2)空的作用从注释中可知,是要创建来自客户端的连接套接字,从ServerSocket类的成员函数表中可知,其函数accept()的作用是返回建立连接的Socket类型的对象。因此,(2)空应填serverSocket.accept()。
(3)空是创建输入流,从Socket类的主要成员函数表中可知getlnputStream()是返回当前对象关联的输入流。因此,(3)空应填getlnputStream()。
(4)空是创建输出流,从Socket类的主要成员函数表中可知getOutputStream()是返回当前对象关联的输出流。因此,(4)空应填getOutputStream()。
(5)空是解析客户端HTTP请求,在resopnse对象的成员函数表中可以知道 parse()的作用就是解析客户HTTP请求消息。因此,(5)空应填parse()。
(6)空是解析客户端发送所请求的静态资源,在resopnse对象的成员函数表中可以找到对应的成员函数sendStaticResource()。因此,(6)空应填sendStaticResource()。
(7)空关闭套接字,可以直接调用socket类的close()方法。因此,(7)空应填 socket.close()。
(8)空要注意其作用是要获取HTTP中的URI的信息从而决定是否关闭服务器,在 Request对象的定义中可以发现有3个跟URl相关的成员函数,但是只有parseUri (string requestString)可以解析出其中的URI,但是该函数要求有一个输入的参数,所以必须要找出如何获得这个参数。在题目所给出的信息中,只有Request对象的另一个成员函数getUri()可以返回string类型的URI。因此,(8)空应填parseUri(getUri())。
(9)空的要点在于必须了解服务器在本地运行的基本路径和端口。在题目最开始给出的请求消息示例信息中,可以看到这么一句,即host:localhost:8080,所以该服务器使用的不是标准端口,而是8080号。同样,在服务器主程序中定义的常量PORT也可以看出来。在下一个常量的定义WEB_ROOT=System.getProperty(“user.dir”)+File.separator+”webroot”中,不要被webroot迷惑,因为Web服务器本身会使用WEB_ ROOT作为根目录,至于根目录指向哪个文件夹只要在定义里面指定好就可以了,不要在 HTTP请求中再加上一个路径。因此,(9)空应填http;//localhost:8080/index.html。
(10)空可依照此类推可知答案为http://localhost:8080/shutdown。
转载请注明原文地址:https://kaotiyun.com/show/JUPZ777K
本试题收录于:
网络工程师下午应用技术考试题库软考中级分类
0
网络工程师下午应用技术考试
软考中级
相关试题推荐
(2012年下半年)Simple公司承接了Perfct市数字城管工程建设项目,委派小刘负责该项目的质量保证工作。在项目的执行过程中,由于数字城管建设涉及到该市的很多职能部门,互相之间的协调和沟通费时、费力,且在不同单位之间存在需求方面的不一致,导
(2011年下半年)M公司是一个仅有二十几名技术人员的小型信息系统集成公司,运营三年来承担过不同规模的二十多个系统集成项目,积累了一定的项目经验。由于公司尚处于成长期,有些工作尚未规范,某些项目存在质量问题。公司管理层决定采取措施,加强质量管理
(2009年上半年)Simple系统集成公司在2007年6月通过招投标得到了某市滨海新区电子政务一期工程项目,该项目由小李负责,一期工程的任务包括政府网站以及政务网网络系统的建设,工期为6个月。因滨海新区政务网的网络系统架构复杂,为了赶工期项目组
(2013年上半年)项目经理在为某项目制定进度计划时绘制了如下所示的前导图。图中活动E和活动B之间为结束-结束关系,即活动E结束后活动B才能结束,其他活动之间的关系为结束-开始关系,即前一个活动结束,后一个活动才能开始。针对问题2所
(2011年下半年)某系统集成项目的建设方要求必须按合同规定的期限交付系统,承建方项目经理李某决定严格执行项目进度管理,以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后,李某得到一张包含了活动先后关系
(2010年下半年)某信息系统集成公司(承建方)成功中标当地政府某部门(建设方)办公场所的一信息系统软件升级改造项目。项目自2月初开始,工期1年。承建方项目经理制定了相应的进度计划,将项目工期分为四个阶段:需求分析阶段计划8月底结束;
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某大型央企A公司计划开展云数据中心建设项目,并将公司主要业务应用逐步迁移到云平台上。由于项目金额巨大,A公司决定委托当地某知名招标代理机构,通过公开招标方式选择系统集
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某大型央企A公司计划开展云数据中心建设项目,并将公司主要业务应用逐步迁移到云平台上。由于项目金额巨大,A公司决定委托当地某知名招标代理机构,通过公开招标方式选择系统集
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某大型央企A公司计划开展云数据中心建设项目,并将公司主要业务应用逐步迁移到云平台上。由于项目金额巨大,A公司决定委托当地某知名招标代理机构,通过公开招标方式选择系统集
根据防火墙的部署拓扑结构,防火墙可把网络划分为几个不同的区域,一般把对外提供网络服务的设备(如WWW服务器、FTP服务器)放置于()区域。
随机试题
某设备的原始价值为171500元,每年低劣化增加值为7000元,在不考虑残值的情况下该设备的最佳更新年限为()年。
A.伤后彻底清创、改善局部循环B.控制和解除痉挛、预防窒息C.使用破伤风抗毒素中和游离毒素D.给予大剂量青霉素,抑制破伤风杆菌治疗破伤风的关键措施是
A.四环三萜皂苷B.五环三萜皂苷C.甾体皂苷D.强心苷E.氰苷人参皂苷Rb1属于()。
下列情况中,当事人或案外人可以提出异议的有:
某建造于大城市市区的28层公寓,采用钢筋混凝土剪力墙结构体系。平面为矩形,共6个开间,横向剪力墙间距为8.lm,其中间剪力墙的计算简图如下图所示。混凝土强度等级采用C30,纵向钢筋采用HRB335钢,箍筋采用HPB235钢。as=a′s=35mm。
下列有关期权的叙述错误的是( )。
马克思主义的发展观是()的辩证统一。
下列关于饮食与健康的说法,错误的是:
一直到20世纪90年代中期,我们都在试图重新寻找自己的精神家园,钱穆、钱钟书和陈寅恪的著作和传记成了畅销书。《顾准文集》《顾准日记》________于市场,这个中国“市场经济第一人”,坚持学术自由的孤独者形象,________了人们对于知识分子的期许。《傅
"Junkscience"ishowElliotMorley,Britain’sministerresponsibleforgeneticallymodifiedfarming,describesstudiesthatcla
最新回复
(
0
)