网上文件管理系统中文.docx
- 文档编号:6036044
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:16
- 大小:32.62KB
网上文件管理系统中文.docx
《网上文件管理系统中文.docx》由会员分享,可在线阅读,更多相关《网上文件管理系统中文.docx(16页珍藏版)》请在冰豆网上搜索。
网上文件管理系统中文
深入Struts架构
本文包括
介绍应用框架MVC和Model2
理解Struts原理
使用Struts控制流
讨论Struts的优缺点
1Talkingthetalk
本文深入探讨Struts能“随便谈谈”web架Struts。
为了能对StrutsStruts的控制流和它处理求-选择一个web应用框架。
本文的内容来评价Struts我们在本文的最后将有一个关于Struts优缺点的公正的看法,并阐明其总体性能。
Struts设计针专业人员应该知晓工具的能力和限制性。
2为什么我们需要
今天的web应用基本上都是代表共同理念的关键组件。
通常,开发团队需要在有限的时间里创建应用,然它们不得不正确的构建,并能持续构建它。
Javaweb开发人员已经有一些工具可用来建立表现层,比如JavaServerPages和Velocity模板。
也有一些机制来处理数据库—如JDBC和EnterpriseJavaBeans(EJBs)。
但我们用什么来将它们集合在一起?
我们已经有了型材和砖墙…还缺什么?
2.1退一进三
在上世纪80年代,当GUI被发明时,软件架构认为,应用具有3个主要部件:
管理数据的部件,创建屏幕和报表的部件,以及处理用户交互和子系统交互的部件。
在90年代早期,ObjectWorks/Smalltalk编程环境将这个3角结构引入为一个开发框架。
按Smalltalk80的说法,数据系统称为模型Model,表现系统称为视图View,而交互系统称为控制器Controller.。
许多现代开发环境,包括Java的Swing,都使用Model/View/Controller(MVC)架构作为它们的基础架构。
2.2进入Struts
Struts的核心是一个MVC风格的控制器。
Struts控制器搭起了Model和View之间的桥梁。
框架也包括开发人员想用来开发可伸缩的、先进的应用的其他组件。
Struts是一个“隐应用如何准确的和用户进行交互。
这些组件在逻辑名称后隐藏了令人讨厌的、繁琐的实现细节。
开发人员可以编细节,然后转头考虑它们的应用应该做什么,而不是考虑应用应该如何做。
2.3Struts控制器组件
Struts控制器组件是一个可编程的组件集,允许开发人员定义它们的一次性写这些实现。
用户通过超链接和HTMLform与Web应用程序进行交互。
超链接引导页面显示数他内容,如文本和图像。
表单通常通过一些定制动作向应用提交数据。
Struts提供了开发人员可用来定义超链接,表单,和定制动作这些交互的组件。
我们已经使用这些组件在第1章创建了一个入门程序。
第3章,我们还要用他们来创建另一个程序。
本文是架构性的总体介绍,所以我们继续介绍Struts的主要部件。
2.3.1超链
对应用开发人员来说,超链接是指向应用中某些资源的路径。
它们可能是web页面,
或者是定制动作。
人员可以定义超链接为一个ActionForward.
这些对象都有个逻辑名称和一个path属性。
这使得开发人员可以设置path然后通过
名称来引用ActionForward。
ActionForward通常在一个XML文件中定义,这个配置文件在Struts启动时读入。
Struts使用XML定义来创建Struts配置,包括一个ActionForward列表。
可用来创建到欢迎页面链接的ActionForward对象的XML元素看起来可能像:
name="welcome" path="/pages/index.jsp"/> 这个元素创建一个ActionForwardJavaBean,其name属性设置为welcome,path属性设置为/pages/index.jsp. JSP页面和其它组件就可以引用welcome转发。 Struts框架将查找welcome ActionForwardbean并检索path属性来完成这个超链接。 这时开发人员可以改变链接的目 或Javacode中,使维护变得困难并且容易发生错误。 在Struts应用中,这些细节可以通过 应用配置来改变,而不用触及到具体的页面和Java类。 2.3.2HTML表单 web协议,HTTP和HTML,提供了一个从表单提交数据的机制,但却把数据接收作 为一个HTML表单来的输入,校验输入,重新显示表单以供用户进行修订(如果需要),以及伴随相应的提示和信息。 ActionForm其实是具有一些标准方法来管理校验和修订循环的JavaBean。 Struts自动匹配JavaBean属性和HTML表单控件的属性。 开发者定义ActionForm类,余下的就交给Struts。 例如,这个类将自动用HTML表单中同名的属性来组装username域: publicfinalclassLogonFormextendsActionForm{ privateStringusername=null; publicStringgetUsername(){ return(this.username); } publicvoidsetUsername(Stringusername){ this.username=username; } } 其它属性也会根据表单中的每个域被自动加入。 所以,完全不需要详细分析HTTP请求。 ActionForm是按通常的Java类创建的。 Struts配置通过一系列描述符引用ActionForm: name="articleForm" type="org.apache.artimus.struts.Form"/> Struts配置列出它使用的ActionFormbean的清单,并给每个bean一个在应用中被引用时的逻辑名。 2.3.3定制动作 HTML表单使用action参数来告诉浏览器将数据送到哪里? Struts框架提供相应的Action类来接收数据。 框架会自动创建、组装、校验和最后处理Action对象对应的ActionForm。 这样,Action就可以直接从ActionFormbean取得它需要的数据。 比如下例: publicfinalclassLogonActionextendsAction{ publicActionForwardperform(ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse) throwsIOException,ServletException{ MyFormmyForm=(MyForm)form; //... returnmapping.findForward("continue"); } } Action根据返回到控制器的ActionForward对象作出控制流的决定。 这允许Action选 为保证扩展性,控制器也传递当前的请求和响应对象。 实际上,Action可以做所有Java可以做的事情。 ActionForm和Action对象,Struts控制器层还提供几个特殊的组件,包括ActionMappings和ActionServlet。 Struts也提供在控制器层的应用本地化。 2.3.4ActionMappings Struts框架提供了一个ActionMapping对象。 象ActionForward和ActionForm一样,ActionaMapping通常也在配置文件中定义: 在一个web应用中,每个资源必须通过URI面,和定制动作。 为了给定制动作一个XML path="/logonSubmit" type="app.LogonAction" name="logonForm" scope="request" validate="true" input="/pages/logon.jsp"/> 这也允许同一个Action对象定义为不同的ActionMappings。 例如,一个映射要求校验 而另一个映射不要求校验。 虽然它也可以子类化,但大多数Struts1.0的开发人员将ActionServlet处理为一个黑盒: 他们只是配置它,然后让自己工作。 在Struts1.1中,ActionServlet是比较易于扩展的。 第9章将讨论Struts1.1ActionServlet 的扩展点和配置选项。 Web应用也通过各种提示和信息与用户进行交互。 Struts组件均有内建的本地化特征,以便Struts应用可以为国际化用户使用。 我们在此书中贯穿使用本地化特征。 Form,定制的服务器端动作定义为Action类。 需要访问JDBC和EJB的开发人员也可通过Action对象进行。 这样,表现层不需要和Model 2.3.5ActionServlet StrutsActionServlet完全在幕后工作,它将其他组件绑定在一起。 2.4用Struts开发Web应用 要使用Struts开发web应用,开发人员将需要的超链接定义为ActionForward,HTML表单定义为Action层打交道。 StrutsAction对象将收集View需要的数据,然后将它们转发到表现页面。 Struts提供JSP标记库,它们和JSP页面一起使用,简化HTML表单和存取Action要转发的其它数据。 其它表现机制,比如Velocitytemplates,也可用来访问Struts框架,来创建动态的web页面。 3为什么需要框架 我们介绍了应用框架,简短讨论了为什么框架很重要。 但为了真正理解一个解决方案,我们需要了解问题所在。 为web开发应用虽然是值得的,但也要迎接各种挑战。 让我们快速看看是什么使web开发富有挑战。 3.1Web—永无休止的修补 Web开发者受到两种web缺陷的影响。 首先,我们希望使用浏览器作为客户端。 其次,必须使用web协议进行通讯。 Web浏览器通过HTTP协议通信,并用HTML显示页面。 Web浏览器发送HTTP请求,加工和显示它收到的响应。 在处理很少改变的预先编好的页面时,这是个很好的平台。 但我们大多都是编写动态程序,页面针对不同的用户是不同的。 虽然有一些现成的动态特征的段,web仍然受到HTTP/HTML的制约。 很不幸,这种状况现在并没有些许改变。 Web开发人员在想战胜挑战时必须看到这些缺对编写强壮的Web应用有太多障碍,使用框架便显得至关重要,免得你的应用陷入无休止的工作和改进之中。 在开发web应用时我们面临的挑战是很巨大的。 但同时也是值得的。 HTTP协议和HTML客户端使所有的人都可以访问你的应用。 没有其他哪个平台能声称这样。 3.2Servlet解决方案 JavaServlet平台ISun,JST]扮演了一个基本框架,为Javaweb应用提供了大量的能力。 Servlet提供了一个处理HTTP请求和确保响应的基本接口。 它在HTTP之上构建了一个“会话,,上下文,帮助跟踪应用程序的用户。 当然它也提供其他的上下文,帮助应用传输数据到浏览器或者应用中的其他servlet。 Javaweb应用也具有对基本安全特性的统一访问,而这些安全特性在不同的服务器上的管理是不一样的。 为了将这些内容集成在一起,Servlet规范引入了一个容器来管理它们。 容器也可以提供其他服务,比如作为一个JSP的处理器。 Servlet容器可以包含它自己的webserver,也可以简单的作为一个现存服务器的附属组件。 对数据库访问,Java应用在其建议中有另外一个通用的框架: JDBC。 开发者可以写标准的5QL接口,而将烦人的细节留给适配器来处理。 这使得可以很容易的改变数据库厂商,而不用重写源代码。 为了取得远程服务器的高性能数据库访问,web开发人员可以使用EJB平台。 大多数Java应用框架,包括Stmts,都可以和EJB一起使用。 总之,这使得基于Servlet的web应用非常轻便,并相对易于编写和维护。 Servlet和JSP在编写应用中扮演了完全不同的角色。 象Strtus这样的Javaweb应用框架构架于Servlet之上,给开发者提供一个无缝的集成环境。 3.3Servlet框架 大多数,不是全部,Javaweb框架使用SunScrvlet平台为基础。 这些框架都绑定一些预制的servlet,你可以插入到你的应用中去。 框架也包括一个类结构树,这些类你可以在你的应用中实现或者扩展。 通常,应用框架的目标是帮助你将你需要的数据从浏览器发出,进入到编程结构之中,这样你的应用就可以使用它一或者从编程结构中发出,进入到浏览器之中,这样你就可以看到。 一些框架,如TUrbineIASF,TUrbine,也提供helPer类来运行于JDBC数据库。 其他框架,如StrLlts,则是模型中立的。 它们既不阻碍数据库访问,也没有提供帮助。 而某些框架,如dbF0rmS[dbF0rmsl],则专注于数据库访问,而将其它任务留给开发人员或者其他框架。 3.3.1通用框架策略 Javaweb应用框架使用一些通用技术来帮助产品易于设计、编写和维护,包括: 1.外部配置文件 提供开发人员不想嵌入源代码中的实现细节。 2.中央控制器 提供一种方式,将HTTP请求排入一个易于管理的队列。 这种设计有时叫前端控制器模式(乃℃ntControlle: IGo3」) 3.外部表现系统 让不同的人同时工作在同一应用的不同部分。 如,Java工程师可以工作在和中心控制器相关的类,而页面设计者则专注于JSP。 除了JSP,其他表现系统,如VelocityTemPlates或者xLST,都可以和Struts一起使用。 框架通常有各种组件,但基本上都共享这个特性。 这些公共策略早己在一些书象DeslgnPatternsIGo41和Core·12月了Patte。 ,IGo3]给出的范例中根深蒂固了。 许多开发者在讨论并使用这些模式,但也许还没有第一次在Web环境中实现它们。 使用设计模式,如MVC,使你可以容易的通过做正确的事情来构建你的应用。 在桌面环境中使用设计模式的优点己经众所周知了,但在Web环境部署这些模式却对大多数开发者来说还是不确定的。 2.3.4黑盒-白盒统一体 框架有时分为两极标有白盒和黑盒的统一体[Fayad]。 白盒框架严重依赖于面向对象的语言的承和动态绑定。 黑盒框架则注重定义可插入组件的接口,然后基于这些接口提供基本的起始组件。 接口和基本组件通常提供热点(hotspot)方法,这个方法可以直接使用或者重写后提供特别的行为。 像许多正在使用的框架,Struts使用混合的黑盒和白盒技术。 但总体上,框架将偏向统一体的黑盒一端。 黑盒框架通常依赖于设计模式。 Struts也不例外。 事实上,设计模式通常被用来作为框架的总体描述[Johnson]。 为保持这个趋势,我们先介绍一下设计模式,以及它们是如何用在Struts框架之中。 4Struts,Model2,以及MVC Struts关于自己要说的第一句话就是: 框架…鼓励应用架构基于Model2方法,即经典的MVC设计模式的变体。 这句话打消了一些web开发者的疑虑,对那些还没深入Model2或MVC的人来说却更加疑惑了。 事实上,没有深入了解MVC和SunModel2,要理解很多Struts的文章都很困难。 4.1MVC的演化 如1节所说,Model/View/Controller原本是建立Sm应用的框架。 框架支持代表 应用状态、屏幕表现和控制流的3个类,分别叫做Model,View,和Controller。 SmalltalkMVC框架在流行的书DesignPatterns: ElemeeusableObject-Oriented Software[Go4]是作为案例来研究的。 DesignPatterns这本书有四个作者,被称为”四人帮”。 Designatterns中的MVC例子称赞通知/订阅者(notify/subscribe)协议和观察者Observer模式的使用。 例子的基础是,对同一数据,系统可能需要不同的显示视图,比如条形图、饼图、数据表格等等。 这是一个划分应用的精彩理由,经常被重复引用。 每种视图可能在同一时间显示给不同的用户。 应用必须保证在其下面的数据或者模型改变时视图的更新。 为改变模型,用户提交一个请求给控制器,由控制起来配合改变模型。 数据视图必须跟着改变,以反映最近的模型改变状态。 SmalltalkMvC方案使用观察者通知模式。 在这种模式下,每个视图注册为一个模型数据的观察者。 然后模型可以通过发送消息给所有这册观察者,通知它们相关的改变。 其为Smallta玫MVC框架己经通用化了,他也可以应用它其他平台上面。 4.2Model2的出现 JSP的意图是使创建动态页面更容易。 JSP首先是作为servlet的替代引入的,还有就是MS的ASP。 Servlet的强大功能当作易于创建服务器页面的工具提供给开发者。 但强大的功能伴随着巨大的责任。 很多团队发现,如果他们一不小心,他们的项目就会因为纠缠如麻的页面变的容易崩溃。 进一步的特性需要使用复杂的脚本程序。 但脚本程序是非常难于重用的一除非你在页面间把代码“拷贝粘贴”。 工具页面也可以包括进来,但他们很难被组织在一起,并且造成非常丑陋的“资源”树。 有些东西会出错。 很多开发人员很快意识到,JSPs和servlets可以一起使用来部署web应用。 Servlet可以应付控制流,而JSP则可专注于讨厌的编写HTML的任务。 在例行课程中,结合使用JSP和servlet开始被称为ModelZ(单独使用JSP称为Modell)。 当然,从Sun哪里仍然没什么新东西…而且很多人很快指出JSPModelZ类似于经典的Model一View一Controller架构。 在很多场合,现在交互使用ModelZ和MVC这两个词己经很平常了,虽然还有一些争论,即一个应用是否是MVC,以及是否支持经典的观察者通知模式。 没有观察者通知的Model一View一Controller有时被称为MVCZ或WebMVC。 4.3应用层—和视图去耦合 ModelZ被认为区别于MVC的一个原因是,观察者/通知模式不能在web环境内工作的很好。 HTTP是一个“拉,,的协议: 客户请求然后服务器响应。 没有请求就没有相应。 观察者模式需要一种“推”协议来进行通知,以便服务器能在模型改变时将信息推送到客户端。 虽然也有一些方法能模拟将数据推送到客户端,但这和基本情况相悖,并且会视为是权宜的修补。 4.4Struts如何实现Model2,MVC,和层 Struts通过提供一个控制器Servlet实现了Sun的MedelZ架构,这个控制器可以用来管理JSP页面和其他表现设备之间的流程。 StrLlts通过使用ActionForward和ActionMapping来保证表现层之外的控制流决策来实现MVC/层模式。 JSP可以引用一个逻辑目标。 控制器组件在运行是提供准确的URI。 5Struts控制流 因为web应用是动态的,所以很难表现“OneTrueControlFlow'‘。 依赖于环境,不同的方式下有很多不同的事情发生一特别是在web应用中。 但是事情仍然有一个通用的秩序。 如果你是个StrutS,应用框架,甚至web应用的新手,这些流程刚开始可能难以跟得上(理解)。 函待解决的各种问题不一定那么明显。 我们将在本书中详细涉及。 首先,在介绍树木之前我们先认识这片森林。 你读完此书后,我们建议你再次回来,看看每一部分是如何切合进这个总图的。 5.1总图 .客户请求匹酉队ctionURI样式的路径. .容器将请求传递给Actionscrvlet. .如果这个是模块化应用,Actionservlet选择响应的模块。 .Actionservlet查询路径的映射。 .如果映射标明了一个formbean,Actionservlet看是否己经有一个实例,或者创建一个新的实例。 如果己经有一个formbean,Actionservlet重设它,并根据HTTP请求重新组装它。 .如果mapping的validate属性设置为true,它将调用formbean的validate方法。 .如果失败,Servlet将控制转发到input属性标明的路径,控制流终止。 .如果mapping标明一个Action类型,如果它己经存在或己经实例化,它将被重用。 .Action的perform或execu七e方法被调用,并传递一个实例化的formbean(或者null)。 .Action可以组装formbean,调用业务对象,以及其他需要做的事情。 。 .Action返回一个ActionForward给Actionservlet. .如果ActionF0rward指向另一个ActionURI,重新开始;否则,显示页面或者其他资源,流程结束。 通常,结果是一个JSP页面,或者Jasper,或其它类似技术(非Stmts)加工的页面。 .如果JSP使用StrLltsHTML标记,并且在请求中看到正确的ActionF0rm,他们会从ActionForm中组装HTML控件。 否则,、html: form,标记将创建一个。 从Struts1.1开始,如果form标记自行创建一个ActionF0rm,它将调用Action-F0rm的Reset方法。 如果你只是想创建一个空白的表单,你可以使用标准的ForwardAction来通过Action传递控制,然后离开页面。 5.2出色的细节 前面章节的大纲和图示很好的显示了Struts的概揽,但忽略了重要的细节。 让我们更深入到更好的地方。 因为这里是HTTP,所有东西都是从请求开始。 5.2.1请求由容器接收 Struts框架的核心组件是ActionServlet。 象所有的servlets,它生存在容器中,比如Tomcat,Resin,或者WebLogic等。 当容器启动时,读入部署描述符(web.xml),告诉容器要装入哪些个servlet。 一个标准的servlet设定是servletmapping。 容器使用这个设定来决定哪个请求将被送到哪个servlet: 这里,我们让容器将ActionServlet映射到那些符合/do/*样式的请求。 这些请求可以是: /do/This /do/That /do/some
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网上 文件 管理 系统 中文
![提示](https://static.bdocx.com/images/bang_tan.gif)