
一、概述
由于internet技术的广泛流行,越来越多的程序开发模式正在从C/S向B/S转换,由于B/S模式具有瘦客户端的优点——无须安装客户端程序,这就大大减轻了软件升级的费用,所有的业务逻辑和存储都放在服务端,从而提高了系统的可维护性。而且由于HTTP协议是一个开放式的标准tapestry组件,因此只要是支持HTTP协议的浏览器都可以运行,再结合目前的XML技术,可以方便地实现跨平台的分布式应用。
实达startc-9030x2嵌入式瘦客户机是在虚拟化架构环境下工作的,其运行的程序、数据都集中在服务器端,在这种工作模式下,整个系统的安装、调试、管理、维护、升级都由系统管理员在服务器端统一实现,客户端仅需要做很少的管理、维护工作,应用系统的升级和客户端没有关系,使得系统管理员可在任何一点单点控制整个网络系统。实达star tc-9030x2嵌入式瘦客户机是在虚拟化架构环境下工作的,其运行的程序、数据都集中在服务器端,在这种工作模式下,整个系统的安装、调试、管理、维护、升级都由系统管理员在服务器端统一实现,客户端仅需要做很少的管理、维护工作,应用系统的升级和客户端没有关系,使得系统管理员可在任何一点单点控制整个网络系统。通过java培训,学员可以系统把握面向对象编程语言java的核心语法,能够理解j2se、j2me、j2ee三种体系架构的理论思想和架构内容,把握java程序设计的主要模式和核心思想,熟练把握基于java语言的编程技巧和编程工具,能够独立完成基于java的客户端和服务器端应用程序的开发、调试、部署和执行。
具体到 windows store app 的开发,在 windows 8.1 之后,微软提出了 universal app,开发者可以在一个 solution 中同时开发 windows 桌面程序和 windows phone 应用(根据msdn 上的这篇文章,代码重用率可以达到 77%,那相比之前花较少时间就可以做支持 windows phone 8.1 的 app),原来用于 windows phone 的 isolatedstorage 被 windows.storage 命名空间下的组件代替。它目前已经有组件仓库了,而且在 github 上都有 500 多仓库了,其中有 sqlite、camera 等原生组件,随着这些第三方组件的完善,基于 react native 开发越来越不需要写原生代码了。用laravel开发应用,把原有的代码copy过来,以前的代码session使用了$_session,本以为移植过来可以很好的运行的,因为没有依赖其他的组件,结果出现了这个。
也许你看到这里,心里在盘算着:还是用C/S算了,省得这么多麻烦,但是一个不敢于尝试新技术的公司往往是一个被新技术淘汰的公司。
为了解决上述问题,apache组织开发了一个基于JSP的MVC模式的实现:struts。它将WEB表现层分为model-view-controller几个部分,通过一个servlet来对web的流程进行控件,这与单纯的JSP或ASP相比确实进步了不少,因为利用struts能清楚地界定web的流程,而且不提倡使用<% …. %>语句,转而代之的是taglib技术。但它始终没有摆脱代码和HTML页面揉和的问题,而且它的原理对于JSP初学者来说比较复杂,taglib库不够丰富,而且taglib也不像组件那样能够继承。
于是,新一代的WEB开发方法应运而生,它们最典型的就是开发方法是基于组件的,其中最具代表性的就是Tapestry。
二、为什么要用Tapestry?
Tapestry现在已经属于Apache的Jakarta项目下了,你可以访问 来访问更多的信息。
Tapestry是一个强有力、开放源码、基于Java的用于开发高端WEB应用的framework。它是JSP的一种替代方法,使用Tapestry,可以让你的页面看不到一句JSP代码,这使页面看起来非常干净。它可以用很少的代码来构造一个极端复杂的WEB应用。
Tapestry使用了类似于传统C/S的开发方法:基于组件的开发。使用tapestry,你就可以得到以下好处:
1、非常高的代码复用性,因为在tapestry中,任何事物都可以看作一个可复用的组件。
2、将JSP开发者从繁琐的JSP代码中解脱出来,取而代之的是真正面像对像方法,而不是URL解析。
3、对页面国际化的充分支持
4、精确地错误报告,可以将错误定位到源程序中的行,取代了JSP中那些莫名奇妙地错误提示。
充分支持团队开发,美工人员和JAVA开发人员可以融洽地相处,互相都不依赖于对方。
你也许会问:如果tapestry是基于组件的,那么它的组件是怎样构成的呢?它是由一个定义文件(以XML的格式)、一个HTML模板、一个JAVA类。Tapestry的组件可以组合在一起形成一个更大的组件或逻辑页面。
Tapestry的工作原理如下:在web.xml文件中定义一个名为ApplicationServlet的servlet来进行处理所有的http请求,这和struts有点相似,不过它主要职责是负责引导整个tapestry核心,启动日志功能,读取配置文件,创建工作引擎来指派客户请求。ApplicationServlet主要是通过它的配置文件来进行自身管理的,你可以通过在web.xml中定义一个名为org.apache.tapestry.specification-path的初始参数来指定这个配置文件,当然如果你觉得这样麻烦,那你也可以不指定配置文件,但tapestry会自动寻找与此servlet同名的配置文件,例如在web.xml中的定义如下:
<servlet>
<servlet-name>Registration</servlet-name>
at org.apache.catalina.startup.hostconfig.deploydirectory(hostconfig.java:1041) at org.apache.catalina.startup.hostconfig.deploydirectories(hostconfig.java:964) at org.apache.catalina.startup.hostconfig.deployapps(hostconfig.java:502) at org.apache.catalina.startup.hostconfig.start(hostconfig.java:1277)。at org.apache.catalina.core.containerbase.addchildinternal(containerbase.java:791) at org.apache.catalina.core.containerbase.addchild(containerbase.java:771) at org.apache.catalina.core.standardhost.addchild(standardhost.java:546)。java.lang.classnotfoundexception: com.sun.xml.ws.transport.http.servlet.wsservletcontextlistener at org.apache.catalina.loader.webappclassloader.loadclass(webappclassloader.java:1516) at org.apache.catalina.loader.webappclassloader.loadclass(webappclassloader.java:1361) at org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:3915) at org.apache.catalina.core.standardcontext.start(standardcontext.java:4467)。
<load-on-startup>0</load-on-startup>
</servlet>
那么Tapestry会自动寻找一个名为Registration.application的配置文件,如果用户没有定义此文件,那么Tapestry将不能正常启动。
为了便于理解,我举一个大家都熟知的例子:用户注册模块。首先生成一个注册页面,等待用户的输入,然后进行合法性检查,如果通过,就显示下一个页面。如下所示
也许你会说,咦,这不是和JSP的表单差不多的吗?是的,虽然看上去差不多,但原理大不一样,由于它是基于组件的,所以Name、DOB、Address、City、State、Zip和Register按钮都是单独的组件,而不是普通的表单了。
但如果按钮是一个没有bs_rightbutton样式的单选或复选框,标题文本将在单选或复选框可点选区的右边居右对齐。我的实现思路是,在
酷吧?如果你曾经是一个JSP程序员,你的脑海里马上会闪过这样一个念头:一定是用javascript做的! 如果你这样想的话,那你就大错特错了,因为本人的javascript还没达到这种水平,如果我告诉你完成这样一个组件,只需要在配置文件中加入通俗易懂的几个xml元素的时候,你是否会觉得这真的很神奇呢?

是的,这就是Tapestry的魅力所在,Tapestry主要设计者Howard Lewis Ship的目的就是最大限度地解放JSP程序员的劳动量,让他们有更多的时间花在客户的需求和程序的逻辑设计上,而不是花在和美工人员互相解决矛盾冲突上,你可能会急不可待的问:那我们是否可以动手试一试了呢?是的,当然可以,但在动手之前,我要先介绍一些关于tapestry的概念,并试着开发一个最简单的“hello,world”程序来让你熟悉一下它的配置。因为它是一个framework,如果你对它的结构不是很清楚的话,我想你肯定无法充分地利用它的。
一个Tapestry组件一般称作JWC(Java Web Component),它能与其它JWC一起组合,生成实例,进行配置。比如你刚才看到的那个不可思议的组件就是一个DatePicker组件,刚才的那个页面是一个Page组件,Tapestry自带了很多的JWC组件,这些组件不仅仅只是GUI组件,还有可能是带控制功能的组件,比如foreach组件能够提供循环的功能,同时tapestry还提供了一个简单的方法来制作用户自定义的组件,所有的Tapestry应用的表示层都是由这些JWC构成的。
三、一个简单的Hello,world程序
说的简单一点,command从组件的外部进来,在组件内进行一系列的传递和处理(组件内部自己处理)之后,再将反馈信息传回组件外部,传递给omxcodec框架层。你可以将它理解为组件模板包含的html片段,组件模板内容之外就不是组件的作用域了。组件的模板是在其作用域内编译的,那么组件选项对象中的数据也应该是在组件模板中使用的。
先让我们看一下演示的结果:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-109691-1.html
流畅度提高
胜利就在前方我们一起来~~~~
一会退市