• j9国际站|(官网)点击登录

    新疆j9九游会

    本站首页 j9九游会 乐成案例 公司新闻 公司简介 客服中心 软件技能 网站建立
      您如今的地位: 新疆二域j9九游会公司 >> Java技能 >> 文章注释

    JAVA开辟的6个理论的例子

                起首,本文的目的读者是正在从事技能事情的架构师。为了制止糜费各人的本领,我会制止报告一些新鲜的最佳理论,比方"一样平常构建(build daily)"、"测试统统(test everything)"和"常常集成( integrate often)。 任何具有称职架构师的项目都有分工明白的、界说精良的团队布局。他们还为举行编码反省、构建代码(逐日或在必要时)、举行测试(单位、集成和体系的)、摆设和设置装备摆设/开释办理而具有已记载的历程。 
          其次,我将跳过通常兜售的最佳理论,比方"基于接口的设计"、"利用闻名的设计模子"以及"利用面向办事的架构"等。相反,我将会合报告我曾学过而且利用了多少年的6(不是许多)个方面的in-the-trench课程。最初,本文的目标是让您思索一下本人的架构,提供事情代码示例大概办理方案凌驾了本文的范畴。上面就让我介绍一下这6课:
    第1课:切勿绕过办事器端验证
    作为一位软件参谋,我曾无机会不光设计并完成了Web使用步伐,并且还评价/考核了很多Web使用步伐。在庞大的、而且用JavaScript客户端封装的使用步伐内,我常常遇到对用户输出信息实行少量反省的Web页面。即便HTML元素具无数占有效性的属性也云云,比方MAXLENGTH。只要在乐成验证一切输出信息后,才干提交HTML表单。后果,一旦办事器端收到关照表单(哀求),便适当地实行商业逻辑。
    在此,您发明题目了么?开辟职员曾经做了很多紧张的假定。比方,他们假定一切的Web使用步伐用户都异样老实。开辟职员还假定一切用户将总是利用他们测试过的欣赏器拜访Web使用步伐。另有许多其他的假定。这些开辟职员遗忘了使用可以收费失掉的东西,经过下令行很容易地模仿相似欣赏器的举动。现实上,经过在欣赏器窗口中键入得当的URL,您可以发送任何"posted"表单,只管云云,经过禁用这些页面的GET哀求,您很容易地制止如许的"表单发送"。但,您不克不及制止人们模仿乃至创立他们本人的欣赏器来入侵您的体系。
    基本的题目在于开辟职员不克不及确定客户端验证与办事器端验证的次要差异。两者的次要差异不在于验证毕竟产生在那边,比方在客户端大概在办事器端。次要的差异在于验证面前的目标差别。
    客户端验证仅仅是利便。实行它可为用户提供疾速反应??使使用步伐好像做出呼应,给人一种运转桌面使用步伐的错觉。
    另一方面,办事器端验证是构建宁静Web使用步伐必须的。不论在客户端一侧输出的是什么,它可以确保客户端送往办事器的一切数据都是无效的。
    因此,只要办事器端验证才可以提供真正使用步伐级的宁静。很多开辟职员堕入了错误觉得的骗局:只要在客户端举行一切数据的验证才干确保宁静。上面是阐明此看法的一个罕见的示例:
    一个典范的登录页面拥有一个用来输出用户名的文本框和一个输出暗码的文本框。在办事器端,或人在吸收servlet中大概遇到一些代码,这些代码组成了上面情势的SQL盘问:
    "SELECT * FROM SecurityTable WHERE username = '" + form.getParameter("username") + "' AND password = '" + form.getParameter("password") + "';",并实行这些代码。假如盘问在后果集的某一行前往,则用户登录乐成,不然用户登录失败。
    第一个题目是结构SQL的方法,但如今让j9九游会临时疏忽它。假如用户在用户名中输出"Alice'--"会怎样呢?假定名为"Alice"的用户曾经在SecurityTable中,这时此用户(更适当的说法是黑客)乐成地登录。我将把找出为什么会呈现这种状况的缘故原由做为留给您的一道习题。
    很多发明性的客户端验证可以制止一样平常的用户从欣赏器中如许登录。但关于曾经禁用了JavaScript的客户端,大概那些可以利用其他相似欣赏器步伐间接发送死令(HTTP POST和GET下令)的初级用户(大概说黑客)来说,j9九游会又有什么措施呢?办事器端验证是避免这种毛病范例所必需的。这时,SSL、防火墙等都派不上用场了。

    第2课:宁静并非是附加物
    如第1课所述,我曾有幸研讨过很多Web使用步伐。我发明一切的JavaServer Page(JSP)都有一个配合的主题,那便是具有相似上面伪代码的结构:
    HTML, JavaScript, and JSP
    code to display data and
    allow user interaction -->
    假如项目利用诸如Struts如许的MVC框架,一切的Action Bean都市具有相似的代码。只管最初这些代码大概运转得很好,但假如您发明一个bug,大概您必需添加一个新的脚色(比方,"guest"大概"admin"),这就会代表一场维护噩梦。
    别的,一切的开辟职员,不论您多年老,都必要熟习这种编码形式。固然,您可以用一些JSP标签来整理JSP代码,可以创立一个扫除派生Action Bean的根本Action Bean。只管云云,由于与宁静相干的代码会散布到多个地方,以是维护时的噩梦依旧存在。由于Web使用步伐的宁静是逼迫创建在使用步伐代码的级别上(由多个开辟职员),而不是创建在架构级别上,以是Web使用步伐照旧很大概存在缺点。
    很大概,基本的题目是在项目靠近完成时才处置宁静性题目。近来作为一名架构师,我曾在一年多的工夫里亲历了某一要完成项目标6个版本,而直到第四版时j9九游会才提到了宁静性??即便该项目会将高度敏感的团体数据表露于Web上,j9九游会也没有留意到宁静性。为了变动公布方案,j9九游会卷入了与项目赞助人及其办理职员的争斗中,以便在初版[chū bǎn]中包括一切与宁静相干的功效,并将一些"商业"功效放在后续的版本中。终极,j9九游会博得了成功。并且由于使用步伐的宁静性相称高,可以掩护客户的公有数据,这一点j9九游会引以为荣,j9九游会的客户也十分开心。
    遗憾的是,在大少数使用步伐中,宁静性看起来并未增长任何实践的贸易代价,以是直到最初才办理。产生这种状况时,人们才慌忙开辟与宁静相干的代码,而丝毫没有思索办理方案的临时可维护性大概强健性。无视该宁静性的另一个征兆是缺乏片面的办事器端验证,如我在第1课中所述,这一点是宁静Web使用步伐的一个紧张构成局部。
    记着:J2EE Web使用步伐的宁静性并非仅仅是在Web.xml 和ejb-jar.xml文件中利用符合的声明,也不是利用J2EE技能,如Java 认证和受权办事(Java Authentication and Authorization Service,JAAS)。而是颠末深图远虑[shēn tú yuǎn lǜ]后的设计,且完成一个支持它的架构。
    第3课:国际化(I18N)不再是纸上谈兵
    当当代界的现实是很多英语非母语的人们将拜访您的大众Web使用步伐。随着电子政务的实验,由于它容许人们(某个国度的住民)在线与当局机构交互,以是这一点分外真实。如许的例子包罗换发驾照大概车辆注销证。很多第一言语不是英语的人们很大概将拜访如许的使用步伐。国际化(即:"i18n",由于在"internationalization"这个单词中,字母i和字母n之间一共有18个字母)使得您的使用步伐可以支持多种言语。
    显然,假如您的JSP 页面中有硬编码的文本,大概您的Java代码前往硬编码的错误音讯,那么您要破费许多工夫开辟此Web使用步伐的西班牙语版本。但是,在Web使用步伐中,为了支持多种言语,文本不是专一必需"详细化"的局部。由于很多图像中嵌有笔墨,以是图形和图像也应该是可设置装备摆设的。在极度的状况下,图像(大概颜色)在差别的文明配景中大概有完全差别的意思。相似地,任何款式化数字和日期的Java代码也必需当地化。但题目是:您的页面结构大概也必要变动。
    比方,假如您利用HTML表格来款式化和表现菜单选项、使用步伐题头或注脚,则您大概必需为每一种支持的言语变动每一栏的最小宽度和表格其他大概的方面。为了顺应差别的字体和颜色,您大概必需为每一种言语利用独自的款式表。
    显然,如今创立一个国际化的Web使用步伐面对的是架构应战而不是使用步伐方面的应战。一个架构精良的Web使用步伐意味着您的JSP页面和一切与商业相干的(使用步伐特有的)Java代码都不知不觉地选择了当地化。要记着的教导是:不要由于Java、J2EE支持国际化而不思索国际化。您必需从第一天起就记着设计具有国际化的办理方案。
    第4课:在MVC表现中制止配合的错误
    J2EE开辟曾经充足成熟,在表现层,大少数项目利用MVC架构的某些情势,比方Struts。在如许的项目中,我罕见到的征象是对MVC形式的误用。上面是几个示例。
    罕见的误用是在模子层(比方,在Struts的Action Bean中)完成了一切的商业逻辑。不要忘了,表现层的模子层仍旧是表现层的一局部。利用该模子层的准确办法是挪用得当的商业层办事(或工具)并将后果发送到视图层(view layer)。用设计形式术语来说,MVC表现层的模子应该作为商业层的表面(Fa?ade)来完成。更好的办法是,利用中心J2EE形式(Core J2EE Patterns)中叙述到的Business Delegate形式。这段自书中摘录的内容精美地概述了将您的模子作为Business Delegate来完成的要点和好处:
    Business Delegate起到客户端商业笼统化的作用。它笼统化,进而隐蔽商业办事的完成。利用Business Delegate,可以低落表现层客户端和体系的商业办事.之间的耦合水平。依据完成战略差别,Business Delegate可以在商业办事API的完成中,掩护客户端不受大概的变化性影响。如许,在商业办事API或其底层完成变革时,可以潜伏地增加必需修正表现层客户端代码的次数。
    另一个罕见的错误是在模子层中安排很多表现范例的逻辑。比方,假如JSP页面必要以指定方法款式化的日期大概以指定方法排序的数据,某些人大概将该逻辑安排在模子层,对该逻辑来说,这是错误的地方。实践上,它应该在JSP页面利用的一组helper类中。当商业层前往数据时,Action Bean应该将数据转发给视图层。如许,无需创立模子和视图之间多余的耦合,就可以机动支持多个视图层(JSP、Velocity、XML等)。也使视图可以确定向用户表现数据的最佳方法。
    最初,我见过的大少数MVC使用步伐都有未充实使用的控制器。比方,绝大少数的Struts使用步伐将创立一个根本的Action类,并完成一切与宁静相干的功效。其他一切的Action Bean都是此基类的派生类。这种功效应该是控制器的一局部,由于假如没有满意宁静条件,则起首挪用不该该抵达Action Bean(即:模子)。记着,一个设计精良的MVC架构的最壮大功效之一是存在一个强健的、可扩展的控制器。您应该使用该才能以增强本人的上风。
    第5课:不要被JOPO约束停止脚
    我曾目击很多项目为了利用Enterprise JavaBean而利用Enterprise JavaBean。由于EJB好像给项目带来自卑感[zì bēi gǎn]和井蛙语海[jǐng wā yǔ hǎi]的体现,以是偶然它是显酷的要素(coolness factor)。而其他时分,它会使J2EE和EJB惹起殽杂。记着,J2EE和EJB不是赞同词。EJB只是J2EE 的一局部,J2EE 是包括JSP、servlet、Java 音讯办事(JMS)、Java数据库毗连(JDBC)、JAAS、 Java办理扩展(JMX)和EJB在内的一系列技能,异样也是有关怎样配合利用这些技能创建办理方案的一组引导准绳和形式。
    假如在不必要利用EJB的状况下利用EJB,它们大概会影响步伐的功能。与老的Web办事器相比,EJB一样平常对使用办事器有更多的需求。EJB提供的一切增值办事一样平常必要斲丧更大的内存和更多的CPU工夫。很多使用步伐不必要这些办事,因而使用办事器要与使用步伐争取资源。
    在某些状况下,不用要地利用EJB大概使使用步伐瓦解。比方,近来我遇到了一个在开源使用办事器上开辟的使用步伐。商业逻辑封装在一系列有形态会话bean(EJB)中。开辟职员为了在使用办事器中完全禁用这些bean的"钝化"费了很大的劲。客户端要求使用步伐摆设在某一商用使用办事器上,而该办事器是客户端技能栈的一局部。该使用办事器却不容许封闭"钝化"功效。现实上,客户端不想改动与其互助的使用办事器的设任何置。后果,开辟商遇到了很大的贫苦。(好像)风趣的事变是开辟商本人都不克不及给出为什么将代码用EJB(并且照旧有形态会话bean)完成的好来由。不但仅是开辟商会遇到功能题目,他们的步伐在客户那边也无法事情。
    在Web使用步伐中,无款式平凡Java 工具(POJO)是EJB强无力的竞争者。POJO是轻量级的,不像EJB那样包袱分外的包袱。在我看来,对很多EJB的好处,比方工具入池,估量过高。POJO是您的冤家,不要被它约束停止脚。


    第6课:数据拜访并不克不及托管O/R映射
    我曾到场过的一切Web使用步伐都向用户提供从其他地方存取的数据,而且因而必要一个数据拜访层。这并不是说一切的项目都必要标识并创建如许一个层,这仅仅阐明如许层的存在不是隐含的便是明白的。假如是隐含的数据层,数据层是商业工具(即:商业办事)层的一局部。这实用于小型使用步伐,但通常与大一些项目所承受的架构引导准绳相冲突。
    总之,数据拜访层必需满意或凌驾以下四个尺度:
    具有通明性
    商业工具在不晓得数据源完成的详细细节状况下,可以利用数据源。由于完成细节隐蔽在数据拜访层的外部,以是拜访是通明的。
    易于迁徙
    数据拜访层使使用步伐很容易迁徙到其他数据库完成。商业工具不理解底层的数据完成,以是迁徙仅仅触及到修正数据拜访层。进一阵势说,假如您正在摆设某种工场战略,您可以为每个底层的存储完成提供详细的工场完成。假如是那样的话,迁徙到差别的存储完成意味着为使用步伐提供一个新的工场完成。
    只管即便增加商业工具中代码庞大性
    由于数据拜访层办理着一切的数据拜访庞大性,以是它可以简化商业工具和利用数据拜访层的其他数据客户真个代码。数据拜访层,而不是商业工具,含有很多与完成相干的代码(比方SQL语句)。如许给开辟职员带来了更高的服从、更好的可维护性、进步了代码的可读性等一系列利益。
    把一切的数据拜访会合在独自的层上
    由于一切的数据拜访操纵如今都委托给数据拜访层,以是您可以将这个独自的数据拜访层看做可以将使用步伐的其他局部与数据拜访完成互相断绝的层。这种会合化可以使使用步伐易于维护和办理。
    留意:这些尺度都不克不及明白地调出对O/R(工具到干系)映射层的需求。O/R映射层一样平常用O/R映射东西创立,它提供工具对干系数据布局的检察和感知(look-and-feel)。在我看来,在项目中利用O/R映射与利用EJB相似。在大少数状况下,并不要求它。关于包括中等范围的团结以及多对多干系的干系型数据库来说,O/R映射会变得相称庞大。由于增长O/R 映射办理方案自己的内涵庞大性,比方耽误加载(lazy loading)、高速缓冲等,您将为您的项目带来更大的庞大性(和危害)。
    为了进一步支持我的看法,我将指出依照Sun Microsystem所遍及的实体Bean(O/R映射的一种完成)的很多失败的实验,这是自1.0版以来不停折磨人的困难。在SUN的防卫步伐中,一些晚期的题目是有关EJB标准的开辟商完成的。这顺次证明白实体Bean标准本身的庞大性。后果,大少数J2EE架构师一样平常以为从实体Bean中离开出来是一个好主见。
    大少数使用步伐在处置他们的数据时,只能举行有限次数的盘问。在如许的使用步伐中,拜访数据的一种无效办法是完成一个数据拜访层,该层完成实行这些盘问的一系列办事(或工具、或API)。如上所述,在这种状况下,不必要O/R映射。当您要求盘问机动性时,O/R映射正符合,但要记着:这种附加的机动性并不是没有价钱的。
            就像我答应的那样,在本文中,我只管即便制止新鲜的最佳理论。相反,关于J2EE项目中每一位架构师必需做出的最紧张的决议,我会合解说了我的看法。最初,您应该记着:J2EE并非某种详细的技能,也不是强行参加到办理方案中的一些首字母缩写。相反,您应该在得当的机遇,适当的地方,利用符合的技能,并遵照J2EE的引导准绳和J2EE中所包括的比技能自己紧张得多的理论。

    作者:未知 | 文章泉源:赛迪网 | 更新>###9:09

  • 上一篇文章:

  • 下一篇文章:

  • 相干文章:
    JAVA中的笼统范例的一些观点
    java言语开辟步伐中的几个例子各人看看
    理解java开辟言语在j9九游会中的几个误区
    怎样才干利用Java完成外部范畴的特定言语
    Java开辟学习警惕利用Date以及Time类
    sun近来修补了一局部java的宁静补丁
    Java步伐员应该理解那些开源协议
    java功能优化的一些看法
    剖析c#言语和java言语最类似的地方
    GUI JAVA使用步伐是怎样做出来的?
    软件技能
    · 开辟言语
    · Java技能
    · .Net技能
    · 数据库开辟
    最新文章  
    ·j2se 嵌入式剧本抓取引擎
    ·JAVA开辟的6个理论的例子
    ·JBuilder7 / Weblogic7开辟
    ·JAVA中的笼统范例的一些概
    ·java言语开辟步伐中的几个
    ·理解java开辟言语在软件开
    ·怎样才干利用Java完成外部
    ·Java开辟学习警惕利用Date
    ·Java步伐员应该理解那些开
    ·java功能优化的一些看法
    ·介绍JDK5.0一些collection
    ·底子学习:java中利用存储
    ·剖析c#言语和java言语最相
    ·Java言语学习:jAVA中 的多
    ·Java是不是应该增长新特征
    关于j9九游会 | j9九游会 | 下载试用 | 客服中心 | 联系j9九游会 | 相关单位 | 网站舆图 | 新疆电子舆图 | RSS订阅
    版权一切 © 2016 新疆二域j9九游会网 www.k8w.net All Rights Reserved
    新疆j9九游会>###、4811639.
    ### ;>###华联大厦A-5C 邮编:830000