




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浏览器的界面处理设计与实现 第26页 共26页课程设计报告 学 院 专 业班 级 学 号学生姓名 指导教师课程成绩 完成日期浏览器的界面处理设计与实现学生姓名: 指导老师: 摘 要 本课程设计详细论述了浏览器的分析、设计及代码实现,最终实现一个具有能同时浏览多个网页,可查询历史浏览记录,可以实现打开和保存网页,超链接监听并响应,打开文件,前进后退刷新,查看源代码等基本功能的浏览器。 本文以一个实际运作的浏览器卧龙浏览器 为主轴介绍浏览器的设计理念与方法,同时讲述浏览器中各个模块如何互相协同运作,来完成一个呈现网页的工作。Java Swing技术是本文介绍的浏览器所使用的一种主要的技术,通过使用各个组件,并增加监听器和事件处理等操作,最终形成一个具有一定事物处理能力的浏览器的界面部分1。 关键词 Java语言;浏览器;HTTP;Eclipse编程环境;Java Swing1 前 言浏览器是指可以显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互的一种软件。网页浏览器主要通过HTTP协议与网页服务器交互并获取网页,这些网页由URL指定,文件格式通常为HTML,并由MIME在HTTP协议中指明。一个网页中可以包括多个文档,每个文档都是分别从服务器获取的。大部分的浏览器本身支持除了HTML之外的广泛的格式,例如JPEG、PNG、GIF等图像格式,并且能够扩展支持众多的插件(plug-ins)。另外,许多浏览器还支持其他的URL类型及其相应的协议,如FTP、Gopher、HTTPS(HTTP协议的加密版本)2。HTTP内容类型和URL协议规范允许网页设计者在网页中嵌入图像、动画、视频、声音、流媒体等。所以本课程设计通过对当下流行的浏览器的模拟设计和实现来让大家对网络及网络资源的认识,以及浏览器的各个功能的实现有一个大概的认识。B/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)3。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。B/S模式的优点和缺点B/S结构的优点(1)具有分布性特点,可以随时随地进行查询、浏览等业务处理。 (2)业务扩展简单方便,通过增加网页即可增加服务器功能。 (3)维护简单方便,只需要改变网页,即可实现所有用户的同步更新。 (4)开发简单,共享性强4。B/S 模式的缺点(1)个性化特点明显降低,无法实现具有个性化的功能要求。 (2)操作是以鼠标为最基本的操作方式,无法满足快速操作的要求。 (3)页面动态刷新,响应速度明显降低。 (4)功能弱化,难以实现传统模式下的特殊功能要求。1.1课程设计的内容(1)熟悉超文本传送协议(HTTP)进行通信;(2)熟悉Eclipse编程环境及Swing、网络编程方法;(3)理解B/S工作模式;(4)实现一个类似于IE的浏览器程序;1.2课程设计的要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。1.3设计平台(1)JDK JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等5。(2)Eclipse Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件和组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统6。2需求分析2.1基本功能需求(1)要求前进和后退都可以进行多种步骤 。(2)要求网页显示时速度要求尽量的快一些。(3)要求能查看所获取网页的源代码。(4)在地址框中输入网址或敲回车键后,显示网页。(5)点击超链接,显示目标页面。(6)点击刷新按钮时,重新显示当前页面。(7)点击后退按钮时,显示上一个页面,并在地址框中显示上一个网页地址。(8)点击前进按钮时,显示下一个页面,并在地址框中显示下一个网页地址。(9)点击打开菜单项,则打开本地文件,在显示框中显示网页,并在地址栏中显示当前网址。(10)用户点击保存菜单项,则将当前显示页面保存到本地磁盘。2.2其他说明统一资源定位符URLURL = http:/ + Host字段 + / + ScriptName字段 + / + PathInfo字段 + Query字段Host字段标识Web服务器和Web服务器应用程序的主机名;ScriptName字段指定Web服务器应用程序;PathInfo字段指出报文在Web服务器应用程序内的目标;Query字段部分包含一组命名的数据7。3总体设计由于浏览器是一个基于GUI界面的平台之上,进行事件的处理,而这个GUI界面又分为不同的模块,所以我在设计时,分成了几块,分别包括BrowserFrame,BrowserJMenuBar,StatusPanel,AddressPanel,SourceDialog等几个不同的块,然后再调用一个BrowserMain结合所有的块。运行出浏览器出来8。3.1不同模块的划分及其功能(1)BrowserFrame:浏览器总体框架,用于架构整个浏览器。(2)BrowserJMenuBar:浏览器工具条,用于创建菜单选项。(3)StatusPanel:状态面板,用于显示控制状态。(4)AddressPanel:地址面板,用于显示地址栏。3.2实现功能的设计在用户界面子系统中,浏览器采用了容器嵌套容器,在不同的容器上添加不同的布局管理器的布局策略,这样就可以在一个拥有简单布局管理器的JFrame上加入其他子容器如:JPanel,将之放入BorderLayout的某个区域,这样就可以在子容器上继续添加组件或容器了。根据这种设计方法可以设计出美观的界面。考虑到Java Swing提供的控件,划分出7类。(1)主菜单:复用JMenu组件。(2)菜单项: 复用JMenuItem组件。(3).显示栏:复用JEditorPane组件。(4)按钮:复用JButton组件。(5)URL标签:复用JLabel组件。(6)URL输入框:复用JTextField组件。(7)状态栏:复用JPanel组件4详细设计4.1详细设计的目的以总体设计为依据,进一步对系统的设计进行细化,并给出主要类的详细规格说明。4.2功能模块的实现(1)BrowserFrame:通过复用Jframe,设计出浏览器的总体框架。(2)BrowserJMenuBar:通过复用JmenuBar,设计出浏览器的菜单选项。(3)StatusPanel:通过复用Jpanel,设计出状态栏。(4)AddressPanel:通过复用Jpanel,设计出地址栏。4.3各功能代码介绍(1)BrowserFrame:public class BrowserFrame extends JFrame /定义了BrowserFrame,他是复用JFrame的。public BrowserFrame() initComponent();/构造初始化函数 以便于是代码结构清晰易懂(2)BrowserJMenuBar/构建文件菜单fileMenu.setMnemonic(KeyEvent.VK_F);fileMenu.add(newWindowMi);/fileMenu.add(newTabMi);fileMenu.addSeparator();fileMenu.add(openFileMi);fileMenu.add(pageSaveAsMi);fileMenu.addSeparator();fileMenu.add(exitMi);/构建编辑菜单editMenu.setMnemonic(KeyEvent.VK_E);editMenu.add(copyMi);editMenu.add(pasteMi);editMenu.add(selectAllMi);editMenu.addSeparator();editMenu.add(fullScreenMi);/构建查看菜单viewMenu.setMnemonic(KeyEvent.VK_V);viewMenu.add(backMi);viewMenu.add(forwardMi);viewMenu.addSeparator();viewMenu.add(reloadMi);viewMenu.addSeparator();viewMenu.add(viewSourceMi);/构建帮助菜单helpMenu.setMnemonic(KeyEvent.VK_H);(3)StatusPanelpublic StatusPanel() setLayout(new BorderLayout();Border border = BorderFactory.createLoweredBevelBorder();statusLb.setBorder(border);tempLb.setBorder(border);add(statusLb, BorderLayout.CENTER);add(tempLb, BorderLayout.EAST);/进行状态的测试(4)AddressPanelprivate JButton backBtn = new JButton(返回);private JButton forwardBtn = new JButton(前进);private JTextField addressTf = new JTextField();private JButton goBtn = new JButton(转到);/简单的地址栏中按钮的初始化定义4.4浏览器界面的实现图4-1 浏览器主界面图4-2 文件菜单图4-3 编辑菜单图4-4 查看菜单图4-5 帮助菜单5测试5.1测试目的依据用户需求,设计测试用例,对软件进行系统级测试。并根据测试结果填写测试表格的测试结果栏。5.2测试环境测试环境:CPU: Inter(R) Celeron(R) CPU 2.10GHz内存:2GB硬盘:320GB操作系统:Windows XP(SP3)使用工具:JDK Eclipse 浏览器首要的任务是浏览网页,所以本次测试的重点是浏览功能与保存功能,在这些测试的基础上再进行其他功能的测试。5.3测试用例表5-1 测试用例表测试用例预期结果实际结果输入网址指定网址看到网站首页看到网站首页,如图5-1所示输入错误网址打不开网页打不开网页,如图5-2所示点击刷新按钮重新显示该页重新显示该页点击后退按钮显示上一网页及相应网址显示上一网页及相应网址点击前进按钮显示下一网页及相应网址显示下一网页及相应网址点击后退按钮多次多个网页及相应网址成功显示多个网页及相应网址成功显示点击前进按钮多次多个网页及相应网址成功显示多个网页及相应网址成功显示打开本地文件显示该文件及相应文件路径显示该文件及相应文件路径,如图5-3所示点击保存菜单项显示保存对话框,成功保存网页显示保存对话框,成功保存网页, 如图5-4所示点击关于菜单项显示浏览器对应的版本对话框显示浏览器对应的版本对话框, 如图5-5所示点击退出菜单项退出浏览器退出浏览器图5-1浏览器进入网址1图5-2浏览器进入网址2图5-3 输入错误网址图5-4 打开本地文件图5-4 保存本地文件图5-5 关于浏览器图5-6 查看源代码6结论通过本次课程设计,我们主要了解JDK和Eclipse的应用,以及运用所学java语言知识,设计出浏览器。把本期学的计算机网络技术有关内容应用到课程设计中,比如说Http协议,超链接功能,还有URL以及DNS等有关内容,进一步巩固复习所学内容,同时,此次课程设计中我们还学习了Java语言,由于它与C,C+有很多相似之处,在学习Java过程中并未显得吃力,并进一步巩固了所学的编程语言,以达到融会贯通的目的。为进一步学习计算机网络,各种编程语言等课程打下坚实的基础。运用学习成果把课堂上学的系统化的理论知识,尝试性的应用于实际设计工作。这有利于检验学习成果,看一看课堂学习与实际工作到底有多大差距,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,更变学习内容提供实践依据。经过两个星期的努力,课程设计终于完成了。设计的过程中,我的收获很大,不仅仅是对我们自己所学的专业知识加深了解,同时还熟练地掌握了Eclipse软件的操作,而且还锻炼了自己独立处理问题的能力。总之我获得很多,也启迪了很多! 本设计在老师的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计和调试,无不凝聚着老师的心血和汗水,在这两个周的学习和设计期间,也始终感受着导师的精心指导和无私的关怀,我受益匪浅。在此向各位辅导老师表示深深的感谢和崇高的敬意。参考文献1 王铁敬Java编程一步到位北京中软电子出版社2002.12 JAVA网络程序精解 孙卫琴编 电子工业出版社.20043 JAVA编程案例精解 孙印杰 刘斌 孙玉强等编 电子工业出版社.20044 张海潘软件工程导论清华大学出版社20035 刘亚滨精通Eclipse电子工业出版社20046 孙卫琴,李洪Tomcat与Java Web开发技术详解电子工业出版社20077 殷兆麟,周智仁等Java网络应用编程高等教育出版社20048 谢希仁计算机网络(第五版)电子工业出版社2008.1附录1:BrowserFrame类package Browser1;import java.awt.BorderLayout;import java.awt.Toolkit;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.IOException;import .URL;import java.util.ArrayList;import java.util.List;import javax.swing.*;import javax.swing.event.HyperlinkEvent;import javax.swing.event.HyperlinkListener;import javax.swing.text.Document;public class BrowserFrame extends JFrame private JMenuBar menuBar = new BrowserJMenuBar(this);AddressPanel addressPan = null;JEditorPane contentPan = new JEditorPane();private StatusPanel statusPan = new StatusPanel();List urlHistory=new ArrayList();int index=-1;public BrowserFrame() initComponent();private void initComponent() addressPan=new AddressPanel(this);JScrollPane scrollPane=new JScrollPane();scrollPane.setBorder (BorderFactory.createLoweredBevelBorder();scrollPane.getViewport().add(contentPan);setJMenuBar(menuBar);add(addressPan, BorderLayout.NORTH);add(scrollPane, BorderLayout.CENTER);add(statusPan, BorderLayout.SOUTH);contentPan.setEditable(false);contentPan.addHyperlinkListener(new HyperlinkListener() public void hyperlinkUpdate(final HyperlinkEvent e) if (e.getEventType() = HyperlinkEvent.EventType.ACTIVATED) SwingUtilities.invokeLater(new Runnable() public void run() Document doc = contentPan.getDocument();try URL url = e.getURL();contentPan.setPage(url);addressPan.setText(url.toString(); catch (IOException io) JOptionPane.showMessageDialog(BrowserFrame.this, Cant follow link,Invalid Input,JOptionPane.ERROR_MESSAGE);contentPan.setDocument(doc);););setTitle(卧龙浏览器);setSize(800, 600);Toolkit tool = Toolkit.getDefaultToolkit();setLocation(tool.getScreenSize().width - this.getSize().width) / 2,(tool.getScreenSize().height - this.getSize().height) / 2);this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent arg0) BrowserFrame.this.setVisible(true);BrowserFrame.this.dispose(););setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);附录2:BrowserJMenuBar类package Browser1;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import .URL;import javax.swing.JDialog;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.text.Document;public class BrowserJMenuBar extends JMenuBar implements ActionListener/文件菜单private JMenu fileMenu=new JMenu(文件);private JMenuItem newWindowMi=new JMenuItem(打开新窗口, KeyEvent.VK_N);/private JMenuItem newTabMi=new JMenuItem(New Tab, KeyEvent.VK_T);private JMenuItem openFileMi=new JMenuItem(打开文件, KeyEvent.VK_O);private JMenuItem pageSaveAsMi=new JMenuItem(另存为, KeyEvent.VK_S);private JMenuItem exitMi=new JMenuItem(退出, KeyEvent.VK_E);/编辑菜单private JMenu editMenu=new JMenu(编辑);private JMenuItem copyMi=new JMenuItem(复制, KeyEvent.VK_C);private JMenuItem pasteMi=new JMenuItem(粘贴, KeyEvent.VK_P);private JMenuItem selectAllMi=new JMenuItem(全选, KeyEvent.VK_S);private JMenuItem fullScreenMi=new JMenuItem(全屏, KeyEvent.VK_F);/查看菜单private JMenu viewMenu=new JMenu(查看);private JMenuItem backMi=new JMenuItem(返回, KeyEvent.VK_B);private JMenuItem forwardMi=new JMenuItem(前进, KeyEvent.VK_F);private JMenuItem reloadMi=new JMenuItem(刷新, KeyEvent.VK_R);private JMenuItem viewSourceMi=new JMenuItem(查看源代码, KeyEvent.VK_V);/帮助菜单private JMenu helpMenu=new JMenu(帮助);private JMenuItem aboutMi=new JMenuItem(关于, KeyEvent.VK_A);private BrowserFrame frame=null;public BrowserJMenuBar(BrowserFrame frame) this.frame=frame;initComponent();private void initComponent() /构建文件菜单fileMenu.setMnemonic(KeyEvent.VK_F);fileMenu.add(newWindowMi);/fileMenu.add(newTabMi);fileMenu.addSeparator();fileMenu.add(openFileMi);fileMenu.add(pageSaveAsMi);fileMenu.addSeparator();fileMenu.add(exitMi);/构建编辑菜单editMenu.setMnemonic(KeyEvent.VK_E);editMenu.add(copyMi);editMenu.add(pasteMi);editMenu.add(selectAllMi);editMenu.addSeparator();editMenu.add(fullScreenMi);/构建查看菜单viewMenu.setMnemonic(KeyEvent.VK_V);viewMenu.add(backMi);viewMenu.add(forwardMi);viewMenu.addSeparator();viewMenu.add(reloadMi);viewMenu.addSeparator();viewMenu.add(viewSourceMi);/构建帮助菜单helpMenu.setMnemonic(KeyEvent.VK_H);helpMenu.add(aboutMi);add(fileMenu);add(editMenu);add(viewMenu);add(helpMenu);JMenuItem miArray=new JMenuItemnewWindowMi,openFileMi,pageSaveAsMi,exitMi,copyMi,pasteMi,selectAllMi,fullScreenMi,backMi,forwardMi,reloadMi,viewSourceMi,aboutMi;for(int i=0;imiArray.length;i+)miArrayi.addActionListener(this);public void actionPerformed(ActionEvent arg0) Object source=arg0.getSource();if(source=newWindowMi) new BrowserFrame();else if(source=openFileMi) JFileChooser fileChooser = new JFileChooser();fileChooser.setMultiSelectionEnabled(false);fileChooser.showOpenDialog(frame);File file = fileChooser.getSelectedFile();if (file = null) return;tryString path=file.getCanonicalPath();path=file:/+path;frame.addressPan.newURL(path);frame.addressPan.setText(path);catch(Exception e)else if(source=pageSaveAsMi) URL srcFile=frame.contentPan.getPage();if(srcFile=null) JOptionPane.showMessageDialog(frame, No file to save.);return;JFileChooser fileChooser = new JFileChooser();fileChooser.setMultiSelectionEnabled(false);fileChooser.showSaveDialog(frame);File file = fileChooser.getSelectedFile();if (file = null) return;BufferedOutputStream out=null;BufferedInputStream in=null;tryout=new BufferedOutputStream(new FileOutputStream(file);in=new BufferedInputStream(srcFile.openStream();byte buffer=new byte1024*8;int i=-1;wh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 直播电商2025年主播与品牌合作模式创新策略与风险防控
- 2025-2030年全球新能源产业海外投资案例分析报告
- 机关工会活动策划方案范文
- 熊皮人阅读测试题及答案
- 教育测评考试试题及答案
- 南通会议考试试题及答案
- 2025年电商知识产权保护与知识产权保护法律风险评价报告
- DB65T 4498-2022 高压气地下储气井定期检验规则
- DB65T 4415-2021 机采棉田土壤封闭除草技术规范
- 唱歌 爸爸妈妈听我说说课稿-2025-2026学年小学音乐西师大版三年级下册-西师大版
- 地块管护安全管理制度
- T/CCOA 52-2023富硒小麦粉
- 2025年护士执业资格考试题库(社区护理学专项)护理法律法规知识试题卷
- 老人就餐免责协议书
- 班组长安全管理职责
- 应聘家教兼职简历
- 慢阻肺的健康教育讲座
- 光伏电站安全风险辨识及风险库管理制度
- 铁路机车防火安全教育
- 企业内训师培养与培训课程设计
- 网架防腐刷漆施工方案
评论
0/150
提交评论