jsp36物流配货系统(ssh)-qkp_第1页
jsp36物流配货系统(ssh)-qkp_第2页
jsp36物流配货系统(ssh)-qkp_第3页
jsp36物流配货系统(ssh)-qkp_第4页
jsp36物流配货系统(ssh)-qkp_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物流管理系统登陆网站物流管理系统登陆网站管理员信息查询车辆信息管理管理货物信息管理用户管理公告信息发布公告信息车辆信息各类信息查询货物信息用户信息游客查询信息2.5本章小结本章主要介绍了系统的核心模块的业务流程,并给出相应的业务流程图做以说明。并且分别从经济可行性、技术可行性和运行可行性对物流管理系统的可行性进行了分析。同时,对其可行性进行了分析,主要从经济、技术和运行三方面进行的分析。分析结果是该系统技术成熟,设计合理。

第3章需求分析需求分析的主要任务是确定系统必须完成哪些工作内容,在用户的参与下提出目标系统的完整、清晰、准确、具体的实际要求,软件应完成的具体功能和性能。通过对软件的需求分析,为软件开发提供了一种可以抽象数据设计、软件结构设计和过程详细设计的具体软件元素的表示。3.1系统功能划分物流行业的人工管理早已不能适应企业发展的要求,利用计算机网络对企业运营流程进行全方位的管理迫在眉睫。通过计算机网络对企业进行管理,不仅能为企业的运营过程节省大量的人力、物力、财力、时间,提高企业的效率,还可以帮助企业在客户群中树立一个全新的信箱,为企业日后的发展奠定良好的基础。该物流信息管理系统其使用者有企业内部物流管理人员和普通用户,共分为以下几个部分,用户信息管理、货物信息管理、车辆信息管理、公告信息管理、物流信息模块、后台管理模块。3.2系统功能描述1.用户信息管理模块该子系统功能主要包括管理登录用户的基本信息。2.货物信息管理模块该子系统功能是整个物流管理系统的核心,主要是实现查询、修改或删除货物信息。3.车辆信息管理子系统该子系统功能主要包括查询、修改或删除车辆信息。4.公告信息管理子系统该子系统功能主要包括公告信息的查询、添加、修改及删除4个部分。5.物流信息模块该模块为了方便用户查看最新的物流信息。6.后台管理模块实现管理员方式进入后台,进行各个方便的修改,增加操作。更进一步的方便的网站管理。对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。Eclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任意的一个模块进行单独的扩展和升级。3.3本章小结本章简要地说明了该系统的需求分析。并且从开发环境等多方面得出结论,本系统无论在技术上的、经济上还是在运行上都是可行的,因此本系统具有一定的开发前景。

第4章总体设计4.1系统物理结构设计系统结构的设计是否合理决定了整个系统设计的合理性,正因为如此,合理的系统结构就成为在对系统进行整体设计之前首要考虑的对象。对于典型的数据库管理系统,尤其是像物流信息官系统这样数据流量较大的网络管理系统,必修要满足使用方便。操作灵活等设计需求。物流管理系统的系统目标如下:1.网站整体结构和操作流程合理顺畅,实现人性化设计。2.向客户全面展示公司各项业务。3.让客户了解公司公告信息。4.为会员提供货运单信息查看功能。5.为管理员提供后台登录入口。6.通过后台,管理员可以对运单信息进行全面管理。7.通过后台,管理员可以对公司公告信息进行全面管理。8.通过后台,管理员可以对公司各项业务信息进行全面管理。9.通过后台,管理员可以对会员信息进行全面管理。10.系统运行稳定,安全可靠。基于以上因素,为便于开发和用户的使用决定采用了B/S三层体系结构,同时由于物流管理系统需要对物流的信息进行集中管理与统一处理,而且采用了以Web数据库技术为核心的动态网页技术来实现,因此采用B/S的三层结构,它的Web的平台无关性,使得网站的系统结构可以任意扩展,同时也具有很强的开放性和信息系统集成性,也更方便提供灵活的信息交流和信息发布服务。4.2系统功能模块设计整个系统大体由六个关键模块组成,分别为用户模块、车辆信息模块、货物信息模块、公告信息模块、物流信息。1.用户模块详细设计用户信息管理模块是管理本系统的用户信息,包括用户登录信息和注册功能,确保了系统的安全性。功能图如下图4-2所示用户信息用户信息用户前台注册用户前台登录图4-2用户信息功能图2.货物信息管理模块详细设计该模块是本系统的核心模块,由四个子模块组成,它们是添加货物信息模块、修改货物信息模块、删除货物信息模块、查询货物信息模块。本模块具有四项功能:(1)添加货物信息(2)修改货物信息(3)删除货物信息(4)查询货物信息货物信息管理功能模块图如下图4-3所示货物信息管理货物信息管理货物信息查询货物信息修改货物信息添加货物信息删除图4-3货物信息管理功能图3.车辆管理模块详细设计该模块由四个子模块组成,这四个子模块分别是:车辆信息查询子模块、车辆信息修改子模块、车辆信息添加子模块和车辆信息删除子模块。物流管理系统功能模块图如下图4-4所示。车辆信息管理车辆信息管理车辆信息查询车辆信息修改车辆信息添加车辆信息删除图4-4车辆信息管理功能模块图4.公告信息管理模块详细设计该模块实现对公告维护和管理,其中包括:公告信息的查询,公告信息的添加,公告信息的删除,公告信息的修改。公告信息管理功能图如下图4-5所示图4-5公告信息管理功能模块图5.物流信息管理模块详细设计该模块实现对物流信息维护和管理,物流信息管理功能图如下图4-6所示图4-6物流信息管理功能模块图4.4数据库设计数据库设计是对保存网站数据的数据库结构进行设计,主要是设计出数据表的结构,包括数据表中各字段的数据类型以及字段类型的长度等。合理的设计出数据库的结构对整个网站的开发具有非常重要的作用。4.4.1数据库的E-R图根据以上对系统所做的需求分析和系统设计,规划本系统中使用的数据库实体分别为会员实体、公告信息实体、车辆信息实体、货物信息实体、管理员信息实体及物流信息实体。下面分别介绍几个关键实体的E-R图。1.货物信息管理E-R图,货物信息由6个主要属性,分别为货物编号、货物名称、运输类型、货物单位、货物数量、货物类型,如下图4-7所示。货物编号货物编号运输类型货物单位货物数量货物名称货物类型货物信息图4-7货物信息E-R图2.车辆信息管理E-R图,车辆信息由6个主要属性,分别是车牌号码、车辆类型、驾驶员姓名、车辆载重、车牌品名、使用时间。如下图4-8所示。车牌号码车牌号码车牌品名驾驶员姓名车辆载重使用时间车辆类型车辆信息图4-8车辆信息E-R图3.用户信息管理E-R图,用户有9个属性,分别为性别、电子邮箱、密码、找回密码提示问题、找回密码提示问题、注册时间、联系电话、会员编号、账号。如下图4-9所示。性别性别会员编号联系电话电子邮箱找回密码提示问题找回密码提示答案注册时间帐号密码用户图4-9用户信息E-R图4.公告信息管理E-R图,公告信息有5个属性,分别为公告内容、公告标题、公告发布时间、公告编号、公告发布人,如下图4-10所示。公告内容公告内容公告标题公告编号公告发布人公告发布时间公告信息图4-10公告信息E-R图4.4.2数据库表设计本项目的数据库命名为:db_WuLiu,db_WuLiu数据库中有6张表如下。物流信息表存放了物流的相关信息,包括物流编号,标题,内容,表中各个字段的说明如下表4-1所示。表4-1tb_WuLiuxx(物流信息表)序号字段名是否为主键类型长度(字符)1ID√int2Titlevarchar503NeiRongvarchar5004Authorvarchar505IssueDatedatetime货物信息表存放了货物的相关信息,包括货物编号,货物类型,货物名称等相关信息,表中各个字段的说明如下表4-2所示。表4-2TB_HUOWUXX(货物信息表)序号字段名是否为主键类型长度(字符)1ID√int2GoodsStylevarchar503GoodsNamevarchar1004GoodsNumbervarchar505GoodsUnitvarchar506StartProvincevarchar1007StartCityvarchar208EndProvincevarchar309EndCityvarchar3010Stylevarchar5011TransportTimevarchar5012Phonevarchar5013Linkvarchar20014IssueDatevarchar5015Remarkvarchar10016Requestvarchar5017UserNamevarchar50会员表存放了注册成为会员的相关信息,包括会员编号,用户名,密码,电子邮件性别等相关信息,表中各个字段的说明如下表4-3所示。表4-3TB_HUIYUANXX(会员表)序号字段名是否为主键类型长度(字符)1ID√int2Namevarchar203Passwordvarchar164Emailvarchar305Sexvarchar106Phonevarchar507Questionvarchar50续表4-38Resultvarchar509IssueDatevarchar50管理员表存放了后台管理员的相关信息,包括管理员编号,姓名,密码,电子邮件相关信息,表中各个字段的说明如下表4-4所示。表4-4TB_GUANLIYUAN(管理员表)序号字段名是否为主键类型长度(字符)1ID√int2Namevarchar503Passwordvarchar504Phonevarchar505Emailvarchar50公告信息表存放了公告的相关信息,包括编号,标题,内容,作者相关信息,表中各个字段的说明如下表4-5所示。表4-5TB_GONGGAO(公告信息表)序号字段名是否为主键类型长度(字符)1ID√int2Titlevarchar503Neirongvarchar2004Authorvarchar205IssueDatedatetime车辆信息表存放了车辆的相关信息,包括编号,车号等相关信息,表中各个字段的说明如下表4-6所示。表4-6tb_CarMessage(车辆信息表)序号字段名是否为主键类型长度(字符)1Code√int2TradeMarknvarchar203Brandnvarchar504Stylenvarchar305CarLoadnvarchar10续表4-66UsedTimevarchar507DriverNamenvarchar308DriverTimevarchar509LicenceNumbernvarchar5010LicenceStylenvarchar2011TranspotStylenvarchar2012LinkMannvarchar2013LinkPhonenvarchar5014Remarknvarchar10015IssueDatedatetime16UserNamevarchar204.5数据库的完整性和安全性1.数据库的完整性数据库的完整性是指数据的正确性和相容性。数据库管理系统(DBMS)用一定的机制来检查数据库中的数据是否满足规定的条件——完整性约束条件,数据的约束条件是语义的体现,将作为模式的一部分存入数据库中。本系统中定义了表与表之间的联系有助于实现完整性规则,一般在程序中实现具体的完整性控制。2.数据库的安全性数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。在数据库系统中,大量的数据集中存放,而且为许多用户直接共享,是宝贵的信息资源,系统的安全保护措施就显得更为重要,它保护数据库防止恶意的破坏和非法的存取[12]。本系统包括数据库的安全和服务器的安全。采用管理员表示和鉴定的方法实现数据库的安全,此安全管理措施并不在前台开发工具中实现,而是在后台数据库中实现。在登录数据库时,系统让管理员户表示自己的身份,不同的管理员权限不同,系统进行核实,鉴别此管理员是否为合法用户,若是,系统进一步核实用户,通常要求用户输入口令,系统和对用户口令以鉴别用户身份。服务器的安全也是通过用户在登录服务器时输入合法的用户名和密码来实现的。这是一种简单可行的方法,实现起来比较方便。没有采用更加复杂的系统安全管理措施是因为本管理系统一般是应用在企业内部网中,采用安全管理措施主要是为了防止没有修改权限的用户无意间修改了数据,因此采用用户标识和鉴定的安全管理措施就能够保障数据库的安全性4.6本章小结本章的主要内容是介绍了物流管理网站总体设计思路,首先分别对系统的物理结构和逻辑结构进行说明。然后又说明了系统功能模块的设计以及数据库的完整性与安全性,使用户对网站有更深入的了解。

第5章详细设计5.1系统结构的设计与实现本物流信息网分为前台和后台。其中,根据物流信息前台的特点,可以将其分为用户登陆、物流信息、货物信息、车辆信息、公告信息5个部分。物流信息网后台的特点,可以将其分为管理物流信息、管理公告信息、管理货物信息、管理车辆信息、管理会员信息5个部分。5.2系统功能的设计与实现5.2.1用户登陆页面的实现用户登录模块具有用户登录功能。用户在左侧“用户登录”区域中的用户名和密码文本框中输入用户名和密码,单机登录按钮,系统验证成功后,用户将以会员的身份进入物流信息网首页,之后再网站中进行相关操作。用户注册模块可以进行新用户的注册。系统登录界面设计和用户登录成功如下图5-1所示。图5-1用户登录界面和登录成功图5-2用户注册界面5.2.2货物信息管理界面的实现在本系统中,单击导航区中的“货物信息”,将进入货物信息查询页面,查询当前全部货物信息。如图5-3所示。在该页面登陆后的会员可以发布最新的货物信息,货物信息发布如下图5-4所示。图5-3货物信息查询界面实现货物信息查询执行语句<ahref="<%=request.getContextPath()%>/qiantai/hwxx?method=query">跳转至HuoWuXXServlet中执行查询query(request,response)方法具体方法如下: privatevoidquery(HttpServletRequestrequest,HttpServletResponseresponse)throwsClassNotFoundException,SQLException,ServletException,IOException{ Listlist=service.query(); request.setAttribute("list",list); request.getRequestDispatcher("/qiantai/houwuxx/list.jsp").forward(request,response);}图5-4货物信息发布界面实现货物信息的添加执行语句<ahref="<%=request.getContextPath()%>/qiantai/hwxx?method=add">跳转至HuoWuXXServlet中执行add(request,response)转至发布货物页面,方法具体方法如下:privatevoidadd(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ request.getRequestDispatcher("/qiantai/houwuxx/add.jsp").forward(request,response);}货物信息发布后执行的添加保存方法如下: privatevoidsaveadd(HttpServletRequestrequest,HttpServletResponseresponse)throwsClassNotFoundException,SQLException,IOException{ DateFormatformat1=newSimpleDateFormat("yyyy-MM-dd"); DateFormatformat2=newSimpleDateFormat("yyyy/MM/dd/HH:mm:ss"); Datedate=null; Stringstr=null; date=newDate(); str=format1.format(date); str=format2.format(date); Stringhwlx=request.getParameter("hwlx"); Stringhwmc=request.getParameter("hwmc"); Stringhwsl=request.getParameter("hwsl"); Stringsldw=request.getParameter("sldw"); Stringqssf=request.getParameter("qssf"); Stringqscs=request.getParameter("qscs"); Stringddsf=request.getParameter("ddsf"); Stringddcs=request.getParameter("ddcs"); Stringyslx=request.getParameter("yslx"); Stringyssj=request.getParameter("yssj"); Stringlxdh=request.getParameter("lxdh"); Stringlxr=request.getParameter("lxr"); Stringbz=request.getParameter("bz"); Stringclyq=request.getParameter("clyq"); Hwxxhwxx=newHwxx(); hwxx.setGoodsstyle(hwlx); hwxx.setGoodsname(hwmc); hwxx.setGoodsnumber(hwsl); hwxx.setGoodsunit(sldw); hwxx.setStartprovince(qssf); hwxx.setStartcity(qscs); hwxx.setEndprovince(ddsf); hwxx.setEndcity(ddcs); hwxx.setStyle(yslx); hwxx.setTransporttime(yssj); hwxx.setPhone(lxdh); hwxx.setLink(lxr); hwxx.setIssuedate(str); hwxx.setRemark(bz); hwxx.setReques(clyq); hwxx.setUsername("312"); service.saveadd(hwxx); response.sendRedirect(request.getContextPath()+"/qiantai/hwxx?method=query"); }5.2.3车辆信息管理界面的实现在本系统中,单击导航区中的“车辆信息”超链接,将进入车辆信息查询页面,显示所有车辆的信息,如图5-5所示。图5-5车辆信息查询界面实现车辆信息的查询语句<ahref="<%=request.getContextPath()%>/qiantai/clxx?method=query">跳转至CheLiangXXServlet中执行query(request,response)方法,具体方法如下: privatevoidquery(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException,ClassNotFoundException,SQLException{ Listlist=service.query(""); request.setAttribute("list",list); request.getRequestDispatcher("/qiantai/cheliangxx/list.jsp").forward(request,response); }车辆信息添加的实现过程,在车辆信息查询页面中,如果会员想发布车辆信息,可单击发布信息超链接,进入车辆信息添加页面如图5-6所示。图5-6车辆信息添加界面实现车辆信息的添加执行语句<ahref="<%=request.getContextPath()%>/qiantai/clxx?method=add">跳转至CheLiangXXServlet中执行add(request,response)转至发布车辆信息页面,方法具体方法如下: privatevoidadd(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ request.getRequestDispatcher("/qiantai/cheliangxx/add.jsp").forward(request,response); }当用户添加完车辆信息时,执行saveadd(request,response)方法保存,方法如下。 privatevoidsaveadd(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ClassNotFoundException,SQLException{ DateFormatformat1=newSimpleDateFormat("yyyy-MM-dd"); DateFormatformat2=newSimpleDateFormat("yyyy/MM/dd/HH:mm:ss"); Datedate=null; Stringstr=null; date=newDate(); str=format1.format(date); str=format2.format(date); Stringcphm=request.getParameter("cphm"); Stringcllx=request.getParameter("cllx"); Stringclpm=request.getParameter("clpm"); Stringclxl=request.getParameter("clxl"); Stringysynx=request.getParameter("ysynx"); Stringyslx=request.getParameter("yslx"); Stringjsyxm=request.getParameter("jsyxm"); Stringjszhm=request.getParameter("jszhm"); Stringjsyjl=request.getParameter("jsyjl"); Stringjslx=request.getParameter("jslx"); Stringlxdh=request.getParameter("lxdh"); Stringlxr=request.getParameter("lxr"); Stringbz=request.getParameter("bz"); clxxcl=newclxx(); cl.setTrademark(cphm); cl.setStyle(cllx); cl.setBrand(clpm); cl.setCarload(clxl); cl.setUsedtime(ysynx); cl.setTranspotstyle(yslx); cl.setDrivername(jsyxm); cl.setLicencenumber(jszhm); cl.setDrivertime(jsyjl); cl.setLicencestyle(jslx); cl.setLinkphone(lxdh); cl.setLinkman(lxr); cl.setRemark(bz); cl.setIssuedate(str); service.saveadd(cl); response.sendRedirect(request.getContextPath()+"/qiantai/clxx?method=query"); }5.3本章小结本章的内容主要是通过图文并茂的形式描述了本网站的主要结构,同时也对其用途和设计做了详细介绍。通过本章的介绍,可以对本系统的设计有一个全面的了解。

结论经过三个多月的设计和开发,物流系统基本开发完毕,其功能已经基本实现,基本满足了企业和用户的要求,实现了用户信息管理、货物信息管理和车辆信息管理等功能,目标是使物流系统在管理上做到数据的信息化、科学化和网络化。本系统主要包括用户信息管理、货物信息管理、车辆信息管理管理、公告信息管理等模块。本系统基本实现了物流公司人员所要求的功能,方便了物流管理人员对物流信息的管理和掌握。因为学习能力和条件的限制,目前本系统还不是太完善,功能还不是很强大,系统功能趋于简单,而且系统中对数据的添加、删除和修改都没有图形快捷键操作,而且整个系统的界面显得过于单调,缺乏动态图形显示效果。针对以上分析,对物流管理系统作如下改进:1.应该将系统功能集现代运输、仓存、配送、搬运、包装、产品流通及信息管理于一体,实现商品从原料供应商、制造商、分销商、零售商到消费者的各个环节有机结合的系统才是真正意义上的物流管理系统。2.加强系统图形显示功能。如果能结合其它界面美化工具,界面就能更加人性化。

致谢首先,要特别感谢的是我的指导老师,从论文的选题,搜集资料到论文撰写及修改都倾注了导师大量的心血。老师的耐心点拨和细致知道让我不断增强克服困难的信心,最终完成了这篇论文。他严谨的治学态度使我受益匪浅。借此论文完成之际,谨向辛勤指导过我的导师致以最衷心的感谢。另外,我要对院领导表达深深的谢意,四年的大学生活以最后的毕业设计收尾,然而我所得到的并非只是这些,毕业设计见证了我学习的能力与成果,然而更多的点点滴滴都渗透于平时,感谢这四年来院领导为我们所创造的优美学习和生活环境。在毕业设计以及平日的学习过程中,图书馆一直是我增长学识的源泉,给予我不可估量的精神财富,这笔精神财富让我在面对社会各种各样的竞争和压力时增添了许多信心,同时也让我深切体验到学习的快乐,在此,我代表所有的2015届即将毕业的同学对学校的领导们道声:“谢谢您们!”。感谢我们班的同学,在学习和生活上,是他们给了我莫大的帮助和无微不至的关怀和照顾。感谢我的家人,他们是我身后坚强的后盾,无论什么困境,家,都是一个安全的避风港。最后感谢所有关心、支持和帮助过我的人们。

参考文献1王湘云.物流发展史.物流时代杂志,2005:21-322姜龙.物流对市场的影响.物流资讯杂志,2004:22-443SimonBrown,SamDalton,DanJepp著.JSP编程指南.白雁等译.第三版.北京:电子工业出版社,2004,(7):18-224明日科技.JSP项目开发案例全程实录.清华大学出版社:2011:366-4075赫立波.基于项目驱动的JSP程序设计教学研究.科技信息,2010:50-756聂广来,张宏军,郝文宁.基于J2EEWeb应用的框架设计与实现.电子工程师,2005,(3):88-907李华,吴六爱.JSP网页中JDBC数据动态查询的强化方法.兰州交通大学学报,2004,21(01):24-288罗在文.JSP技术访问SQLServer数据库的设计与实现.长春理工大学学报(自然科学版),2010,52(03):145-1489李昭原,罗哓沛.数据库技术新进展.清华大学出版社,2004,5:117-12410耿祥义.JAVA大学实用教程.电子工业出版社,2010,3:312-34111铁军.Web数据库技术.清华大学出版社,2004,12:201-22212黄晓韩,赵俊卓.JSP环境下的SQL注入防范.网络与信息,2010,29(08):5613程志艳,张亮,马建红.JSP实用简明教程.清华大学出版社,2009,12:347-39114孙卫琴,李洪成.精通Java与Tomcat基于JavaWeb的应用开发详解.电子工业出版社,2004.5:18-2715Anderson,A.Effectiva.JavaSecondEdition.OxfordUniversityPress,2005:124-145

附录1客户/服务器系统客户机/服务器系统的主要思想是,你有一个中央信息库通常是保存在数据库中的一些信息要根据需要,把它们分配给某些人或机器。客户机/服务器系统的关键在于,信息库会集中管理信息,因此信息的修改能够传播到用户那里。信息库,分发信息的软件,以及存储信息的软件的机器合起来称为服务器。存储在远程机器上的软件会同这个服务器通讯,提取信息,处理信息,并且在过程机器上显示结果。这被除数称为客户。这么看来,客户/服务器计算机的基本概念没那么复杂。但是,当你试图用孤零零的一个服务器来为很多客户服务的时候,问题就来了。这个架构通常都会牵扯到数据库管理系统,所以为了优化应用,设计人员会去“平衡”数据的格式。此外,通常系统还允许客户往服务器里插入新的数据。这就意味着你必须保证一个客户的新数据不会和另一个客户的新数据搅在一起,以及数据不会在添加的过程中遗失(这被称为事务处理)。当客户端的程序修改之后,还必须重新编译,调试并且安装到客户机上,这要比你想像的复杂昂贵得多。而且如果要支持多种机器或操作系统的话,事情会更麻烦。最后还有一个最重要的性能问题:服务器可能会同时响应成百上千个客户,所以再小的耽搁都是很要命的。为了把延时降到最低,程序员们尽量减轻服务的负载,通常会把这些处理任务挪到客户端,不过有时也会移到所谓的中间件的服务器上。(中间件也被用来增进系统的可维护性。)分发数据这个简单的思想竟然会引出这么些复杂层次,而所有这些问题看起来都像是根本不可能解开的谜。但还有更重要的:大约有一半的开发项目都是基于客户/服务器架构的。它们包括像接收订单,信用卡交易额以及分发各种各样的数据股票市场的,科研的,政府部门的,只要你能叫的上名字的。以前我们的作法是为每个问题设计不同的解决方案,每次都发明一种新方法。这种项目开发起来难,用户用起来也不方便,它们必须适应新的界面。客户/服务器架构这个问题必须要能在总体上解决。把Web当作巨型的服务器Web实际上就是一个巨型的客户/服务器系统。实际上还差一点,因为所有的服务器和客户机是共存在同一个网络上的。不过这点你并不知道,因为你只关心是不是能连到那台服务器,并且对它进行操作(尽管你可能得先在什么地方找到那台服务器)。最初这只是个关向过程。你向服务器提请求,它交给你一个文件,然后你用本地机上的浏览器(也就是客户)来解释这个文件并且为它重新排版。但没过多久,人们就不满足于仅仅从服务器收发文件了。他们需要完整的客户/服务器功能,所以客户也能向服务器发送信息了,比如查询服务器端的数据库,向服务器添加新的信息,或者下单(这项任务所要求的安全性比系统原先能提供的要高得多)。这些就是我们在Web的发展历程中亲眼目睹的变化。Web浏览器是一项巨大的进步:它的思想是要让同样的信息以通常的形式显示在所有的机器上。然而浏览器还是太原始了一些,而且也很快被加在它身上的任务给拖垮了。它的互动性不好,而且所有需要编程解决的任务都要交到服务器上去处理,所以经常会把服务器和Internet给堵了。有时可能会花几秒钟,甚至是几分钟,才会发现提交的请求里面有一个拼写错误。由于浏览器只是用来显示,不能承担哪怕是最简单的计算任务。(另一方面这样也很安全,因为它不会在你的本地机上执行可能包含bug或病毒程序。)为了解决这个问题,人们用了很多办法。开始是升级图形超标准,让浏览器能显示效果更佳的动画和视频。但是有些问题,只能通过让客户端的浏览器运行程序来解决了。这被称为客户端编程。客户端编程Web最初的服务器——浏览器设计提供了互动内容,但是这种互动性是完全建立在服务器之上的。服务器为客户端提供静态页面,而浏览器只是简单的解释页面,然后显示出来。HTML包括了基本的数据采集功能:输入框,复选框,单选按钮,列表,下拉式列表,以及只能用于清除表单或是把表单数据“提交”给服务器的按扭。提交上来的数据会交给Web服务器上的通用网关接口程序。这些文本会告诉CGI该做些什么。最常见的就是在服务器上运行一个程序,这个程序一般会放在“cgi-bin”目录中。(如果按完Web页面上的按扭之后,你仔细观察浏览器顶部的地址条的话,有时你就会在那些不知所云的东西中看到“cgi-bin”。)大多数语言都可以写这些程序。Perl是最常用的,因为它设计的目的就是为了处理和解释文本,所以不论服务器用的是那种处理器,或是那种操作系统,都能安装Perl。但Python由于其功能强大简单易用,已经对Perl的霸主地位发起了挑战。很多大型网站都是完全建立在CGI之上的,而且实际上你能用CGI来做几乎任何事情。但是建立在CGI之上的网站会很快变得过于复杂而难以维护,此处还有一个相应时间的问题。CGI程序的相应时间取决于它要发送多少数据,以及服务器端各Internet的负载(而且CGI程序本身就启动很慢)。最初设计Web的人没能预料到带宽会消耗在这类应用程序中。举例来说,动态图形实际上是不可能一致地运行的,所以服务器会把所有版本的GIF文件都传到客户端。而且,毫无疑问你肯定做过像填写表格这种简单的事。当你按了发送按钮之后,数据会被送回到服务器,然后服务器启动CGI程序,但是发现有个错误,于是重新生成一个HTML告诉你出来错,再把这个页面传给你;然后你再重头来一遍。这样做不但慢,而且蠢。解决方案就是客户端编程。绝大多数运行Web浏览器的机器都有强大的引擎,能作很多工作,而且在原告静态的HTML方法下,大多数时间,它们都是在傻等着服务器发送下一个页面。客户端编程意味着Web浏览器能物尽其用,结果是用户能更快同时也更互动地体验你的网站。客户端编程所遇到的问题同通用编程的没有什么本质性的区别。参数几乎是相同的,只是平台有写差异;浏览器就是一个小型的操作系统。最后,你还得写程序,还要解决一串让人眼花缭乱的问题,还是提供客户端编程的解决方案。本节的余下部分会简要介绍客户端编程的问题与方法。插件在客户端编程方面最重要的步骤之一就是开发插件。这是程序员就为浏览器提供新功能的办法。它要求用户从网上下载插件程序,然后把它集成到浏览器里。插件告诉浏览器“从今往后,你可以进行这些新的工作了。”(插件只需下载一次。)插件为浏览器添加了一些快速强大的功能,但是写一个插件可不是什么轻松的任务,也不应该是建网站应该作的事。插件对于客户端编程的价值在于,它能让专家级的程序员开发一种新的语言,并且不经开发商的同意,就把这种语言加进浏览器里。于是插件提供了一个能创建新的客户端编程语言的“后门”(尽管不是所有的语言都是通过插件来实现的)。脚本语言插件导致了脚本语言的泛滥。你可以用脚本语言把客户端程序的源代码直接嵌进HTML页面里去,HTML页面显示的时候,会自动激活这个插件去解释这些程序的。脚本语言应该比较简单,而且作为HTML页面的一个部分,它们都是简单的文本,所以会随页面一起获取,而且装载也很快。不过代价就是代码只能给别人看了(或者说偷了)。总之,由于你没法用脚本语言做非常复杂的东西,所以它的难度不会太大。这一点决定了Web浏览器所用的脚本语言实际上是用来解决某些具体的问题的,主要是创建更丰富的,更互动的用户界面的(GUI)。然而,脚本语言也许能解决百分之十的客户端编程的问题。可能你要解决的问题正好落进这百分之八十的范围,而且由于脚本语言开发起来更简单也更快,所以你应该在选用Java或ActiveX这类难度更大的方案之前,先考虑一下脚本语言。最常被提及的浏览器用的脚本语言有JavaScript(跟Java没什么关系;它取这个名字只是想搭Java的顺风车),VBScript(看上去像VisualBASIC),以及Tcl/Tk,这是一种很流行的跨平台的创建GUI的语言。此外还有一些,但是正在开发肯定还要多。JavaScript可能是人气最旺的。NetscapeNavigator同MicrosoftInternet(IE)都内置了这个语言。然而不幸的是这两个浏览器所支持的JavaScript在风格上有很大的不同(Mozilla支持的ECMAScript或许有一天能成为普遍支持的标准。可以到www.M去下载这个浏览器)。此外讲JavaScript的书可能要比其它语言的都多,而且有些工具还能自动生成包括JavaScript程序的页面。但是如果你已经熟悉了VisualBASIC或Tcl/Tk,你还是接着用吧,这要比从头学一种新的语言更有效率。

附录2Client/ServercomputingTheprimaryideaofaclient/serversystemisthatyouhaveacentralrepositoryofinformation—somekindofdata,ofteninadatabase—thatyouwanttodistributeondemandtosomesetofpeopleormachines.Akeytotheclient/serverconceptisthattherepositoryofinformationiscentrallylocatedsothatitcanbechangedandsothatthosechangeswillpropagateouttotheinformationconsumers.Takentogether,theinformationrepository,thesoftwarethatdistributestheinformationandthemachinewheretheinformationandsoftwareresideiscalledtheserver.Thesoftwarethatresidesontheremotemachine,communicateswiththeserver,fetchestheinformation,processesit,andthendisplaysitontheremotemachineiscalledtheclient.Thebasicconceptofclient/servercomputing,then,isnotsocomplicated.Theproblemsarisebecauseyouhaveasingleservertryingtoservemanyclientsatonce.Generally,adatabasemanagementsystemisinvolved,sothedesigner“balances”thelayoutofdataintotablesforoptimaluse.Inaddition,systemsoftenallowaclienttoinsertnewinformationintoaserver.Thismeansyoumustensurethatoneclient’snewdatadoesn’twalkoveranotherclient’snewdata,orthatdataisn’tlostintheprocessofaddingittothedatabase(thisiscalledtransactionprocessing).Asclientsoftwarechanges,itmustbebuilt,debugged,andinstalledontheclientmachines,whichturnsouttobemorecomplicatedandexpensivethanyoumightthink.It’sespeciallyproblematictosupportmultipletypesofcomputersandoperatingsystems.Finally,there’stheall-importantperformanceissue:Youmighthavehundredsofclientsmakingrequestsofyourserveratanyonetime,soanysmalldelayiscrucial.Tominimizelatency,programmersworkhardtooffloadprocessingtasks,oftentotheclientmachine,butsometimestoothermachinesattheserversite,usingso-calledmiddleware.(Middlewareisalsousedtoimprovemaintainability.)Thesimpleideaofdistributinginformationhassomanylayersofcomplexitythatthewholeproblemcanseemhopelesslyenigmatic.Andyetit’scrucial:Client/servercomputingaccountsforroughlyhalfofallprogrammingactivities.It’sresponsibleforeverythingfromtakingordersandcredit-cardtransactionstothedistributionofanykindofdata—stockmarket,scientific,government,younameit.Whatwe’vecomeupwithinthepastisindividualsolutionstoindividualproblems,inventinganewsolutioneachtime.Thesewerehardtocreateandhardtouse,andtheuserhadtolearnanewinterfaceforeachone.Theentireclient/serverproblemneedstobesolvedinabigway.TheWebasagiantserverTheWebisactuallyonegiantclient/serversystem.It’sabitworsethanthat,sinceyouhavealltheserversandclientscoexistingonasinglenetworkatonce.Youdon’tneedtoknowthat,becauseallyoucareaboutisconnectingtoandinteractingwithoneserveratatime(eventhoughyoumightbehoppingaroundtheworldinyoursearchforthecorrectserver).Initiallyitwasasimpleone-wayprocess.Youmadearequestofaserverandithandedyouafile,whichyourmachine’sbrowsersoftware(i.e.,theclient)wouldinterpretbyformattingontoyourlocalmachine.Butinshortorderpeoplebeganwantingtodomorethanjustdeliverpagesfromaserver.Theywantedfullclient/servercapabilitysothattheclientcouldfeedinformationbacktotheserver,forexample,tododatabaselookupsontheserver,toaddnewinformationtotheserver,ortoplaceanorder(whichrequiredmoresecuritythantheoriginalsystemsoffered).Thesearethechangeswe’vebeenseeinginthedevelopmentoftheWeb.TheWebbrowserwasabigstepforward:theconceptthatonepieceofinformationcouldbedisplayedonanytypeofcomputerwithoutchange.However,browserswerestillratherprimitiveandrapidlyboggeddownbythedemandsplacedonthem.Theyweren’tparticularlyinteractive,andtendedtoclogupboththeserverandtheInternetbecauseanytimeyouneededtodosomethingthatrequiredprogrammingyouhadtosendinformationbacktotheservertobeprocessed.Itcouldtakemanysecondsorminutestofindoutyouhadmisspelledsomethinginyourrequest.Sincethebrowserwasjustavieweritcouldn’tperformeventhesimplestcomputingtasks.(Ontheotherhand,itwassafe,becauseitcouldn’texecuteanyprogramsonyourlocalmachinethatmightcontainbugsorviruses.)Tosolvethisproblem,differentapproacheshavebeentaken.Tobeginwith,graphicsstandardshavebeenenhancedtoallowbetteranimationandvideowithinbrowsers.Theremainderoftheproblemcanbesolvedonlybyincorporatingtheabilitytorunprogramsontheclientend,underthebrowser.Thisiscalledclient-sideprogramming.Client-sideprogrammingTheWeb’sinitialserver-browserdesignprovidedforinteractivecontent,buttheinteractivitywascompletelyprovidedbytheserver.Theserverproducedstaticpagesfortheclientbrowser,whichwouldsimplyinterpretanddisplaythem.BasicHyperTextMarkupLanguage(HTML)containssimplemechanismsfordatagathering:text-entryboxes,checkboxes,radioboxes,listsanddrop-downlists,aswellasabuttonthatcanonlybeprogrammedtoresetthedataontheformor“submit”thedataontheformbacktotheserver.ThissubmissionpassesthroughtheCommonGatewayInterface(CGI)providedonallWebservers.ThetextwithinthesubmissiontellsCGIwhattodowithit.Themostcommonactionistorunaprogramlocatedontheserverinadirectorythat’stypicallycalled“cgi-bin.”(IfyouwatchtheaddresswindowatthetopofyourbrowserwhenyoupushabuttononaWebpage,youcansometimessee“cgi-bin”withinallthegobbledygookthere.)Theseprogramscanbewritteninmostlanguages.Perlhasbeenacommonchoicebecauseitisdesignedfortextmanipulationandisinterpreted,soitcanbeinstalledonanyserverregardlessofprocessororoperatingsystem.However,Python(myfavorite—seewww.P)hasbeenmakinginroadsbecauseofitsgreaterpowerandsimplicity.ManypowerfulWebsitestodayarebuiltstrictlyonCGI,andyoucaninfactdonearlyanythingwithCGI.However,WebsitesbuiltonCGIprogramscanrapidlybecomeoverlycomplicatedtomaintain,andthereisalsotheproblemofresponsetime.TheresponseofaCGIprogramdependsonhowmuchdatamustbesent,aswellastheloadonboththeserverandtheInternet.(Ontopofthis,startingaCGIprogramtendstobeslow.)TheinitialdesignersoftheWebdidnotforeseehowrapidlythisbandwidthwouldbeexhaustedforthekindsofapplicationspeopledeveloped.Forexample,anysortofdynamicgraphingisnearlyimpossibletoperformwithconsistencybecauseaGraphicsInterchangeFormat(GIF)filemustbecreatedandmovedfromtheservertotheclientforeachversionofthegraph.Andyou’venodoubthaddirectexperiencewithsomethingassimpleasvalidatingthedataonaninputform.Youpressthesubmitbuttononapage;thedataisshippedbacktotheserver;theserverstartsaCGIprogramthatdiscoversanerror,formatsanHTMLpageinformingyouoftheerror,andthensendsthepagebacktoyou;youmustthenbackupapageandtryagain.Notonlyisthisslow,it’sinelegant.Thesolutionisclient-sideprogramming.MostmachinesthatrunWebbrowsersarepowerfulenginescapableofdoingvastwork,andwiththeoriginalstaticHTMLapproachtheyaresittingthere,justidlywaitingfortheservertodishupthenextpage.Client-sideprogrammingmeansthattheWebbrowserisharnessedtodowhateverworkitcan,andtheresultfortheuserisamuchspeedierandmoreinteractiveexperienceatyourWebsite.Theproblemwithdiscussionsofclient-sideprogrammingisthattheyaren’tverydifferentfromdiscussionsofprogrammingingeneral.Theparametersarealmostthesame,buttheplatformisdifferent;aWebbrowserislikealimitedoperatingsystem.Intheend,youmuststillprogram,andthisaccountsforthedizzyingarrayofproblemsandsolutionsproducedbyclient-sideprogramming.Therestofthissectionprovidesanoverviewoftheissuesandapproachesinclient-sideprogramming.Plug-insOneofthemostsignificantstepsforwardinclient-sideprogrammingisthedevelopmentoftheplug-in.Thisisawayforaprogrammertoaddnewfunctionalitytothebrowserbydownloadingapieceofcodethatplugsitselfintotheappropriatespotinthebrowser.Ittellsthebrowser“fromnowonyoucanperformthisnewactivity.”(Youneedtodownloadtheplug-inonlyonce.)Somefastandpowerfulbehaviorisaddedtobrowsersviaplug-ins,butwritingaplug-inisnotatrivialtask,andisn’tsomethingyou’dwanttodoaspartofthe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论