Web服务器和浏览器的设计与实现

时间:2022-06-25 08:21:26

Web服务器和浏览器的设计与实现

摘要:本课题是Web服务器和浏览器的设计与实现。该文基于C/S架构,按照软件工程基本原理和方法,综合运用UML建模技术、计算机网络技术进行系统设计,并用Java语言和Eclipse开发工具实现该系统。系统分为客户端和服务器端,其中客户端即浏览器,具有获取并显示服务器端的网页、查看源代码以及存储网页等基本功能;服务器端则提供Web服务。浏览器和服务器之间通过请求和响应方式交换网页,网页由报文组成,报文的规则由HTTP协议定义。文中具体阐述了Web服务器和浏览器的技术背景及其详细设计与实现。

关键词:Web服务器;浏览器;C/S架构;Java

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)36-10283-05

随着网络技术的不断发展,信息化进程的加快,准确、快速地获取Internet上提供的资源已成为人们普遍关注的问题。目前比较常用的Web浏览器是微软公司开发的IE,它能方便地查看源文件、清除历史记录、设置安全等级以及设置服务器等。

1.1 研究背景

WWW服务,也称Web服务。它是一种交互式图形界面的Internet服务,具有强大的信息连接功能,它使得用户通过简单的图形界面就可以访问各个大学、组织和公司等的最新信息和各种服务。

1.2 可行性分析

1.2.1 技术可行性

使用Eclipse作为开发的平台,Java作为开发语言。在Java 1.2中,SUN公司推出的新的用户界面库java.swing包,相比较AWT来说,功能更强大,使用更方便。而且java.swing中的类完全是由Java语言编写的[1]。

1.2.2 经济可行性

本系统的开发需要耗费一定的人力和时间,而且在短时间里开发出来的系统可能离具体产生效益还有一定的差距,因为市场上的浏览器已经非常成熟并且功能强大。但是,一些个性化的浏览器,或一些有定制功能的浏览器,仍很具吸引力。因此从长远利益来考虑,本课题的设计开发是具有较大的经济可行性的。

2 技术分析

2.1 Java

Java语言是一个面向对象的语言。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制[1]。本系统使用Java语言开发。

2.2 Eclipse

本系统使用Eclipse作为开发平台。

Eclipse[2]是一种可扩展的开放源代码IDE。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。

2.3 C/S结构

所谓C/S结构,是将数据存取与应用程序分离开来,把一个软件系统或应用系统按功能分成若干个部分,再将这些软件的组成部分按其不同的角色分成Client软件和Server软件,分别放置在客户机和服务器上。

2.4 HTTP协议

HTTP(Hypertext Transfer Protocol,超文本传输协议)是Internet的应用层协议。HTTP通过两个程序实现:一个是客户端程序(一般称为浏览器),另一个是服务器程序(通常称为Web服务器)。两者通常运行在不同的主机上,并通过交换HTTP报文来产生网页请求和响应。

2.5 UML

UML(Unified Modeling Language,统一建模语言)[3]是用来对软件密集系统进行可视化建模的一种语言。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。

3 系统需求分析

本系统分为浏览器和Web服务器两部分,根据UML建模技术将浏览器分为三个用例,即建立连接、获取服务及断开连接;Web服务器也分为三个用例,即允许建立连接、提供服务及允许断开连接。

浏览器用例图如图1所示。Web服务器用例图如图2所示。图1及图2描述了系统总体需求,下面具体介绍各子用例。

3.1 建立连接

功能说明:通过网络连接到一个Web服务器。

基本条件:有正常的网络连接,有可用的Web服务器,HTTP的相关设置正确。

基本过程:a) 输入Web服务器的信息;b) 用户发出建立或连接Web服务器的请求;c) 连接到指定的Web服务器。

替代过程:c) 连接失败,将失败信息返回给用户;d) 提示用户重试。

3.2 获取服务

功能说明:用户获取远端的Web服务器提供的服务。

基本条件:已经连接到Web服务器。

基本过程:a) 用户提交获得服务请求;b) 将请求命令提交给Web服务器;c) 从Web服务器获取服务的内容;d) 将获取的内容显示给用户。

替代过程(一):b) 若没有建立连接,提醒用户先建立连接。

替代过程(二):c) 获取所需的服务失败;d) 提示用户失败信息。

3.3 断开连接

功能说明:离开当前已经连接的Web服务器。

基本条件:有正常的网络连接,已经和一个远端Web服务器建立连接,HTTP的相关设置正确。

基本过程:a) 用户发送断开连接的请求;b) 将用户请求发送到Web服务器;c) 停止从Web服务器获取服务;d) 断开和Web服务器的连接。

替代过程(一):d) 断开连接失败,提示用户失败信息。

替代过程(二):b) 发送请求失败,提示用户重试。

3.4 允许建立连接

功能说明:允许用户连接到当前的Web服务器。

基本条件:有正常的网络连接,Web服务器已经开启服务,HTTP的相关设置正确,远端用户提交连接请求。

基本过程:a) 等待远端用户发出建立连接的请求;b) 获取远端用户发送的连接请求;c) 允许该用户连接到当前的Web服务器。

替代过程(一):b) 若用户信息不符合设置,发送拒绝信息到远端用户;c) 拒绝建立连接。

替代过程(二):c) 若建立连接失败,显示失败信息。

3.5 提供服务

功能说明:向远端用户提供的所请求的服务。

基本条件:已经和远端用户建立连接,远端用户有获取服务的请求。

基本过程:a) 获得远端用户提出的服务请求;b) 解析获取的服务请求的信息;c) 将服务的内容提供给远端用户;d) 等待用户新的请求。

替代过程(一):b) 若无法解析请求的信息,等待新的请求。

替代过程(二):c) 发送服务内容的操作失败;d) 未超过最大重发次数,重新尝试发送,执行c);e) 等待新的请求。

3.6 允许断开连接

功能说明:服务器断开和所请求的用户的连接。

基本条件:有正常的网络连接,收到已经建立连接的远端用户的断开连接的请求,HTTP的相关设置正确。

基本过程:a) 获取远端用户发送的断开连接的请求;b) 终止对该用户提供的服务;c) 断开和该用户建立的连接。

替代过程(一):c) 断开连接失败,重试。

替代过程(二):b) 终止服务失败,等待服务结束;c) 断开和该用户的连接。

4 系统概要设计

从需求分析中,我们可以获取各用例的对象。服务器没有用户界面,作为后台服务进程启动;浏览器具有用户界面,其对象图如图3所示。

图3中表示边界对象,它的作用是作为与外界联系的媒介。所有系统外部对象必须通过边界对象才能联系系统内部对象。

2) 在过程中若出现错误,则将错误显示ex.printStackTrace(System.err)。

5.2.3 浏览器断开连接

浏览器断开连接的实现过程:用Process windowEvent()方法响应WindowEvent事件执行断开连接的操作,并关闭窗体。

首先获取ID,如果getID()==WindowEvent.WINDOW_CLOSING)则System.exit(0),则关闭窗口。

5.2.4 服务器端允许建立连接

服务器端允许建立连接的实现过程:

1) 定义端口号为PORT=8080,ServerSocket server=null;Socket client=null;初始化客户端和服务器端的套接字。服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后可能向请求者返回结果。

2) 定义一个try方法,接受客户机的连接请求,client=server.accept()。

3) catch方法进行异常捕捉,在将错误显示出来System.out.println(e)。

4) 定义一个ConnnectionThread类完成与一个Web浏览器的通信。

5) 连接Web浏览器的套接字,Socket client。并定义一个计数器counter。

5.2.5服务器端提供服务

服务器端提供服务的实现过程:

1) 构造线程体run,用try方法获取客户机IP地址和端口号。

2) inline=instream.readLine(),读取Web浏览器提交的请求信息。

3) 如果是GET请求,filename=getfilename(inline)。

4) 若文件存在,则将文件送给Web浏览器System.out.println(filename+" requested.")。

5) 发送文件,sendfile(outstream, file)。

6) 若文件不存在,outstream.println("HTTP/1.0 404 no found")。

7) instream.close(),outstream.close()关闭输入输出流。

8) 若IOException e发生异常,则用catch方法捕捉异常。

5.2.6 服务器端断开连接

服务器端断开连接的实现过程:调用outs.flush()方法刷新缓冲的输出流,in.close()断开服务器连接。

6 运行流程及说明

6.1 浏览器初始界面

运行浏览器程序后,将会出现初始的界面.

6.1.1 界面说明

地址:输入IP地址。

转向:点击转向地址栏中输入的IP地址,也可以用回车键代替。

另存为:把当前页面保存下来。

后退:退回上一个浏览的页面。

前进:前进到之后的一个浏览页面。

查看源代码:查看当前页面的源代码。

退出:退出浏览器。

6.1.2 创建浏览器界面代码说明

在WebBrowser类中创建浏览器界面和各菜单栏,包括:地址栏、网页显示界面、菜单栏、菜单组、菜单项、工具栏、工具栏中的按钮组件等。部分代码如下:

JButton picSave = new JButton("另存为");

JButton picBack = new JButton("后退");

JButton picForward = new JButton("前进");

JButton picView = new JButton("查看源代码");

JButton picExit = new JButton("退出");

JLabel label=new JLabel("地址");

JButton button=new JButton("转向");

6.2 连接服务器界面

输入IP地址后按回车键就会显示相应的页面,这表明连接成功。

在转向按钮上增加监听器,触发执行相关操作,通过填写输入,输出端口的文本区获取端口号,定义一个public void actionPerformed(ActionEvent e)方法进行事件侦听,分析地址栏内的内容,若e.getSource() == jurl,url=jurl.getText ();获取地址栏的内容。将url的内容添加到ArrayList型对象history中,设置historyIndex的值,重新布局,用catch()方法获取异常捕捉。具体代码如下:

public void actionPerformed(ActionEvent e) {

String url = "";

if (e.getSource() == button){

url=jurl.getText ();

if(url.length ()>0&&url.startsWith ("")){

try { jEditorPane1.setPage (url);

history.add(url);

historyIndex=history.size()-1;

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

JOptionPane.showMessageDialog (WebBrowser.this,"无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE);}}

// 转向按钮相关操作结束

6.3 查看源代码界面

在点击查看源代码按钮后,根据url,获得源代码,生成显示源代码的框架对象,并用public ViewSourceFrame (String htmlSource)方法初始化图形界面,用setBounds方法设置窗口大小,设置setVisible属性为true。

if (e.getSource() == sourceItem ||e.getSource() == picView){

url = jurl.getText ().toString ().trim ();

if(url.length ()>0&&!url.startsWith ("")) {

url=""+url; }

if( !url.equals ("")) {

getHtmlSource (url);

ViewSourceFrame vsframe = new ViewSourceFrame (htmlSource);

vsframe.setBounds (0,0,800,500);

vsframe.setVisible(true); }

else { JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);}}

6.3 保存网页界面

在点击另存为按钮后,根据当前页面,用saveFile()方法将页面信息保存下来。相关代码如下:

if (e.getSource() == picSave||e.getSource() == saveAsItem){

url = jurl.getText ().toString ().trim();

if(url.length ()>0&&!url.startsWith ("")) {

url=""+url; }

if(!url.equals ("")) {

saveFile(url);}

else {

JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);}}

//另存为的代码结束

7 结束语

经过一段时间的设计和开发,Web服务器及浏览器终于完成,其基本功能已实现,浏览器能够访问Web服务器,通过输入正确的URL获取超文本并显示,同时可以查看源代码并保存页面;服务器能够提供Web服务。

但是由于多方面因素的影响,设计完成略显仓促,这也导致该系统还有许多不尽如人意的地方,比如用户界面不够美观,刷新网页、收藏网页等功能未实现,出错处理也考虑不周,这些都有待进一步改善。

要完成好这项工作必须在掌握必备的理论知识前提下,不断实践,积累经验,提高分析问题和解决问题的能力。

参考文献:

[1] 冯博,应群.面向对象的Java网络编程[M].北京:清华大学出版社,2004.

[2] 张大治,应群.精通Eclipse[M].北京:清华大学出版社,2006.

[3] 董兰芳.UML课程设计[M].北京:机械工业出版社,2005.

[4] Tanenbaum A S.计算机网络[M].潘爱民,译.4版.北京:清华大学出版社,2004.

上一篇:浅谈逐帧动画在qq动态头像制作上的应用 下一篇:存储过程自动化测试的实现