基于Java的浏览器的设计与实现.docx
《基于Java的浏览器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Java的浏览器的设计与实现.docx(20页珍藏版)》请在冰豆网上搜索。
![基于Java的浏览器的设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-1/23/34034772-6410-403b-a54b-f475e4709e14/34034772-6410-403b-a54b-f475e4709e141.gif)
基于Java的浏览器的设计与实现
基于Java的浏览器的设计与实现
摘要本课程设计主要运用java语言在Eclipse编程环境下设计一个Web浏览器,从而在Windows98/2000/XP程序运行平台上来实现它的一些基本功能,本课程设计基本实现了预定目标。
浏览器的设计包括了图形界面设计和底层设计,在整个设计过程中需要首先构建好图形界面,然后再编程来实现组件以完成相应的功能,浏览器图形界面作为系统和用户之间反馈信息的平台,起着尤为关键的作用。
1引言
当今世界是一个以计算机网络为核心的信息时代,互联网为人们快速获取、发布和传递信息提供了便捷,而浏览器作为互联网上查找信息的重要工具,给人们提供了巨大而又宝贵了信息财富,受到了大家的高度重视。
网页浏览器是显示网页服务器或档案系统内的文件,并让用户与这些文件互动的一种软件。
它用来显示在万维网或局域网内的文字、影像及其他资讯。
浏览器作为重要的系统应用软件是不可或缺的。
但目前,浏览器产品的市场被少数国外大公司垄断,众多的小型浏览器也尚处于发展期,而国内的自主技术的浏览器更屈指可数,刚刚进入实用阶段。
迫切需要更多的人来关注浏览器技术,开发中国自主知识产权的浏览器产品。
1.1项目设计目的
此次课程设计的目的首先是让我们了解信息产业的多元性,把学到的知识运用到实际中,培养学生的综合模拟和实际操作能力,提高学生理论联系实际的能力,开拓创新;其次是掌握使用Eclipse工具设计一个简单的Web浏览器的方法,从而实现对资源的有效访问;掌握Java语言编程,并可综合运用这些知识解决一定的实际问题,使我们在所学知识的综合运用能力上以及分析问题、解决问题能力上得到一定的提高;认识到团队精神的重要性,能够通过良好的分工合作来完成既定目标。
1.2项目设计内容
(1)熟悉超文本传送协议(HTTP)进行通信;
(2)熟悉Eclipse编程环境及Swing、网络编程方法;
(3)理解B/S工作模式;
(4)实现简单的浏览器程序;
1.3项目设计要求
(1)按要求编写课程设计报告书,能正确阐述设计结果。
(2)通过课程设计培养学生严谨的科学态度、认真的工作作风和团队协作精神。
(3)学会文献检索的基本方法和综合运用文献的能力。
(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。
2所用开发环境
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。
它提供建造块和构造并运行集成软件开发工具的基础。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用于Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
[1]
2.2JDK简介
JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。
自从Java推出以来,JDK已经成为使用最广泛的JavaSDK(Softwaredevelopmentkit)。
JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvironment),Java工具和Java基础的类库(rt.jar)。
不论什么Java应用服务器实质都是内置了某个版本的JDK。
掌握JDK是学好Java的第一步。
最主流的JDK是Sun公司发布的JDK。
JDK包含的基本组件包括:
·javac–编译器,将源程序转成字节码
·jar–打包工具,将相关的类文件打包成一个文件
·javadoc–文档生成器,从源码注释中提取文档
·jdb–debugger,查错工具
·java–运行编译后的java程序(.class后缀的)
appletviewer:
小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Javah:
产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:
Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
Jconsole:
Java进行系统调试和监控的工具
3设计原理
3.1JAVA语言简介
Java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。
Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。
Java主要特性:
Java语言是简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可移植的、解释型的、高性能的、多线程的、动态的。
3.2图形用户界面(GUI)
图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户介面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
如Windows是以图形界面方式操作的,因为你可以用鼠标来点击按钮来进行操作,很直观。
GUI具有下面几个方面的基本要求:
轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。
GUI由桌面、视窗、单一文件界面、多文件界面、标签、菜单、图标、按钮这几部分组成。
[2]
3.3JavaSwing概述
Swing是一个用于开发Java应用程序用户界面的开发工具包,并以此为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
Swing是建立在AWT之上的,包括大多数轻量组件的组件集。
除提供了AWT所缺少的、大量的附加组件外,Swing还提供了替代AWT重量组件的轻量组件。
Swing还包括了一个使人印象深刻的、用于实现包含插入式界面样式等特性的图形用户界面的下层构件。
因此,在不同的平台上,Swing组件都能保持组件的界面样式特性,如双缓冲、调试图形和文本编辑包等。
还具有以下特点:
(1)拥有一个丰富、便捷的用户界面元素集合。
(2)对底层平台依赖的很少,因此与平台相关的bug很少。
(3)给予不同平台的用户一致的感官效果。
3.4抽象窗口工具箱(AWT)
AWT(AbstractWindowingToolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。
抽象窗口工具包(AbstractWindowingToolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。
AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。
AWT可用于Java的applet和applications中。
它支持图形用户界面编程的功能包括:
用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。
3.5布局算法
本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。
布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。
在Swing中有以下几种简单的布局管理器:
(1)FlowLayout流式布局管理器
FlowLayout是最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。
当到达容器边界时,组件将放置在下一行中。
(2)BorderLayout边界布局管理器
BorderLayout为在容器中放置组件提供了一个稍微复杂的布局方案。
BorderLayout把容器分为五个区域:
东、南、西、北和中。
东占据容器的右侧,南占据容器的下侧,以此类推。
(3)GridLayout网格布局管理器
GridLayout将容器分割成许多列和行,组件被填充到每个网格中。
添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他组件,直至占满该行的所有网格,接着继续在下一行中从左到右放置组件。
(4)CardLayout卡片式布局管理器
CardLayout将界面看作一系列的卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。
当某个容器被创建后,就会有一个默认的布局管理器。
Window、Frame和Dialog的默认布局管理器是BorderLayout,Panel和Applet的默认布局管理器是FlowLayout。
可以调用容器的setLayout()方法来设置容器的布局管理器。
[3]
4浏览器的设计
4.1功能需求的分析
我们所设计的浏览器功能比较简单,主要概括为以下几点:
(1)界面:
包括窗口,菜单,输入框,工具条,滚动条等的支持。
(2)实现简单网页的布局,对简单网页的查看。
(3)具有超链接功能。
(4)能够返回到主页面。
(5)支持基本IO(Input/Output,输入/输出)。
(6)能够打开本地文件。
4.2设计步骤
我在整个团队中主要负责界面的设置,界面是一个直接反映信息交互的平台,起着举足轻重的作用,在这里我就怎样构建用户界面作为重点进行阐述。
1.容器嵌套
选择好容器就是为界面构造一个基本的骨架,然后再在其中添加各个组件。
在GUI中可供选择的容器有Frame,Dialog,Applet,Panel,其中Panel是可视容器,Frame是顶级容器。
我们要用Panel和Frame容器。
继承顶级容器的方法、功能和参数,将菜单栏置于顶级容器;在次级容器contentpan中加入了工具栏、状态栏、滚动条、编辑区域等,然后用边界布局管理器将所需的组件添加进来,具体所需组件如下表所示:
表4-1组件复用表
功能
所复用的组件
菜单
复用JMenu组件
菜单项
复用JMenuItem组件
工具栏
复用JPanel组件
按钮
复用JButton组件
地址栏
复用JLabel组件
状态栏
复用JPanel组件
滚动条
复用scrollPane组件
2.组件定义
与其他编程语言类似,在JAVA中也必须首先对变量以及所要用到的组件定义,确定其合法性,才能在后面的程序中被调用赋值。
定义代码如下:
privateContainercontentPane;//变量内容窗格
privateJTextFieldaddressTex;//文本框
privateJLabelstatusLbl;//状态栏
用private分别对滚动条、编辑显示区域、菜单栏、文件选择框、按钮等进行定义。
3.组件初始化、添加和监听
mb=newJMenuBar();//初始化菜单栏
m1=newJMenu("File");//初始化菜单
m2=newJMenu("Edit");
m3=newJMenu("View");
mb.add(m1);//将菜单加入菜单栏
mb.add(m2);
mb.add(m3);
//对File菜单各个菜单项初始化
mi1=newJMenuItem("OpenFile");
mi2=newJMenuItem("Close");
mi3=newJMenuItem("Quit");
Edit、View菜单的各个菜单项进行初始化过程与之类似
//对File菜单各个菜单项进行监听
mi1.addActionListener(newOpenFileActionListener());
mi2.addActionListener(newQuitActionListener());
mi3.addActionListener(newQuitActionListener());
4.设置布局
pp.setBackground(Color.pink);//设置颜色
pp.setLayout(newFlowLayout());//流式布局管理器,对组件由左至右布局
pp.add(btn2);//对按钮UNDO布局
pp.add(addressTex);//对地址栏布局
pp.add(btn1);//对按钮GOTO布局
contentPane.add(pp,BorderLayout.NORTH);//将工具栏放置在界面的北方contentPane.add(statusLbl,BorderLayout.SOUTH);
//状态栏布置在界面的南边
centerPane=newJScrollPane();//浏览器体部布置在界面中央
JViewportview=centerPane.getViewport();//显示区域
textArea=newJEditorPane();//内容显示
5.按钮功能的实现
每个按钮需要对应到相应的功能。
我们设计的浏览器只有UNDO和GOTO两个按钮。
UNDO对应浏览页面的后退浏览,实现这个功能是在监听到用户点击此按钮时后退到上一浏览页面。
而GOTO就是当系统监听到地址栏有地址写入时,浏览器先判断这个地址长度是否大于零并且此地址是不是以HTTP开头,如果是,则浏览器主动链接到目的地址;若判断出这个地址长度大于零并且此地址不是以HTTP开头,则在地址前面自动加上HTTP,找到目的地址。
5浏览器的实现
5.1GOTO按钮功能测试
在程序中地址栏默认网址为“
图5.1点击Goto进入XX主页截图
5.2测试菜单栏选项
在地址栏中输入“
图5.2主菜单File的子菜单实现图
图5.3主菜单Edit的子菜单实现图
图5.4主菜单View的子菜单实现图
点击打开File菜单中的openfile按钮时,则打开本地文件。
如图5.5所示:
图5.5主菜单File中OpenFile的实现
5.3超链接的实现
在XX主页中点击“更多”,可直接链接到下一显示页面,证明浏览器实现了链接功能,再点击“Undo”按钮,页面又可返回到XX主页。
超链接的实现如图5.6所示:
图5.6超链接的实现图
经过以上几个步骤的测试,图形界面的设计能够与底层设计达到完美契合,因此我们团队所设计的浏览器实现了预定功能,基本达到了此次课程设计的要求,浏览器设计成功。
6结束语
这次课程设计历时两个星期,在这两个星期的学习中,我初步掌握了有关JAVA的基础知识,能够理解较为简单的JAVA程序,基本实现课程设计的要求。
我认为这次课程设计最大的收获是深刻地认识到了团队合作的重要性。
在以往的课内学习中,我个人懂得了较多的理论知识,同时也进行了上机实践加强自己对理论的理解并提升了实际操作能力。
而本次课程设计相对于实验又有了质的飞跃,我们通过最初的特色组队、确立团队目标,然后缜密构思、分工合作,最终实现了我们设计的浏览器的基本功能。
这一路做过来,我们多次请教了老师,翻阅了有关参考书,最重要的是进行了团队激烈的讨论,遇到问题再解决问题然后再发现问题再解决的思想火花的碰撞……在这一过程的循环往复中我深深地体验到了思考和学习的乐趣。
在享受这一过程中,我不仅学到了新的知识,我的思维也更加开阔、更加灵活、更加全面了。
短短的几星期中,我有过失败的沮丧,也有过成功的欣喜。
在一次次的挫折和失败中我不断寻找真理,寻找解决问题的最佳途径,更加深刻地体会到了“失败乃成功之母”的含义,惰性和轻易放弃成了我最大的敌人,很庆幸,我战胜了它们,其实是战胜了自己,最终赢得了硕果。
如同需要浇灌才能长成的硕果一样,我的最终成果也是用辛勤汗水培育而来的,当然也离不开老师的耐心指导和同学的无私帮助。
在这里我也要对敬爱的老师和同学们的深切关怀表示衷心的感谢!
对我而言,知识上的收获固然重要,精神上的丰收更加可贵。
面对生活其实也是相同的道理,不抛弃不放弃是成功的前提。
人生是在不断地攀登中提升的,山的绵延组成了曲折的人生,当我们经历过风雨最终爬到顶峰看到美轮美奂的日出时,一切艰难都显得苍白无力。
挫折是一份财富,经历是一份拥有。
感谢大家让我拥有这份最珍贵的财富!
参考文献
[1]2004马俊范玫.JAVA语言面向对象程序设计.机械工业出版社.2009年
[2]于万波.Java语言实用教程.清华大学出版社.2008年
[3]刘亚滨.精通Eclipse.北京:
电子工业出版社.2004
附录1:
Web服务器设计与实现源程序清单
%程序功能:
:
Web服务器设计与实现
%程序作者:
陈璐
%最后修改日期:
2009-07-03
packagecom.briup.browser;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Container;
importjava.awt.FileDialog;
importjava.awt.FlowLayout;
importjava.awt.Frame;
importjava.awt.Panel;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.BufferedInputStream;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.FilenameFilter;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
import.MalformedURLException;
import.URL;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.Iterator;
importjavax.swing.JButton;
importjavax.swing.JEditorPane;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JProgressBar;
importjavax.swing.JScrollPane;
importjavax.swing.JTextField;
importjavax.swing.JTree;
importjavax.swing.JViewport;
importjavax.swing.event.HyperlinkEvent;
importjavax.swing.event.HyperlinkListener;
importjavax.swing.text.html.HTMLDocument;
importjavax.swing.text.html.HTMLFrameHyperlinkEvent;
importjavax.swing.tree.DefaultMutableTreeNode;
importcom.briup.browser.Browser;
publicclassBrowserextendsJFrame{
privateContainercontentPane;
privateJTextFieldaddressTex;//文本框
privateJLabelstatusLbl;
privateJScrollPanecenterPane;//初始化滚动条
privateJEditorPanetextArea;//编辑显示区域
privateJMenuBarmb;
//文件选择框
privateJFileChooserchooser1=newJFileChooser();
privateJButtonbtn1,btn2,btn3;
privateArrayListlist;
pri