1、本科毕业设计(20届)基于WEB应用的电子印章制作控件所在学院专业班级计算机科学与技术学生姓名学号指导教师职称完成日期年月I【摘要】电子印章是为了电子商务中的文件以及商业数据提供法律效应而制作出的应用产品,应用于诸如政府部门中的重要文件等文件安全方面。为了响应电子商务的发展趋势,本系统抛弃之前客户端程序运行的旧观念,而设计成B/S架构的WEB系统,让服务器承担更多的工作。本系统将不成熟的印章文字排列算法,通过设置印章长宽系数将文字排列算法加以改进,使椭圆印章的文字在椭圆边界处的排列更为平滑,同时调整椭圆长轴端文字角度,让印章更为美观。并生成GIF格式的透明图片以方便使用。【关键词】电子印章;文
2、字排列;网络应用;透明图片IIABSTRACT【ABSTRACT】ELECTRONICSEALISTHEAPPLICATIONSTOMAKEEFILESORBUSSINESSDATALEGALITISUSEDSUCHASTHESECURITYOFIMPORTANTDOCUMENTSINGOVERNMENTDEPARTMENTSINRESPONSETOTHETENDENCYOFECOMMERCE,THESYSTEMABANDONSTHEFORMERCONCEPTSTHATCLIENTSRUNTHEAPPLICATIONSSOTHESYSTEMISDESIGNEDTOWEBSYSTEMOFB/SS
3、TRUCTURETHENSERVERWILLDOMOREBUTCLIENTWONTTHESYSTEMIMPROVESTHEALGORITHMOFTHESEALSTEXTALIGNMENTBYSETTINGTHECOEFFICIENTOFOVALSLENGTHANDWIDTHTHENTEXTINTHEELLIPTICALBOUNDARYWILLBESMOOTHERANDADJUSTSTHEANGLEOFTEXTINTHEELLIPTICALBOUNDARY,ITWILLMAKETHESEALMOREBEAUTIFULFORCONVENIENTTOUSE,THESYSTEMGENERATESTRA
4、NSPARENTGIFFORMATPICTURE【KEYWORDS】ELECTRONICSEALTEXTALIGNMENTWEBAPPLICATIONTRANSPARENTIMAGEIII目录1引言111电子印章的背景与意义112电子印章的应用领域213课题研究的目标32应用程序架构521基于B/S体系522MVC模式523设计思想与功能设计63网络应用关键技术931JAVASCRIPT语言932AJAX技术10321AJAX发送数据11322响应数据的处理1233SERVLET请求处理机制1334JSP技术13341SESSION机制14342JSP标记库介绍与使用1435STRUTS2技术
5、15351STRUTS2思想15352STRUTS2应用程序配置154电子印章的数据传输1941浏览区处理数据1942STRUTS2与数据传输21421AJAX与STRUTS21422图片传输21423文件传输245电子印章布局算法2751JAVA图片布局2752印章图形生成算法27IV521印章外圈圆形生成27522印章中心图片正五角星生成2853文字排列算法30531JAVA文字绘制缺陷与调整30532圆形印章文字位置计算30533椭圆印章文字位置计算3254JAVA生成透明图片346总结35参考文献36致谢错误未定义书签。11引言11电子印章的背景与意义现代电子商务发展迅猛,每天产生的电
6、子文件不计其数,其中还有大量需要盖上公章进行文件确认。这个流程是必须的,但又相当繁琐,在这样的情况下,一个新的概念应运而生让电子印章来替代普通的公章。电子印章泛指以电子形式存在的,依附在电子文件上同时又与文件逻辑相关的电子内容。电子印章可以用来辨识电子文件签署者的身份,保证文件的完整性与未更改性。当然,电子印章继承了一般公章的功能表示签署者同意电子文件所陈述事项的内容。1在2005年4月1日,我国信息化建设迎来了一个新的时代,从那个时刻起,我国信息化开始就有法可依了。电子签名法作为我国规范电子商务活动的第一部法律诞生了,它的存在赋予了电子印章和数据电文法律效力,并且在很大程度上消除网络信用危机
7、。某种意义上,电子签名法实现了真正意义上的“无纸化办公”,让电子印章具有了和一般公章同等的法律效力。2电子印章有不同于一般的普通公章。电子印章要保证其本身唯一性,不可仿制性,所以一系列的加密机制为其保驾护航。已经成熟运用的算法有数字签名RSA公钥体制,算法标准公钥长度1024、2048、4096BITS;数字加解密国家密码管理局认可的加密算法;数字水印印章水印生成之后经许可的加密算法进行封装,以防盗取;指纹识别和数字签名相结合。PKI(PUBLICKEYINFRASTRUCTURE)是一种利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。用户可以利用PKI平台所提供的各种服务来
8、进行安全通信。应用电子印章需要数字证书,数字证书是标识网络用户身份信息的一系列数据,是用来识别网络通讯时各方的身份。数字证书的特性保证在这个世界上不可能出现完全一样的数字证书,而其中所包含的一对私钥和公钥,私钥的作用的是对数据进行签名,而公钥则是用来验证签署者的身份。因为是利用数字证书私钥来签名,所以私钥的安全性非常重要,通常做法是将私钥存储在USBKEY中。USBKEY是一种USB接口的硬件存储设备。USBKEY的模样跟普通的U盘差不多,不同的是它里面存放了单片机或智能卡芯片,利用USBKEY内置的公钥算法可以实现对用户身份的认证。3可以说,安全的电子印章,是印章与科技结合的印章新品种。它的
9、推广应用,不仅将有效地打击由印章引起的刑事犯罪活动,也有利于加强公安机关对印章的统一管理和监控。2图11电子印章使用流程第一步我们可以上网搜索印章生成程序,下载程序并生成我们所想的漂亮的电子印章图片。第一步之后,为了保护各位使用者的权益,请各位使用者到有关部门进行申请注册电子印章。第二步USBKEY中含有自带的CPU,可以进行对用户信息的加密,存放数字证书等重要信息。第三步当我们需要在文件上使用电子印章时,我们从USBKEY中取出信息,并且对文件进行加密,目的是为了保证文件在任何情况下不被篡改。第四步文件传输后,接收者阅读文件,通过公钥可以得知印章的使用者,同时由于印章算法对文件进行了加密,接
10、收者无法私自改动文件内容,以此保障双方的权益。接收者确认文件后,同样加盖自己的印章。这样,一桩电子商务的交易就可以在几分钟内结束,期间没有使用一般的公章,没有使用纸质用品,没有任何交通工具的使用。电子印章为电子商务提供了简单、轻松、边界的办事效果。12电子印章的应用领域现在应用电子印章的各种部门机构相当多,政府机构的办公自动化、政府机关间的收发文件管理以及联网办公需要相应的电子印章,以保证电子公文等信息的完整性、防篡改性和不可抵赖性。政府与企业之间存在大量的信息交换,如网上报税、网上申报、网上审批、网上工商年检、电子海关等流程中运用电子印章来确保网上办公的安全性。电子印章还为企业的网上协同办公
11、提供了安全保证,企业与企业之间的协同商务提供可信任的认证、保证信息交换的安全性和有效性4。同时既保证了工作的高效率,又利用现代化手段节约了能源,每年可省下大量的纸质成本。其实,社会中的各行各业都会用到电子印章,大量的业务流程也会使用到电子印章,它3的诞生与存在已经为许多工作带来了方便,它的发展道路也相当宽广。现在的电子印章相比最初的诞生已经不在单一,有应用与WORD文档的,应用于EXCEL表格文件的,应用于PDF文件的,也有应用于网页、图片等电子印章产品。13课题研究的目标图12电子印章成品效果现在的电子印章产品发展趋势良好,当然还有潜力可以去改进。图12绘制了电子印章的成品,显而易见的是在椭
12、圆印章的长轴两端文字处理不够平滑,影响美观度。本系统将要对这种不足进行改进,将椭圆印章轴端点位置的文字做再处理。再者,为了顺应电子商务的发展趋势,减轻客户端程序的运行负担,系统应当设计成浏览器/服务器结构。数据库用户信息存储服务器提供印章生成算法客户端浏览器传输印章参数1传输印章图片2下载印章图片图13网上电子印章系统基本功能一个基本的网上电子印章系统将需要如下功能1注册功能。服务器将有一套更为完善的数据库系统,用来存放用户信息。在以前更为依靠客户端的应用程序中,用户通过购买序列号得到产品的使用权。其缺陷之一是当用户丢失了序列号后,用户只能通过再次购买序列号才能得到再次使用的权限。缺陷之二则是
13、如今有多种文件格式相对应的印章产品,这种情况下是否用户需要多次购买产品序列号而使用印章产品2界面友好,交互设计优越。在一个网络应用系统中,界面友好并不仅仅只是指漂亮华丽的界面,在设计概念中,友好的界面是指用户几乎感觉不到等候的感觉。为了加强用户体验,人机交互的设计更为重要。人机交互技术主要研究人与计算机之间的信息交换,一些相同功能的效果不应该让用户感觉到页面的跳转。3多种功能印章使用。电子印章产品种类繁多,相对于客户端程序,难道我们需要使4用不同的产品就要下载多种应用程序如此设计理念我们应当抛弃,而应该多为方便用户考虑。网上电子印章系统应该为用户提供多种电子印章产品的使用。4提供印章下载功能。
14、这是电子印章应用的基本功能,方便用户使用。如果要将电子印章设计更为完善,系统可以为用户提供一整套的服务,包括与有关部门联网提供注册电子印章的服务,提供数字证书、PKI算法为电子印章直接加密,为将印章加入USBKEY保驾护航。图14电子印章系统交互而电子印章系统同用户之间简单的交互过程如图14。当用户希望使用电子印章产品时,首先需要完成系统注册。然后进入交互页面,用户每次输入参数,系统将立即生成产品图片在当前页面而没有页面跳转,让用户觉得与使用客户端程序没有差异,从而感觉使用方便快捷。而用户在查看印章效果感到不满意时可以立即进行改变参数,与服务器进行交互直到用户满意为止。之后用户可以下载产品进行
15、使用。本次设计的目标1将电子印章系统设计成网络应用。2为服务系统完善电子印章在线生成功能,并且界面友好。3提供印章完成后的透明图片下载。52应用程序架构21基于B/S体系电子商务工作正逐步抛弃客户端/服务期端结构,基于C/S体系设计的应用程序需要客户端安装程序,更新操作复杂,兼容性差,并且维护起来繁琐。然而这些缺点恰恰是浏览器/服务器(B/S)结构的优点。为了响应电子商务的趋势,电子印章系统采用BROWSER/SERVER体系结构。在B/S体系的应用中,对于客户端计算机的要求大大降低,客户端不需要安装任何专门的软件,仅仅一台可以上网的、有浏览器的电脑,就可以在任何地方对网站进行请求操作。其优点
16、是客户端零维护,无需升级。图21B/S结构图如图21所示B/S体系的运行过程。用户通过浏览器发送应用请求到服务器,而服务器则对数据做处理、执行业务逻辑、生成页面,再将响应数据发回给浏览器。22MVC模式MVCM(MODEL)模型,V(VIEW)视图,C(CONTROLLER)控制器。MVC的基本思想是将一个软件的组成部分划分成三部分,即M(模型)封装业务逻辑;V(视图)数据展现,也就是将模型提供的数据以合适的方式展现出来;C(控制器)将视图与模型的关系解耦,即将视图与模型的调用要通过控制器来协调,目的是为了实现模型复用。MVC模式这样设计的目的是为了实现模型复用,也就是说可以使用多种视图来表示
17、,例外,MVC模式提供了用户接口,用户可以通过视图来向系统发送请求。WEB服WEB应务器IIS用程序浏览器6图22MVC运行流程MVC运行流程如图22所示,其中,左侧是浏览器,右侧是服务器。用户在输入页面输入请求数据(REQUEST)并发送到服务器,服务器接受到数据时并不直接处理用户REQUEST,而是先交给CONTROLLER,通过CONTROLLER解析请求地址,从而转发交个某个特定的业务逻辑(ACTION)来处理数据,再由ACTION调用数据中对应的MODEL进行数据加工。最后,ACTION对数据进行封装,再交给VIEW,由VIEW作为载体显示数据并将响应数据(RESPONSE)发送回浏
18、览器。MVC的运行流程看似复杂,而且还增加了复杂度和开发工作量,但是,MVC却将服务器的职能划分干净,方便对于程序的理解以及代码的维护。23设计思想与功能设计电子印章系统是个小型的网络服务应用,在初始访问应用时,页面生成已初始化的印章图片,用户通过改变印章参数进行对印章外观的更改。为了更好的考虑用户体验,无论哪项操作完成,最后的图片呈现结果仍然是原来页面。后台方面,运用STRUTS2框架进行对请求的解析,发送给相应的ACTION,由ACTION对数据进行处理。BEAN中包含印章实体与数据处理,再数据处理完毕之后,交由后台另一个绘制功能的ACTION,绘制成形的电子印章。并通过解析成字节型数组输
19、出流给VIEW。当用户需要进行下载操作时,后台经过解析,找到下载的ACTION,通过将图片进行编码输出成GIF格式的透明图片,并通过流文件进行传送。客户端浏览器接受到响应请求,发现传输的是非指定的HTML语言,便自动启动下载功能,将图片下载到本地机上可直接使用。7图23电子印章包结构图电子印章系统下设立三个包,ACTION包中存放的是各种操作类,包含改变印章颜色、长短轴、显示文字等等更改数据的操作类,响应下载请求的操作类,响应获取印章图片的操作类。UITL工具包中存放的是将缓冲图片打印输出成GIF格式透明图片的工具类。而BEAN包中存放的是印章实体类,此类中包含了生成电子印章的算法。将包设计成
20、此结构后,每个包所执行的职能变的明确,包下每个类的操作可以分的更为细致,相当程度上提高了程序的逻辑。电子印章系统ACTION包BEAN包UTIL包PRINTGIFSEAL参数变更操作类下载操作类绘制操作类8开始显示初始化页面用户更改参数显示电子印章图片确认电子印章图片并下载结束图24电子印章系统流程图用户在使用本系统时,首先输入网站地址,进入初始化页面。初始化的页面中已经将电子印章的参数给出,并且有预先生成的印章图片等待用户更改参数。用户通过改变参数值或者点击更改相应参数值的按钮来改变印章的外观。用户选择自己所需的图片,进行下载得到透明的印章图片。93网络应用关键技术网络应用程序每次生成的数据
21、不会是一成不变的类似HTML页面,而是根据处理后的数据动态的页面,也正是因为如此,应用程序中囊括了各种网络编程语言。其中JAVA语言是其中发展成熟的编程语言。本系统将使用JAVA语言编写,其中所使用的关键技术如下。31JAVASCRIPT语言JAVASCRIPT是一种用于客户端WEB开发的脚本语言,此语言用来为HTML网页添加动态功能,比如响应用户点击按钮操作。JAVASCRIPT的源代码从服务器端发送到客户端之前不需要进过编译,浏览器可以自行JS脚本,而且市面上各类浏览器都具备运行JS脚本的功能。5通常引入JS脚本有三种方法(1)页面内部ALERTHELLO(2)单独放在文件里(3)嵌入HT
22、ML元素内部SAYHELLO当然JS脚本主要功能是响应用户操作,当用户执行点击按钮操作时,浏览器通过响应按钮事件ONCLICK进行操作。响应这种事件的代码如下FUNCTIONFUN/事件处理内容JAVASCRIPT是目前为止网络页面语言响应客户端事件推广最为广泛的语言,正是因为其的使用度广,却因为使用繁琐复杂,JAVASCRIPT如同JAVA语言一样被开发出一系列框架。PROTOTYPE是基于JAVASCRIPT语言编写的集成框架。PROTOTYPE首先将大多数的JAVASCRIPT操作进行了简化,例如得到HTML元素JS脚本写法是DOCUMENTGETELEMENTBYIDSTR在PROTO
23、TYPE中被简写成STR。同样得到HTML元素值的方法则简化为FSTR。除了简化JS代码外,还提供了对各种基本数据类型的操作。例如对字符串的多种操作类似JAVA中STRING类中的方法。当然PROTOTYPE的思想接近于我们所熟悉的JAVA语言,PROTOTYPE像JAVA那样提供OBJECT10关键字。当我们的编程思想由JAVASCRIPT脚本语言逐渐向JAVA编程思想转变后,编写代码突然变得异常明朗。JQUERY对JAVASCRIPT的封装更为进一步,与PROTOTYPE也有很大的区别,而且它们两者在使用上有所冲突,无法同时使用,所以在使用上要有所选择,孰优孰劣也是根据实际情况来判断。JQ
24、UERY为网络编程提供了包括判断浏览器版本型号的功能,让火狐、微软浏览器的区别对于编程者是透明的。我们无需区分使用者是什么浏览器,如果用户无法显示,那是因为JQUERY框架没有编写完美。JAVASCRIPT中有数组对象和一般对象,但处理方法极少。JQUERY则为这组“难兄难弟”提供了更多的操作方法,在本系统中,颜色板的使用就是通过JQUERY编写的。32AJAX技术AJAX(ASYNCHRONOUSJAVASCRIPTANDXML)是多种技术的综合,包括JAVASCRIPT、XHTML和CSS、DOM、XML和XSTL、XMLHTTPREQUEST。传统的WEB应用采用同步交互过程,在这种情况
25、下,用户首先向HTTP触发一个请求,反过来,服务器执行某些任务,在向发出请求的用户返回一个HTML页面。这将导致一种不连贯的用户体验,服务器在处理请求时,用户多数时间处于等待状态,浏览器屏幕也是一片空白,这种情况也就是所谓的界面不友好。6在某些情况下,页面所改变的只是一小部分的数据,那又为何一定要重新加载整个页面呢正是因为上述的缺陷,AJAX技术呼之欲出,并在诞生后收到广泛使用,而此技术也成为香饽饽了。11图31AJAX应用模型321AJAX发送数据首先AJAX是以JAVASCRIPT语言编写的,为WEB应用提供异步处理的技术。在语言格式上类似JAVASCRIPT,当然在形式上我们可以作为JA
26、VA语言看待。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中“处理等待再处理再等待”的缺点。7好在如见的浏览器版本都支持AJAX技术。但是面对不同的浏览器,仍然有所不同。首先我们需要初始化对象,浏览器的不同编写的代码不同,分别如下FUNCTIONGETXMLHTTPREQUESTVARXMLHTTPREQUESTNULLIFTYPEOFXMLHTTPREQUESTUNDEFINED/FF以及其它浏览器XMLHTTPREQUESTNEWXMLHTTPREQUESTELSE/IEXMLHTTPREQUESTNEWACTIVEXOBJECTMICROSOFTXMLHTTP12R
27、ETURNXMLHTTPREQUEST在得到XMLHTTPREQUEST对象后,接下来要指定服务器返回信息时客户端的处理方式。HTTP_REQUESTGETXMLHTTPREQUESTHTTP_REQUESTONREADYSTATECHANGEFUNCTION然后,就可以像服务器发送HTTP请求了。格式如下HTTP_REQUESTOPENMETHOD,URL,TRUEHTTP_REQUESTSENDNULLOPEN函数的第一个参数是HTTP请求的方法,可选项为GET,POST。OPEN函数的第二个参数是目标URL。OPEN函数的第三个参数是指定在等待服务器返回信息的时间内是否继续执行下面的代码
28、。TRUE表示不会继续执行,知道服务器返回信息。OPEN调用完后要调用SEND方法。OPEN方法只是打开网络连接,而SEND方法才是发送数据,这两个方法应当同时出现并且方法调用次序不能颠倒。322响应数据的处理之前的代码介绍了发送数据的流程,那么我们又如何对响应的数据做处理的在上述第二步骤中其实已经提到了对返回数据进行处理的方法,处理数据只需要在方法体中加入合适的代码。首先,处理数据要检查XMLHTTPREQUEST对象的READYSTATE值,判断请求目前的状态。IFHTTP_REQUESTREADYSTATESTATCCODE/当返回的状态码是STATECODE时,处理业务ELSEXMLH
29、TTPREQUEST对象与服务器之间进行交互,其交互的过程,STATECODE常用的状态码分为以下五种。0连接还没有建立也就是XMLHTTPREQUEST对象已经创建,但没用调用OPEN方法;1连接已经建立,但是还没有发请求;2请求已经发送;3正在和服务器正交互;4响应结束。13在服务器返回信息后,还需要判断返回的HTTP状态码,以确定返回的页面没有错误。IFHTTP_REQUESTSTATUSSTATUSCODE/HTTP状态码为STATUSCODE时执行业务ELSE在HTTP协议中常用的状态码如下200OK,一切顺利。302请求被重定义。403请求被禁止。404请求的资源不存在。405请求
30、的方法不支持。500服务器内部错误,通常为程序执行过程中抛出异常。33SERVLET请求处理机制SERVLET是JAVA编程网络应用中基础而又重要。它担当客户请求与服务器响应的中间层。SERVLET由WEB服务器进行加载,该WEB服务器必须包含支持SERVLET的JAVA虚拟机。SERVLET中共有两种响应方法,包括GET/POST,这些是相对应HTTP协议发送方法而定义的公开方法。SERVLET通过用户请求在SERVICE方法中解析,再来执行相应的方法。当然在现实中,我们直接将我们所执行的SERVLET中的SERVICE()方法直接覆盖,这样,当服务器接到用户请求后便不需要再次解析调用响应的
31、GET/POST方法。同时,SERVLET还是一个容器,我们所有的请求数据都放在这个容器中,所以所有的SERVLET公用此容器,可以访问容器中的公用数据。由于一些业务我们不在一个SERVLET中执行,这时我们通过转发将业务交给另一个SERVLET处理,这时,数据继续存储在容器中,SERVLET可以访问并处理数据。8然而,这样的数据比较不安全。所以SERVLET还提供了SESSION、COOKIE等机制来加以限制。34JSP技术JSP(JAVASERVERPAGEJAVA)服务器端页面技术。是SUN公司制订的一种服务端动态页面生成技术,其主要组成部分是HTML(包含HTML,CSS,JAVASC
32、RIPT)JAVA代码。因为采用SERVLET生成页面,过于烦顼,比如要输出比较复杂的页面,必须全部采用OUTPRINTLN方式来编写。所以,为了简化生成页面,才会有JSP技术出现。但是事实上JSP其实就是一个SERVLET对象。JSP是一个文本文件,以JSP为后缀。JSP写好以后,不需要单独去编译,JSP引擎会将JSP文件转换成“类名_JSPJAVA”文件。然而14打开该文件,我们发现一个最主要的方法是PUBLICVOID_JSPSERVICEFINALJAVAXSERVLETHTTPHTTPSERVLETREQUESTREQUEST,FINALJAVAXSERVLETHTTPHTTPSER
33、VLETRESPONSERESPONSE;其实是JSP引擎将JSP文件进行再次转换成一个SERVLET。之后JSP引擎再将JAVA编译成CLASS文件并且调用SERVICE方法。而且JSP为当前页面已经封转了一系列的对象例如REQUEST对象、RESPONSE对象、SESSION对象等等。EL(EXPRESSIONLANGUAGE)表达式的诞生,其目的是为了JSP写起来更为方便。它提供了JSP脚本编制元素范围外使用运行时表达式的功能。EL表达式格式EXPRESSIONEL表达式可以直接访问BEAN的属性,例如USERNAME。当JSP引擎读到这行代码时,JSP引擎会依次搜索PAGECONTEX
34、T,REQUEST,SESSION,APPLICATION,如果搜索到了,即停止向下搜索。其搜索方法即调用每个方法的GETATTRIBUTEUSER,然后调用GETNAME方法并输出。341SESSION机制在用户方位服务器时,服务器会发送给浏览器的少量的数据,该数据会被浏览器保存下来,并且,在浏览器下一次访问服务器时,携带给服务器。该数据会被浏览器保存到内存或者以文件的方式保存到其所在的机器上。这种操作的对象称之为COOKIE。通过这种方式,服务器就知道浏览器是否访问过,并且也知道访问过程涉及到的数据。服务器端使用COOKIE时浏览器会将用户登录信息保存到浏览器,使得用户下一次不用再登录系统
35、,并且COOKIE将记录用户的使用的偏好数据。当浏览器第一次访问服务器时,服务器会创建一个对象,该对象用于保存客户端的状态,这个对象就是SESSION,我们称其为“会话”。SESSION有一个唯一的ID号,该ID号也叫SESSIONID,在默认情况下,服务器将采用COOKIE机制发送给浏览器,浏览器下次访问服务器时将SESSIONID发送给服务器。服务器通过SESSIOID找到对应的SESSION对象。SESSION也是一个容器,其存在是为了保存用户的特定信息、某些业务所需操作数据等。COOKIE机制和SESSION机制正巧相对。前者将用户信息保存在客户端,为的是可以简化登录时的操作、完成购物
36、车技术等。而后者则是保存在服务器端,保存用户之前一次或几次操作结果数据。在网络应用中同时应用,方便操作和记录用户数据。342JSP标记库介绍与使用JAVASTANDARDTAGLIB(标准标签库)指的是APACHE开发的标签库被SUN纳入到JAVAEE50,已经被标准化了。它的用途是为了减少JSP页面中出现的JAVA代码,更好地维护JSP代码。标签的实质是JSP引擎碰到标签后,会搜索标签对应的JAVA类,执行JAVA类对应的方法。若要使用在JSP页面中,则要导入标签库。方法是添加标记。其中URI是一个标识符,用来唯一标识一个标签库。URI的值可以参考标签库的TLD描述文件。PREFIX前缀,可
37、以自定义。比如,导入核心标签库。35STRUTS2技术STRUTS是JAVA网络编程中为了简化代码,复用控制器的一种新新技术。其目标即是为了使WEB开发变得更加容易。351STRUTS2思想在原始的网络开发环境中,我们每一次不同类型的请求需要处理,就会产生一个对应的SERVLET。如果是简单的WEB应用还好,但是如果是大的WEB应用,那就会产生繁多的SERVLET,代码繁多,又由于为了简化SERVLET编写的代码量,每个SERVLET必定会对应产生一个页面无论是静态的HTML页面还是JSP动态产生的页面。这种情况所带来的负面影响不仅仅是因为产生大量代码,同时,由于大型WEB应用开发带来的大量程
38、序开发人员产生路径设置不同的问题,让我们应用难以维护。9正是这种测试以及维护问题需要简化,所以STRUTS的思想正是将控制器简化成一个只用一个SERVLET,而将解析地址的方法封装起来,让路径写在单独的XML配置文件中,将SERVLET和JSP概念合并到一起。其想法就是把对当前用户所见的页面请求的处理动作分拆成处理逻辑和表现逻辑,让它们各司其职,这也是面向对象编程的思想。当每个职能被清楚分开后,不但个人编程也变得逻辑明朗,并且团队编程分配工作任务时也将简化,使项目管理变得相对简单。在做项目时有个软件工程中“高内聚、低耦合”的概念。而STRUTS的思想就是提供一个松耦合的框架。352STRUTS
39、2应用程序配置并不是简单的将STRUTS2引入到项目中就可以了,我们需要为STRUTS2进行配置。16浏览器CONTROLLERDISPATCHERFILTERMODELACTIONJSPVIEWSTRUTSXML文件在这里起到解析地址作用,让服务器知道由哪个ACTION来处理业务STRUTSXML文件在这里起到解析地址作用,让服务器知道由哪个页面来承载处理完的数据WEBXML文件将不解析所有路径而交由STRUTS过滤器,让STRUTS来解析图32STRUTS配置文件用途首先我们要将WEBROOT文件夹下的WEBXML中添加如下标签内容STRUTS2FILTERORGAPACHESTRUTS2
40、DISPATCHERFILTERDISPATCHERSTRUTS2FILTER/STRUTS2有其它一些配置文件我们需要填入。STRUTSDEFAULTXML默认配置,用于定义STRUTS2框架提供的RESULT组件、INTERCEPTOR组件。DEFAULTPROPERTIES默认配置,用于定义STRUTS2框架的一些属性。STRUTSXML开发自定义,用于定义开发者编写的RESULT组件、INTERCEPTOR组件、ACTION组件。STRUTSPROPERTIES开发自定义,用于覆盖DEFAULTPROPERTIES中的默认配置。STRUTSPLUGINXML整合插件的配置文件。17其中
41、STRUTSXML文件是我们需要配置路径最为重要的文件。配置文件有如下标签/OKJSP/INDEXJSP/OPTJSP标签中的意义是使用那个STRUTS包为之后的路径做解析服务。ACTION标签中NAME属性表示请求路径,CLASS属性表示处理业务所需要使用的JAVA文件的路径。RESULT标签中NAME是JAVA文件返回的字符串,通常是“SUCCESS”、“FAIL”之类的,标签之间的字符串表示视图路径。这个标签的含义是当ACTION中业务处理完与否,根据值类型选择所要显示的视图数据返回给用户。上面所使用的是默认的RESULT类型,我们用TYPESTR来描述。当然,RESULT中有很多的结果
42、类型可以使用。名称描述CHAIN将一个ACTION的执行与另外一个配置好的ACTION串联起来。用第一个ACTION的GETTER方法和第二个ACTION的SETTER方法来完成ACTION之间属性的复制。DISPATCHER渲染JSP。只是默认的结果类型。如果在ACTION配置中没有配置其它的结果类型,它就会被使用。FREEMARKER渲染FREEMAKER模板。18HTTPHEADER返回HTTP头和用户定义的值。REDIRECT重定向到任意的URL。REDIRECT重定向到任意的URL。STREAM将数据流返回给浏览器。可以用来吧数据注入PDF,MICROSOFTWORK,图像或其它数据
43、中。VELOCITY渲染VELOCITY模板。XSLT使用XSLT来转换已执行完毕的ACTION的属性格式。以上是STRUTS最为重要、也是最为基础的配置文件,当我们通过以上步骤一步步的进行配置,那么功能简单的网络应用系统就可以运行起来了。194电子印章的数据传输41浏览区处理数据为了让用户更好的感觉界面友好、没有繁多的页面跳转,系统应当更多的使用异步请求技术。窗体标题窗体标题数据1数据2数据3数据4印章图片为什么数据输入后页面不跳转呢哦使用了AJAX技术图41AJAX处理数据效果之前介绍了AJAX技术,那这个系统终于要使用这项先进技术了。在使用AJAX技术的同时,系统还将进行简化,使用JQU
44、ERY框架对请求进行封装。JQUERY对JAVASCRIPT的封装更为进一步,与PROTOTYPE也有很大的区别,而且它们两者在使用上有所冲突,无法同时使用,所以在使用上要有所选择,孰优孰劣也是根据实际情况来判断。JQUERY为网络编程提供了包括判断浏览器版本型号的功能,让火狐、微软浏览器的区别对于编程者是透明的。我们无需区分使用者是什么浏览器,如果用户无法显示,那是因为JQUERY框架没有编写完美。JAVASCRIPT中有数组对象和一般对象,但处理方法极少。JQUERY则为这组“难兄难弟”提供了更多的操作方法,在本系统中,颜色板的使用就是通过JQUERY编写的。而JQUERY则更是对AJAX
45、发送有着举足轻重的作用。任何数据的更改都是一样的发送请求,在这里将对其中一项数据传输进行详细解释。例如当用户更改印章长轴数据时发生了什么20用户浏览器更改数据封装对象数据服务器解析请求AJAX格式数据流解析数据,处理业务逻辑形成数据流DOM格式数据流浏览器解析数据流,更改部分页面数据,形成最新网页给用户图42AJAX处理数据流程在应用AJAX之前,需要为页面做准备工作。使用JAVASCRIPT框架需要导入脚本。代码如下印章长轴标签做如下设置;在这里我们不需要为标签进行事件绑定,因为在JQUERY框架中我们会对标签进行事件绑定。FUNCTION“WIDTH“BLURFUNCTIONIF“WIDT
46、H“VALISNANRETURNIF“WIDTH“VAL。同时,RESULT标签也得到相应的扩展,使用到不同于之前介绍的结果数据类型,而是TYPE“JSON”,代码为。由于无需产生新的页面,所以RESULT标签中不需要给出任何页面路径。422图片传输22浏览器浏览器我是浏览器,我要获取图片WEBXML2011/5/18我是WEBXML文件,我不做解析,由STRUTS过滤器过滤给STRUTS配置文件STRUTSXML2011/5/18我是STRUTSXML文件,我收到的是STREAM请求,决定交由“图像ACTION”做业务处理我是“图像ACTION”,我处理后产生了流STRUTSXML2011/
47、5/18我是STRUTSXML文件,我知道“图像ACTION”产生的流的名称,我把数据流拿出来了并发送回浏览器浏览器浏览器我是浏览器,我接收到数据流,可以解析,我将更换图片图43获取图片流程在系统中新增加的两个功能为实时显示印章图片以及下载图片,这将产生流数据,同时RESULT的TYPE属性也已改变。在运行完AJAX异步处理请求后,有如下代码FUNCTIONDATAIMAGECHANGE。这时调用另一个函数FUNCTIONIMAGECHANGEIMGATTRSRC“PAINTACTIONDT“NEWDATEGETTIME/生成印章图片此方法是为了生成新印章图片。而传输图片流的ACTION和RE
48、SULT标签代码为IMAGESTREAM在执行的JAVA文件中将产生数据流,RESULT标签中的字符串正是对应的字段名。其中RESULT的属性TYPE“STREAM”表示传输格式是流,这个数据流表示可以被浏览器解析。产生数据流的代码如下PUBLICCLASSPAINTACTIONEXTENDSACTIONSUPPORTPRIVATESEALSEALPRIVATEINPUTSTREAMIMAGESTREAM/定义流文件,要求是与STRUTSXML文件中的字符串相同PUBLICSTRINGEXECUTEMAPSESSIONACTIONCONTEXTGETCONTEXTGETSESSIONSEALS
49、EALSESSIONGET“SEAL“SEALPAINT23BYTEARRAYOUTPUTSTREAMOSNEWBYTEARRAYOUTPUTSTREAMTRYIMAGEIOWRITESEALGETBUFIMG,“GIF“,OSIMAGESTREAMNEWBYTEARRAYINPUTSTREAMOSTOBYTEARRAYRETURN“SUCCESS“CATCHEXCEPTIONEEPRINTSTACKTRACERETURN“FAIL“PUBLICINPUTSTREAMGETIMAGESTREAMRETURNIMAGESTREAMPUBLICVOIDSETIMAGESTREAMINPUTSTREAMIMAGESTREAMTHISIMAGESTREAMIMAGESTREAM按以上步骤操作将把图片数据流文件传送到浏览器端。但是有没有发现什么问题呢在请求更改图片的操作函数中有这段代码IMGATTRSRC“PAINTACTIONDT“NEWDATEGETTIME。问题来了,浏览器请求新图片那就请求吧,为什么参数后面要有一段奇怪数据呢窗体标题窗体标题FUNCTIONIMAGECHANGEIMGATTRSRC“PAINTACTIOND“