




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SSH的电信数据采集与整合序 言本课题采用由亚信公司提供的“电信用户管理和计费系统NetCT OSS” 该系统是一个典型的基于Unix平台、Mysql数据库、Web界面,以Java语言实现的大型软件项目,是为电信运营的IP计费服务的。该系统运行于Tomcat平台,采用JavaEE架构、Struts框架,Hibernate、Spring技术及Mysql数据库,并成功运行于Sun Solaris UNIX及Windows2000环境下。该系统主要分为用户自服务管理模块,管理员管理模块,用户管理等模块,资费模块,帐单和帐务模块以及数据采集与整合模块。本论文主要阐述的是该系统下的两个模块,数据采集与整合。数据采集与整合是整个系统的后台实现,功能是定期采集(采集系统)原始计费日志文件,并将采集的数据封装整合,然后通过Socket将数据传送到数据采集服务端;中数据采集服务端将数据保存到Mysql数据库当前时间所对应的t_daily_x表中,最后周期性进行数据的整合(整合系统)。该课题在设计中要解决的主要问题就是在采集过程中,如何解决数据匹配问题,如何将采集到的有效数据封装成我们需要的结构并输出到网络另一端,由接收端将数据插入到数据库中,如何在数据库中进行周期整合,产生系统所需要的各个表。指导这些问题解决的思想就是文件读写、socket编程和UNIX下的作业操作。在设计中主要用到的语言以及技术主要是Java、jdbc。之所以选择这些语言及技术,一方面是因为在电信运营支撑系统中,安全性有着很关键的作用,安全性直接影响着整个系统的使用,另一方面是在Java语言中,已经存在对日志文件读取的各种方法,可以很方便的实现采集。考虑到数据采集与整合的这些诸多特点,所以在做该子系统时选择了Java、jdbc等语言和技术。第1章 概述 1.1 课题的背景及意义随着网络的不断发展,网络几乎进入了家家户户。查资料需要网络,看新闻需要网络,看电影需要网络,买东西也需要网络,网络给人们带来的方便无处不在,人们需要使用网络的愿望也越来越大。无法想象人们离开网络会是什么样的。现阶段,要想上网就必须向网络运营商申请代理服务器,随之而产生的问题就是计费和管理问题。另一方面为了让用户更放心的使用网络运营商的代理服务器,让用户随时可以查询自己的信息及使用情况,方便网络运营商管理一系列的复杂事物,以及处理大量的数据,我们设计了本系统。系统只针对电信运营商出租的实验室,即服务器。基于SSH电信系统是利用J2EE平台下的WEB技术设计和运行。通过读取服务器日志文件采集数据然后整和到数据库中,供用户和管理员使用.其中持久层采用封装了JDBC的Hibernate框架,数据库采用Mysql,利用Struts框架作为控制器,页面显示采用JSP技术,并且用Spring框架整合Hibernate、Struts,完成企业级应用。 1.2 课题内容及目标基于SSH的电信系统的后台数据服务模块分为数据采集和数据整合模块。数据采集模块负责读取数据服务器日志文件,并进行过滤,将符合要求的数据存入数据库;数据整合端负责将数据库中的原数据按年、月、日进行数据整合,并将整合后的数据存入数据库中。1.3 开发及运行环境基于SSH的电信系统的后台数据服务模块在开发时采用C/S架构,使用Myeclipce6.0的运行环境;服务器和客户机都采用Windows XP操作系统;数据库服务器是Mysql5.0 ; 第2章 系统分析和设计2.2系统设计思想 随着网络的不断发展,网络几乎进入了家家户户。查资料需要网络,看新闻需要网络,看电影需要网络,买东西也需要网络,网络给人们带来的方便无处不在,人们需要使用网络的愿望也越来越大。无法想象人们离开网络会是什么样的。现阶段,要想上网就必须向网络运营商申请代理服务器,随之而产生的问题就是计费和管理问题。另一方面为了让用户更放心的使用网络运营商的代理服务器,让用户随时可以查询自己的信息及使用情况,方便网络运营商管理一系列的复杂事物,以及处理大量的数据,我们设计了本系统。系统只针对电信运营商出租的实验室,即服务器。基于ssh的电信计费系统是利用J2EE平台下的WEB技术设计和运行.通过采集数据然后整和到数据库中,供用户和管理员使用.其中持久层采用封装了JDBC的Hibernate框架,数据库采用Oracle,利用Struts框架作为控制器,页面显示采用JSP技术,并且用Spring框架整和Hibernate、Spring,完成企业级应用。2.2系统功能描述:WEB系统可供用户和管理员查询相关内容。通过登录该系统,用户可以完成查询帐单,修改个人信息,浏览电信运营商提供的各种资费服务。管理员可以完成查询所有用户帐单,修改管理员信息,对用户进行管理(开通,关闭,删除用户帐号),对管理员进行管理(开通,关闭,删除管理员帐号),修改资费项目,查看电信服务器运行情况。采集模块每小时执行一次,从日志文件中循环读取数据,过滤掉不符合要求的数据,采集符合要求的数据并将数据封装成bIDR结构发送到中央服务器端。整合模块根据采集到的数据进行整合并插入到各个表中,每小时执行一次。 2.3 需求分析: 各模块功能:资费管理:增、删、改、查资费信息(指定价格)管理员管理:增、删、改、查管理员信息用户管理:增、删、改、查用户信息(开通帐号,修改自身信息和需求)帐单查询:按月生成用户月计费帐单帐务查询:按月生成帐务月、年统计报表(对自己业务的查询,对服务器查询,管理)采集模块:定期采集(次/小时)原始计费Log(wtmpx)文件,整理成bIDR数据清单,并上传给中心处理系统。中心处理系统(接收系统)侦听并收集采集系统发送的数据信息bIDR,并将数据保存的数据库表t_detail_X 。整合模块:按小时合并清单表t_detail_X生成所有用户计费数据日表t_day_X;按天合并日表t_day_X生成所有用户计费数据月表t_month_X;按月合并月表t_month_X生成所有用户计费数据年表t_year_X;按小时合并清单表t_detail_X生成所有Lab_IP数据日表t_day;按天合并日表t_day生成所有Lab_ip数据月表t_month;按月合并月表t_month生成所有Lab_ip数据年表t_year;1、用户管理需求:用户开通管理:管理用户登陆Open Lab的帐号,包括帐号开通、暂停(加锁)、恢复、删除。用户资料管理:管理用户资料,包括姓名(单位)、身份证号码、住址及资费信息等。用户信息:ID,姓名、帐务帐号/密码、Open Lab帐号/密码、状态(正常/暂停/关闭)、联系电话、Email、开通日期、停止日期、付款方式(现金/邮寄/支票/转帐/电子银行)、证件号码、职业(学生/IT从业人员/非IT从业人员)、国籍(中国/美国/加拿大/日本/英国/澳大利亚/其他)、性别(男/女)、单位、联系地址、邮政编码。注意:本系统一个用户对应一个帐务帐号,可以对应多个Open Lab帐号。2、管理员管理需求:管理员开通管理:管理用户登陆NetCT OSS的帐号,包括帐号开通、暂停(加锁)、恢复、删除。管理员资料管理:管理管理员资料,包括姓名、身份证号码、住址等。管理员权限管理:改变管理员的各类权限。管理员信息:ID,姓名、帐号(一个)、密码、状态(正常/暂停/关闭)、联系电话、Email、开通日期、停止日期、权限注意:一个用户对应一个帐号。3、帐单管理需求:整合系统按月生成用户月帐单。帐单信息 用户标识信息:帐单ID,姓名、帐号、状态(正常/暂停/关闭)、联系电话、Email、开通日期.帐务信息:帐号、日期、登录时长、本月费用帐单明细:登录时间退出时间时长4、帐务管理需求:按月、年分别生成月帐务信息统计报表和年帐务信息统计报表。月帐务信息生成一个计费月周期中,每一天的帐务信息。月帐务信息:日期时长费用年帐务信息生成一个计费年周期中,每一月的帐务信息。年帐务信息:月份时长费用5、资费管理需求:用户可以通过登录系统来查询电信公司所提供的一些资费信息,以方便用户来使用。管理员通过登录系统可以根据公司运营情况来向其中增、删、改资费信息。资费信息:资费ID,资费名称,月租,使用费,描述6、采集模块需求:所需系统文件:计费Log文件数据库表 资料信息表:用户信息、管理员信息、资费信息、URL信息数据存储表:明细表、日表、月表、年表7、整合模块需求:所需数据库表:用户消费明细表、日表、月表、年表产生数据库表:服务器被使用量的日表、月表、年表业务模型:用户首先通过3A服务器验证后,可以使用出租实验室,并记录用户的登录与退出信息,信息经过加工处理生成系统所需数据持久化在数据库中,供管理和查询,如下图:2.4 系统概要设计2.4.1 系统模块划分:该系统包括两个子系统:数据采集与整合系统与WEB系统。在数据采集与整合系统中又可分为数据采集模块与数据整合模块。数据采集与整合系统中的数据采集模块主要功能是将电信服务器上的计费文件中所有用户的消费记录采集并且整理出来,然后插入到数据库中。从功能上讲,该系统共分为三个模块,分别是采集模块,入库模块和网络模块。从部署运行方面讲该采集系统分为客户端和服务器端两个部分。客户端部署在电信服务器上,用于采集和整理计费文件中的原始记录并把结果发送到服务器端。服务器端用于接收从客户端发送过来的数据,并持久化到数据库中相应的表中。数据整合模块主要功能是将数据库中的用户原始的消费数据进行整合,形成可供用户和管理查询的帐单,如日清单,月报表,年报表,以及仅供管理员查询的帐务清单,主要用于考察电信服务器的运行情况。该子系统是电信运营支撑系统中的后台实现,也是WEB系统的依赖。WEB系统是整个电信运营支撑系统的表现,是和用户进行交互的部分。该系统可供用户和管理员查询相关内容。通过登录该系统,用户可以完成查询帐单,修改个人信息,浏览电信运营商提供的各种资费服务。管理员可以完成查询所有用户帐单,修改管理员信息,对用户进行管理(开通,关闭,删除用户帐号),对管理员进行管理(开通,关闭,删除管理员帐号),修改资费项目,查看电信服务器运行情况。根据以上功能,该系统可分为六个模块,用户管理模块,管理员管理模块,用户自服务模块,帐单管理模块,资费管理模块,帐务管理模块。2.4.2 业务流程图:通过底层的采集与整合模块将系统所需要的数据插入到数据库当中,供用户及管理员使用。由图可看出,用户想使用Openlab服务器就必须通过3A服务器的验证,验证通过则允许使用并记录日志。在web部分用户可以通过登录系统来查询及修改自己的信息,管理员可以管理相应的信息。如用户管理和计费管理2.4.3 总体架构图:DailyMonthlyYearORACLE中央处理系统采集系统LogRouterSwitch工作站帐务查询系统用户管理系统ADM管理系统DBS数据整合系统BIDR采集系统解析日志文件中的信息,把对我们有用的信息采集回来,封装成一个结构传输到中央处理系统,然后持久化到数据库当中,经过整合这些数据,再分别存储到不同的表中,供系统使用。通过登录系统,用户可完成相应的操作,包括查询自己的消费信息,修改自己的一些信息等等。管理员则可对用户、业务及服务器进行管理。2.4.4 课题相关模块2.4.4.1 系统部署图:下图中“中央处理器”模块包括:数据采集服务端、数据整合端,也包括存储数据的数据库。采集部署图查询和管理部署图2.4.2.2 部署、用例与组件图用例图用例描述用例名称查询月帐单描述管理员可以进行月账单查询用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击帐单管理链接,页面就显示出系统中所有帐务帐号在上月的总的费用的列表基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击帐单管理链接,页面就显示出系统中所有帐务帐号在某年某月总的费用的列表,因为帐务帐号很多,不利于查看,在此页面上有分页的功能,在列表下方有上一页和下一页的链接和选择页码的拉列表框,可以直接点击这两个链接或直接在列表框里选择页码来跳转到帐单列表页面,显示指定页面的信息基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击帐单管理链接,页面就显示出系统中所有帐务帐号在某年某月总的费用的列表,在此页面中有查询某帐务帐号在某年某月的功能,操作流程是,在页面上方有文本提示写着帐务帐号,后边有一个文本框,在里面填写你要查询的帐务帐号名,后边还有两个下拉列表框,后边文本提示分别写着年、月,在这两个下拉列表框里分别选中你要查询的年和月,然后点击查询按钮完成操作,如果输入的帐务帐号存在,就会在列表页面显示此帐务帐号在某年某月总的费用,如果在帐务帐号文本框里没有输入会查某年某月所有帐号总的费用其他事件流无异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无用例名称查询月帐单明细描述管理员可以进行月账单明细进行查询用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击帐单管理链接,页面就显示出系统中所有帐务帐号在某年某月总的费用的列表,在每个帐务帐号的总费用之后都会有一个明细的链接,直接点击链接就会进入帐单明细页面 ,此页面会显示该帐务帐号上所有业务帐号上发生的所有费用的明细信息其他事件流无异常事件流无后置条件无组件图帐务管理模块:用例图用例描述用例名称查询月总计清单描述管理员浏览服务器的月使用时长清单用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,则显示当前月前一月以小时为单位的所有服务器一整月总计使用时间长度列表页面. 基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,则显示当前月前一月以小时为单位的每台服务器一整月总计使用时间长度列表页面. 管理员可以选择年份和月份,查看指定某年某月的以小时为单位的所有服务器一整月总计使用时间长度列表异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无用例名称查询年总计清单描述管理员浏览服务器的年使用时长清单用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,则进入服务器月总计列表页面,管理员可点击页面上方服务器年帐务查询链接,进入服务器年总计列表页面,在该页面显示以小时为单位的所有服务器去年总计使用时间长度.基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,则进入服务器月总计列表页面,管理员可点击页面上方服务器年帐务查询链接,进入服务器年总计列表页面,在该页面管理员可以选择一个年份,查看指定年的以小时为单位的所有服务器一整年总计使用时间长度异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无用例名称查询月详细清单描述管理员浏览服务器一月每日的使用时长清单用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,进入月帐务总计页面.在该页面中管理员点击要查看明细的服务器项最后的详细清单链接,进入月帐务明细页面,在该页面中显示出指定服务器在指定月份中每一天被访问的时长信息。异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无用例名称查询年详细清单描述管理员浏览服务器一年每月使用时长的清单用例参与者管理员前置条件管理员已经登录成功 基本事件流登录成功后,进入系统主页面,管理员点击左边导航条的帐务管理后,则进入服务器月总计列表页面,管理员可点击页面上方服务器年帐务查询链接,进入服务器年总计列表页面, 在该页面中管理员点击要查看明细的服务器项最后的详细清单链接,进入年帐务明细页面,在该页面中显示出指定服务器在指定年份中每个月被访问的时长信息。异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无组件图2.5 课题设计思想:本人所负责模块的设计思想是从记录有用户登录与退出信息的文件中读取信息,并经过解析,提取出有效信息,并封装成我们所需要的结构,通过SOCKET编程将采集到的数据提交到中央处理系统,经过处理插入到数据库的原始数据表中。然后经过整合,分别整合成符合系统需求所需要的各个表中,供系统使用,如图1:serverT_DETAIL_XprocOpenlab1Openlab3Openlab6Openlabclient采集系统detailyeardetailmonthsdetaildayDetailyear_xDetailmonth_xDetaildays_x整合系统图1:采集与整合设计模型2.6 课题详细描述:用户首先需要访问3A服务器(Authentication:认证,Authorization:授权,Accounting:记账,UNIX系统本身就可以作为3A服务器),3A服务器根据其中事先已经记录的用户名(UNIX下:/etc/shadow)及密码(UNIX下:/etc/passwd)进行校验。验证通过则3A服务器允许用户登录。登录成功后,用户可以使用出租实验室,并生成一个LOG文件。同时将用户的登录与退出的所有信息记录到文件中(UNIX系统中的/var/adm/wtmpx),该文件中记录的数据包括用户名,用户ID,用户IP,进程号,登录类型,状态,时间,SESSION ID等信息,这些都是为后面的数据采集做准备。数据采集主要是解析3A服务器记录的用户上、下网数据形成用户登录数据,通过SOCKET方式将数据从3A服务器发送至中央处理系统,中央处理系统将收到的数据进行持久化处理保存到Mysql数据库里对应的表(details_x:x代表一个月中的每一天)中。在这个过程中所要解决的问题有:(1)如何从文件中读取数据;(2)如何过滤并选择对我们有用的数据;(3)如何匹配同一个用于上、下网的信息,以及采集过程中有可能产生的其它问题 (4)怎样将选择的数据封装成我们所要的结构,并传输到中央处理系统中。数据整合模块,将details_x表中的数据整合到detaildays_x中,x代表一个月中的第几天;将detaildays_x表中的数据整合到detailmonths_x表中,x代表一年中的第几个月;将detailmonths_x表中的数据整合到detailyears_x表中,x代表每一个年。另一方面,将details_x表中的数据整合到detaildays,detailmonths,detailyears三个表中,这三个表分别存放的是每个服务器在一天、一个月以及一年中的使用量,这三张表只能供管理员来使用。这些操作需要在数据库中通过写存储过程和定制作业来完成。需要说明的是上面的几张表,detaildays_x表是用户计费数据日表(统计当天每小时每个服务器上的每个用户的总时长)每条数据记录的是:一个服务器上的一个用户某一小时的总时长对于一个服务器上的一个用户,最多有24条记录;detailmonths_x表是用户计费数据月表(统计当月每天每个服务器上的每个用户的总时长)每条数据记录的是:一个服务器上的一个用户某一天的总时长对于一个服务器上的一个用户,最多有31条记录;detailyears_x表是用户计费数据年表(统计当年每月每个服务器上的每个用户的总时长)每条数据记录的是:一个服务器上的一个用户某一月份的总时长对于一个服务器上的一个用户,最多有12条记录。采集模块从日志文件中采集数据并封装成一个结构,然后将这个结构传送到中央处理系统中,然后插入到明细表中,如图2左半部分所示。由采集模块插入到数据库中的数据是一些零碎的,比较详细的记录,这些数据对用户来说是没什么用处的,需要由整合模块整合到各个表中以供用户使用。整合模块首先将由采集模块采集到的数据按服务器IP,用户登录IP和用户名分组,然后将分组查询到的数据统计后插入到天表中,进而再将天表中的数据整合到月表,月表中的数据整合到年表。需要说明的一点就是整合模块将用户消费的原始数据信息整合成了两套表,一套表包括detaildays_x,detailmonths_x,detailyears_x。这些表供用户使用,用来查询自己的消费信息;另一套表包括detaildays,detailmonths,detailyears。这套表供管理员来使用,用来统计各服务器的使用情况,为企业的决策提供依据,如图1右半部分所示。这两套表是系统中资费管理模块,帐单查询模块,帐务查询模块赖以运行的基础。details_X采集客户端bIDR/var/adm/wtmpxUnix Log Server采集服务端按小时合并用户数据按小时合并Lab数据Detailsdays_XDetaildays按天合并用户数据按天合并Lab数据Detailsmonths_XDetailsmonths按月合并用户数据按月合并Lab数据Dtailyears_XDtailsyears图2:采集与整合数据流程2.5 数据库设计数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及应用系统,使之能够有效地储存数据,满足各种用户的应用需求.由于整个电信运营支撑系统的功能很复杂,并且要存取大量的数据,因此简单的使用文件来存储和管理数据显然是不明智的。因此,本系统采用Mysql数据库来存储和管理数据。根据系统需求分析需要创建以下的数据表来存储数据。基于SSH的电信系统的后台数据的采集与整合模块涉及到的数据库设计:1、details_x表用于保存从采集系统传过来的数据,由中央处理系统负责插入到数据库中。31张表字段名称数据类型说明Login_nameVarchar(20)用户登录姓名Login_ipVarchar(128)用户登录IPLogin_datetimestamp用户登录时间Logout_datetimestamp用户退出时间Lab_ipVarchar(128)服务器IPTime_durationlong时长2、detaildays_x表是用来统计用户计费数据日表,31张表字段名称数据类型说明Login_nameVarchar(20)用户登录名Login_ipVarchar(128)用户登录IPLogout_datetimestamp统计日期Lab_ipVarchar(128)服务器IPTime_durationlong时长3、detailmoths_x表是用来统计用户计费数据月表,12张表字段名称数据类型说明Login_nameVarchar(20)用户登录名Login_ipVarchar(128)用户登录IPLogout_datetimestamp统计日期Lab_ipVarchar(128)服务器IPTime_durationlong时长4、detailyears_x表是用来统计用户计费数据年表,2005-2014年10张表字段名称数据类型说明Login_nameVarchar2(20)用户登录名Login_ipVarchar2(128)用户登录IPLogout_datetimestamp统计日期Lab_ipVarchar2(128)服务器IPTime_durationlong时长5、detaildays是用来存储服务器一天之内的被使用量,该表只能由管理员使用字段名称数据类型说明Logout_datetimestamp统计时间lab_ipVARCHAR2(128)服务器地址time_durationlong使用总时长6、detailsmoths是用来存储服务器一月之内的被使用量,该表只能由管理员使用字段名称数据类型说明Logout_datetimestamp统计时间lab_ipVARCHAR2(128)服务器地址time_durationlong使用总时长7、detailyears是用来存储服务器一年之内的被使用量,该表只能由管理员使用字段名称数据类型说明Logout_datetimestamp统计时间lab_ipVARCHAR2(128)服务器地址time_durationlong使用总时长第3章 技术准备3.1 Java平台标准版(Java 2 Platform,Enterprise Edition) Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。3.2 Java平台企业版(Java 2 Platform,Enterprise Edition) JavaEE是一种用来开发分布式企业软件应用系统的平台。Java语言从创生之日起,就获得广泛接纳,经历了巨大的发展。越来越多的技术都成了Java平台的一部分,为了适应不同的需要也开发出了很多全新的API和标准。最终,Sun公司联合了多家业界巨头,在开放的Java社区组织名义下,把所有与企业开发相关的标准整合起来,构成了JavaEE平台。对于企业,JavaEE平台有很多优势:JavaEE为企业级运算的许多领域(比如数据库连接、企业业务组件、面向消息的中间件(MOM)、Web相关组件、通信协议以及互操作性)设立了标准。JavaEE促进人们基于开放的标准来开发软件;如此构建的系统实现,出自名门、安全稳固,因此JavaEE构成了一种可靠的技术投资。JavaEE是一种标准的开放平台,基于此开发的软件组建能够在不同厂商的产品中相互移植,从而避免了被一家厂商锁定。在软件开发过程中采用JavaEE能够缩短开发周期,使产品尽快投放市场这是因为,系统地很多底层架构和基础部分都已经有产品厂商按照JavaEE规范标准实现出来了,因此大多数IT企业可以不再开发中间件,集中尽力构建符合自己商业需要的应用。JavaEE提高了程序员的生产力,因为对于一个会Java语言的程序员来说很容易就能学会基于Java语言的JavaEE技术。所有企业软件开发能够在JavaEE平台上、利用Java语言完成。JavaEE增进了现存各种异构系统之间的互操作性。3.3 Java swing图形界面Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 图形用户接口( GUI )库最初的设计目的是让程序员构建一个通用的 GUI ,使其在所有的平台上都能够正常的显示。但是比较遗憾的是 AWT 产生的是在各系统看来都同样欠佳的图形用户接口, JAVA1.2 为老的 java1.0 AWT 添加了 java 基础类( JFC ),这是一个被称为 “Swing” 的 GUI 的一部分。 Swing 是第二代 GUI 开发工具集, AWT 采用了与特定平台相关的实现,而绝大部分 Swing 组件却不是。 Swing 是构筑在 AWT 上层的一组 GUI 组件的集合,为了保证可移植性,它完全用 Java 语言编写,与 AWT 相比, Swing 提供了更完整的组件,引入了许多新的特性和能力。 Swing 提供了更多的组件库,如: JTable , JTree , Jcombox 。 Swing 也增强了 AWT 中组件的功能。正是因为 Swing 具备了如此多的优势所以我们以后在开发中都使用 Swing 。 JComponent 类是 Swing 组件的基类,而 JComponent 继承自 Container 类,因此,所有的 Swing 组件都是 AWT 的容器。 Swing 采用了 MVC 设计模式。 设计模式: 当你解决一个问题时你不需要从头做起,取而代之的是,你应该参考过去的经验,或者向专家咨询意见,设计模式是一种方法,该方法以一种结构化的形式提供专家意见。设计模式的灵感来自于建筑学设计模式。设计模式已经成为文化的一部分,当你谈论 MVC 或 “ 观察者模式时 ” 全世界的程序员都明白你的意思,因而,模式已经成为讨论设计问题的有效方法。 Swing 采用了 mvc 模式, awt 事件模型采用了 “ 观察者 ” 模式 。MVC 【模型视图控制器】模式: 该模式同其他许多设计模式一样,都遵循面向对象的设计中的一个基本原则:不让对象具有太多的功能,如对于按钮来说不要让一个按钮类完成所有的事情,替代的方法就是让一个对象负责组件的观感,而另一个对象负责存储内容, mvc 模式实现三个独立的类: 模型存储内容; 视图显示内容; 控制器处理用户输入 mvc 模式明确规定了三个对象如何进行交互。模型存储内容,它没有任何用户界面。对于一个按钮来说,内容非常简单,它只是一组标志,用来说明按钮是否按下,是否启用等。对于一个文本框来说内容稍稍复杂,它是容纳当前文本的一个字符串对象。这个内容和视图的内容并不一致如果内容长度大于文本框的显示长度,那么用户只能看到的就是只有文本框显示的那一部分。 mvc 模式总结:模型存储完整内容,视图给出了内容的可视化表示【完整或者不完整】,控制器负责处理用户输入事件,如鼠标点击和键盘事件等,然后它决定是否把这些事件转化成对模型或视图的改变。控制器作用举例:如果用户在一个文本框中按下了一个字符键,那么控制器就会调用模型中的 “ 插入字符 ” 命令,然后模型告诉视图进行更新,而视图永远不会知道文本为什么改变了,但是如果用户按下了一个光标键,那么控制器会通知视图进行卷屏滚动。卷动视图对实际文本不会有任何的影响,因此模型永远不会知道该事件的发生。 Mvc 模式的一个优点是 : 一个模型可以有多个视图,其中每个视图可以显示完整内容的不同部分或不同方面。如果作为程序员来使用 Swing ,则不需要考虑 mvc 的体系结构,每个用户界面元素都有一个包装类(如 Jbutton 和 JTextField ),来保存模型和视图。 3.3 JDBC技术介绍JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。 Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 是个低级接口,也就是说,它用于直接调用 SQL 命令。在这方面它的功能极佳,并比其它的数据库连接 API 易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。高级接口是对用户友好的接口,它使用的是一种更易理解和更为方便的 API,这种API在幕后被转换为诸如 JDBC 这样的低级接口。 JDBC API 既支持数据库访问的两层模型(C/S),同时也支持三层模型(B/S)。在两层模型中,Java applet或应用程序将直接与数据库进行对话。这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行 通讯。用户的SQL语句被送往数据库中,而其结果将被送回给用户。数据库可以位于另一台计算机上,用户通过网络连接到上面。这就叫做客户机/服务器配置,其中用户的计算机为客户机,提供数据库的计算机为服务器。网络可以是 Intranet(它可将公司职员连接起来),也可以是 Internet。 在三层模型中,命令先是被发送到服务的中间层,然后由它将SQL 语句发送给数据库。数据库对 SQL 语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。MIS 主管们都发现三层模型很吸引人,因为可用中间层来控制对公司数据的访问和可作的的更新的种类。中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。最后,许多情况下三层结构可提供一些性能上的好处。 到目前为止,中间层通常都用 C 或 C+ 这类语言来编写,这些语言执行速度较快。然而,随着最优化编译器(它把 Java 字节代码转换为高效的特定于机器的代码)的引入,用 Java 来实现中间层将变得越来越实际。这将是一个很大的进步,它使人们可以充分利用 Java 的诸多优点(如坚固、多线程和安全等特征)。JDBC 对于从Java的中间层来访问数据库非常重要。用JDBC来实现访问数据库记录可以采用下面的几个步骤:1、 通过驱动器管理器获取连接接口。2、 获得Statement或它的子类。3、 限制Statement中的参数。4、 执行Statement。5、 查看返回的行数是否超出范围。6、 关闭Statement。7、 处理其它的Statement8、 关闭连接接口。3.4 I/O数据流技术介绍Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:1、按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序。2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。3.5 socket技术介绍SOCKET也就是所谓的套接字,简单的说它是一个文件。它是使用标准Unix文件描述符和其它程序通讯的方式,Unix中的一切就是文件,程序在执行任何形式的 I/O 的时候,程序是在读或者写一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,这个文件可能是一个网络连接,FIFO,管道,终端,磁盘上的文件或者什么其它的东西。这里的SOCKET就是一个特定的文件描述符,(称之为Internet 套接字)用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过它向网络发出请求或者应答网络请求。Internet 套接字分为多种形式,常见的有stream sockets流格式和datagram sockets数据报格式等。但经常用的就是这两种数据报套接节有时候也叫无连接套接字。由于数据采集是一个分布式的系统,需要把各个出租的实验室(客户端)上记录包含用户登录与退出信息的数据定期采集并发送到中央处理系统(服务器端)进行整合,然后插入到数据库中,所以需要用到SOCKET编程,这部分又是一个典型的C/S结构。3.6 java多线程技术介绍线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存空间。线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。注意:任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函数。也可以将这个函数看做线程的入口点(类似于程序中的main函数)。无论使用什么语言或技术来建立线程,都必须执行这个函数(这个函数的表现形式可能不一样,但都会有一个这样的函数)。如在Windows中用于建立线程的API函数CreateThread的第三个参数就是这个执行函数的指针。在操作系统将进程分成多个线程后,这些线程可以在操作系统的管理下并发执行,从而大大提高了程序的运行效率。虽然线程的执行从宏观上看是多个线程同时执行,但实际上这只是操作系统的障眼法。由于一块CPU同时只能执行一条指令,因此,在拥有一块CPU的计算机上不可能同时执行两个任务。而操作系统为了能提高程序的运行效率,在一个线程空闲时会撤下这个线程,并且会让其他的线程来执行,这种方式叫做线程调度。我们之所以从表面上看是多个线程同时执行,是因为不同线程之间切换的时间非常短,而且在一般情况下切换非常频繁。假设我们有线程A和B。在运行时,可能是A执行了1毫秒后,切换到B后,B又执行了1毫秒,然后又切换到了A,A又执行1毫秒。由于1毫秒的时间对于普通人来说是很难感知的,因此,从表面看上去就象A和B同时执行一样,但实际上A和B是交替执行的。二、线程给我们带来的好处如果能合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能。如在GUI应用程序中,还以通过线程的异步特性来更好地处理事件;在应用服务器程序中可以通过建立多个线程来处理客户端的请求。线程甚至还可以简化虚拟机的实现,如Java虚拟机(JVM)的垃圾回收器(garbage collector)通常运行在一个或多个线程中。因此,使用线程将会从以下五个方面来改善我们的应用程序:1. 充分利用CPU资源现在世界上大多数计算机只有一块CPU。因此,充分利用CPU资源显得尤为重要。当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空闲状态。这将造成大量的计算资源的浪费。而在程序中使用多线程可以在某一个线程处于休眠或阻塞时,而CPU又恰好处于空闲状态时来运行其他的线程。这样CPU就很难有空闲的时候。因此,CPU资源就得到了充分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度事业单位车辆租赁及维护保养服务合同模板
- 2025年度智慧社区便民服务商铺租赁协议
- 2025版木材加工与销售班组劳务承包合同范本
- 2025版企业内部培训资料翻译委托协议
- 2025版日用品电商平台入驻品牌孵化与培育合同
- 2025版桥梁建设施工设备租赁与质量控制协议
- 2025版企业品牌价值提升与市场推广咨询合同
- 2025版住宅小区智能化改造前期物业服务合同示范
- 2025版租赁车辆合同争议解决方式合同
- 2025版全新电商平台新品上市合作协议下载
- 贸易经营类企业生产安全事故应急预案
- 《月下过小修净绿堂试吴客所饷松萝茶》赏析
- 数据中心负荷计算方法
- 水箱拆除专项施工方案
- YY/T 1851-2022用于增材制造的医用纯钽粉末
- GB/T 20858-2007玻璃容器用重量法测定容量试验方法
- 生活中的会计课件
- 辽宁大学学生手册
- 湘美版美术一年级上册全册课件
- 酒水购销合同范本(3篇)
- 师说一等奖优秀课件师说优质课一等奖
评论
0/150
提交评论