网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [推荐] 初探下一代Web开发模式Tapestry
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:35 资料 短消息 加为好友
初探下一代Web开发模式Tapestry

前言.e G%c'f$^"m5Q-V
'[ ] O'~ S4J8^/h
由于Internet技术的广泛流行,越来越多的程序开发模式正在从C/S向B/S转换,由于B/S模式具有瘦客户端的优点——无须安装客户端程序,这就大大减轻了软件升级的费用,所有的业务逻辑和数据库存储都放在服务端,从而提高了系统的可维护性。(N'd$Q,N2q5P'C7\(x

/k6@+k+h/m0M };P而且由于HTTP协议是一个开放式的标准,因此只要是支持HTTP协议的浏览器都可以运行,再结合目前的XML技术,可以方便地实现跨平台的分布式应用。
9[#K)D$|6R-u2G)c!q ltech.techweb.com.cn%}/V,E+B*T5{8Z6{.V
但B/S架构有其天生的缺点:无状态性。这其实并不是B/S程序的错,而是由于B/S程序是建立在http协议的基础上的,因此程序无法维护各个客户端的状态,不过所幸的是这个问题现在已经解决了。#](v,o&J,I,z

'c1?'@-X$v){;f0L#]现行的B/S开发的另一大缺陷是:代码和HTML页面揉和在一起了,对程序员和美工非常不利,而且对代码的维护简直是一场恶梦,这相信是许多Web 开发者的一种体会。而C/S结构就没有这种缺陷,因为它是基于组件的,比如VB,你有多得数不清的ActiveX控件来完成一些复杂的界面。程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛$h.@*p#o&@.@!{,N

7t1e0W,q$W(s,M&T7K3FTechWeb-技术社区也许你看到这里,心里在盘算着:还是用C/S算了,省得这么多麻烦,但是一个不敢于尝试新技术的公司往往是一个被新技术淘汰的公司。
)Q5~2X5X8T9t6?5I;S)p5i9V
为了解决上述问题,apache组织开发了一个基于JSP的MVC模式的实现:struts。它将WEB表现层分为model-view- controller几个部分,通过一个servlet来对web的流程进行控件,这与单纯的JSP或ASP相比确实进步了不少,因为利用struts能清楚地界定web的流程,而且不提倡使用<% …. %>语句,转而代之的是taglib技术。但它始终没有摆脱代码和HTML页面揉和的问题,而且它的原理对于JSP初学者来说比较复杂,taglib库不够丰富,而且taglib也不像组件那样能够继承。程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛2_#\.k3D*n4}8^$];P*N

6\;L%}2[:W1{;a0C/V于是,新一代的WEB开发方法应运而生,它们最典型的就是开发方法是基于组件的,其中最具代表性的就是Tapestry。
/` Y5Q0s)Z!j-v)?tech.techweb.com.cn$|$U"K-X:Y)^&H3x
为什么要用Tapestry?%h'T)~2^.g2N+U
8D)F,x'\(U X7]0C(?
Tapestry现在已经属于Apache的Jakarta项目下了,你可以访问http://jakarta.apache.org/tapestry 来访问更多的信息。
'w7w'~0z&Y'[*R%i:}!g&t J/|7a4c8Y1c7P%V
Tapestry是一个强有力、开放源码、基于Java的用于开发高端WEB应用的framework。它是JSP的一种替代方法,使用Tapestry,可以让你的页面看不到一句JSP代码,这使页面看起来非常干净。它可以用很少的代码来构造一个极端复杂的WEB应用。
4e'u7g8d4n-W-O3l/O,htech.techweb.com.cn
#_%p8r4{,W)g7n;p(F9WTapestry使用了类似于传统C/S的开发方法:基于组件的开发。使用tapestry,你就可以得到以下好处:
-w.U;I)x3H-n*D/U;p1v9g程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9V2u*s7c/L7x7^4N$?
1、非常高的代码复用性,因为在tapestry中,任何事物都可以看作一个可复用的组件。
+]%y ?)H%O8q3m程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
"I5B V9W/R-F7E!L*`tech.techweb.com.cn2、将JSP开发者从繁琐的JSP代码中解脱出来,取而代之的是真正面像对像方法,而不是URL解析。
3r!~6X-}3m程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1Z"s!_&A3l*J7r
3、对页面国际化的充分支持tech.techweb.com.cn"P7x/a/|3Z"O

5c,K'O:G6]2_4、精确地错误报告,可以将错误定位到源程序中的行,取代了JSP中那些莫名奇妙地错误提示。0h+r#Z$r:b
;@"K3P0x%A7x5q%c$Q/L2z
充分支持团队开发,美工人员和JAVA开发人员可以融洽地相处,互相都不依赖于对方。tech.techweb.com.cn&Y4^2s#?$u a3f*R+x;Y

6R0g9p5D+[$h6k!v(M程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛你也许会问:如果tapestry是基于组件的,那么它的组件是怎样构成的呢?它是由一个定义文件(以XML的格式)、一个HTML模板、一个JAVA类。Tapestry的组件可以组合在一起形成一个更大的组件或逻辑页面。
4?!n*X'{1n g+r.x
!i2v-W2x!@9t-]*~tech.techweb.com.cnTapestry的工作原理如下:在web.xml文件中定义一个名为ApplicationServlet的servlet来进行处理所有的 http请求,这和struts有点相似,不过它主要职责是负责引导整个tapestry核心,启动日志功能,读取配置文件,创建工作引擎来指派客户请求。ApplicationServlet主要是通过它的配置文件来进行自身管理的,你可以通过在web.xml中定义一个名为 org.apache.tapestry.specification-path的初始参数来指定这个配置文件,当然如果你觉得这样麻烦,那你也可以不指定配置文件,但tapestry会自动寻找与此servlet同名的配置文件,例如在web.xml中的定义如下:"_1F$g(W6F8Z5u!k1h

/K,q6O-M!f4O*A/tTechWeb-技术社区<servlet>
1W.o;}!b,p5U2X)?程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛<servlet-name>Registration</servlet-name> t1M)}9h-k$]3o.B.s
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>%H I;k g"K.u%M:I(O7U
<load-on-startup>0</load-on-startup>TechWeb-技术社区"j#[/[3s!E(W k!~
</servlet>





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:36 资料 短消息 加为好友
那么Tapestry会自动寻找一个名为Registration.application的配置文件,如果用户没有定义此文件,那么Tapestry将不能正常启动。
-c#n-`.z!n*D为了便于理解,我举一个大家都熟知的例子:用户注册模块。首先生成一个注册页面,等待用户的输入,然后进行合法性检查,如果通过,就显示下一个页面。如下所示程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛2w!W!a#Y9C1|$e
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛,{8A,A9^5p7|'c4?%q

图1   用户注册模块

3_-[(M9w3X"u2O'm-])~#C0R:u程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛也许你会说,咦,这不是和JSP的表单差不多的吗?是的,虽然看上去差不多,但原理大不一样,由于它是基于组件的,所以Name、DOB、Address、City、State、Zip和Register按钮都是单独的组件,而不是普通的表单了。 这时你肯定会说:唉,也不过如此嘛,就算是基于组件的思想设计出来的东西也不过尔尔,这几个文本框这么简单,何必费这么大的劲把它们包装成组件呢?呵呵,不知你注意到DOB这个文本框没有?它和其它几个有些不一样,它的右边多了一个小按钮,如果点击此按钮,出现的结果会让你瞠目结舌!
0_8c:~3r9OTechWeb-技术社区酷吧?如果你曾经是一个JSP程序员,你的脑海里马上会闪过这样一个念头:一定是用javascript做的! 如果你这样想的话,那你就大错特错了,因为本人的javascript还没达到这种水平,如果我告诉你完成这样一个组件,只需要在配置文件中加入通俗易懂的几个xml元素的时候,你是否会觉得这真的很神奇呢?
'W7e,w s:S8J)a;t N3m.e.C-M$p是的,这就是Tapestry的魅力所在,Tapestry主要设计者Howard Lewis Ship的目的就是最大限度地解放JSP程序员的劳动量,让他们有更多的时间花在客户的需求和程序的逻辑设计上,而不是花在和美工人员互相解决矛盾冲突上,你可能会急不可待的问:那我们是否可以动手试一试了呢?是的,当然可以,但在动手之前,我要先介绍一些关于tapestry的概念,并试着开发一个最简单的“hello,world”程序来让你熟悉一下它的配置。因为它是一个framework,如果你对它的结构不是很清楚的话,我想你肯定无法充分地利用它的。
&c(O(r0~1})g3}.I一个Tapestry组件一般称作JWC(Java Web Component),它能与其它JWC一起组合,生成实例,进行配置。比如你刚才看到的那个不可思议的组件就是一个DatePicker组件,刚才的那个页面是一个Page组件,Tapestry自带了很多的JWC组件,这些组件不仅仅只是GUI组件,还有可能是带控制功能的组件,比如foreach组件能够提供循环的功能,同时tapestry还提供了一个简单的方法来制作用户自定义的组件,所有的Tapestry应用的表示层都是由这些JWC构成的。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:36 资料 短消息 加为好友
一个简单的Hello,world程序 为了清楚地弄清tapestry的framwork构架,我们从最简单的”hello,world”开如,打开组件的暗箱来看一看JWC的内部结构。一个典型的JWC包括3个部分----一个HTML模板,一个XML格式的定义文件和一个或多个JAVA类,尽管一个简单的JWC可以仅仅是一个 HTML模板,但在本例中我们还是使用这三个部分来展示它的内部结构。tech.techweb.com.cn2^/i!R5s;@5e+f&m"`
先让我们看一下演示的结果:
,g;u-R(D0r)i%V.F
.C1N9r7F*VTechWeb-技术社区"}2E$U5k7l'b

图2  结果演示页面
由于我们知道Page也是一种JWC组件,因此让我们看一下这个Page组件是怎样构成的,首先,我们看一下它的HTML模板结构:TechWeb-技术社区:r5}0}'e7A*m;g;A6E4S
Home.html





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:36 资料 短消息 加为好友
<html>
,t m8R+z-T2[$}8s<head>
,r"N;T7w:stech.techweb.com.cn<title>Welcome to Tapestry!</title>
7f"i l:n0L(j%J程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛</head>6j0\!D+J6f7e"Y&W'~$J#m
<body>程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛8l9`-c$Y {0H.e8t(X7z
Hello <span jwcid="user">User Name</span>! Welcome to Tapestry!tech.techweb.com.cn-^(V4G4p&z4Z/O.Q
</body>
(n2F(h:j"s!z.J:H0^</html>TechWeb-技术社区 ~%^&x1a(G6i7K)x1y
tech.techweb.com.cn7Q3m2?;a1x5S7J
这里你可能看上去觉得非常眼熟,这不就是一个普通的HTML网页吗?且慢,如果你仔细观察,会发现span标签多了一个新的属性jwcid,这正是 tapestry设计的精妙之处,它的表现层可以说几乎是99%的纯HTML,只是增加了一个jwcid属性,jwcid=”user”在这里的意思是在<span> … </span>之间放置一个名为user的组件。这里要指出的是jwcid属性不仅仅可以放在span标签内,它可以放在任何的HTML标签内,比如<title>、<body>、<form>等等,至于为什么要选<span>的原因是<span>标签不影响网页的输出效果,这就大大方便了美工人员,他们可以直接使用frontpage或dreamwaver来进行设计,而不像JSP那样无法在frontpage或dreamwaver中正常显示。
7^&O*|,O,v
-N.`:|:t'w(b程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛也许你会问,网页上输出的用户名明明是Jack嘛,为什么HTML模板中是User name呢?这是因为当tapestry一旦发现某个HTML标签有jwcid的属性后,它就会把这个标签当做一个组件来看待,至于标签里面的东西到底是原样输出或忽略就要依照那个组件的类型而定了,在这里我们的user组件实际上是一种Insert类型的组件,因此会把<span>标签内的内容忽略掉,其实也可以直接写成<span jwcid=”user”></span>,效果也是一样的,只不过加了User name后就方便了美工人员的排版设计。程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛(\:{-Y6F+]8@-\+K8~
tech.techweb.com.cn+c$K-\*_"`"r*C
请注意,HTML模板有它自己的命名规范,它的文件名应该与Page组件的定义文件相同,只不过是扩展名为.html,与普通的web服务器一般都有一个index.html类似,tapestry也有自己的”index.html”,只不过它的名字不是”index.html”,而是 Home.html,那么这些模板文件究竟应该放在哪儿呢?很简单,放在当前应用的目录下面就行了,比如我们的应用是Welcome,那把它放在 webapps/Welcome目录下面就行了。
9S%~/R3^#S$KTechWeb-技术社区0S m%~-j'W*_"u
Home.pagetech.techweb.com.cn:g7h-X9l3O"E
!q(F&{#b(F+{6T%X
<?xml version="1.0" encoding="UTF-8"?>
#x2}*W2q1P;f.{8I0f;Q程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛<!DOCTYPE page-specification PUBLIC9k3Y7K4W&y-P%v0K
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
:E3q+`/B6I5C;e @:etech.techweb.com.cn"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛.R/p9e1u-]6Z6{)}0G1?4l
0U w8u#y-h4q)f
<page-specification class="demo.Home">
"b6e'I.H;]$Q)S"x'F"p<component id="user" type="Insert"> V-}'s3h6D)l4]
<binding name="value" expression="userName"/>
5x3|7I1y7R2Y3z4x0b"fTechWeb-技术社区</component>8i+V N!_4f/O'Q8}
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 {7m(~6A R3g3L/l
<context-asset name="$template" path="Home.html"/>
6j s4d m2p*n$X+t6w</page-specification>
&h;^#~&V1G.n*b*d/p*J:{7d,q&D.K2]1k5q*l3h
以上这个文件便是这个名为”Home”的Page组件的页面定义文件,它好像是一座桥,联系着HTML模板和JAVA类进行协同工作。这个定义文件 “Home.page”实际上就是一个xml文件,它的根元素是page-specification,它有一个名为class的属性,用来指示HTML 模板与哪个java类协同工作,在本例中为demo.Home这个类。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:37 资料 短消息 加为好友
Component元素是对HTML模板中引用的组件的定义,id属性名一定要与HTML模板中的jwcid一样,type指定了这个组件属于哪种类型,在本例中为Insert组件,Insert组件是Tapestry中的一个基本组件,它的作用是在HTML模板中插入指定的文本,待插入的文本的值由 Insert的value属性来决定,在本例中,value属性的表达式值是userName。你这时候可能会觉得越看越糊涂:那为什么最后运行结果会是 Jack呢?不要着急,关于这个我们马上就要详细地进行讲解。我们还是先看一下最后一个元素context-asset,这个元素是定义这个Page组件要用到的一些附加资源,比如图像、css格式文件等等之类的东西 现在我们开始认真地讲一下<binding name="value" expression="userName"/>这个元素的含义,由于HTML模板嵌入的是一个Insert类型的组件,而Insert组件的功能是插入一段文本到HTML模板中去,对于本例而言,或许可以直接地指定要插入文本的内容为“Jack”,但对一个实际的应用来说,往往是要从数据库从取出用户的名称,然后将该名称插入到HTML模板中去,那么就不能直接指定文本的内容了,怎么办呢?我们马上想到的办法是:指定一个JAVA类,通过 javaBean的属性方法来获得数据库中的用户名,就像jsp中的<jsp getProperty … />标签一样,不错,这的确是一个好方法,tapestry正是这样做的,因此<binding name="value" expression="userName"/>这个元素中的expression的值正是demo.Home这个JAVA类的一个属性,也就是说将 demo.Home这个类的userName属性绑定到Insert组件的value属性中去,而我们的创始人Howard Lewis Ship先生并没有重头对这个绑定的功能进行设计,因为在软件开发中有一句著名的话:”不要重复地发明同一个轮子“,这个绑定功能是由另一个开放源码的工具完成地---- Object Graph Navigation Library,简称OGNL(关于OGNL具体可以参考http://www.ognl.org )。其内部真正的转换如下图所示:
*T5{9Q#Z&^1{1aTechWeb-技术社区 l-G1b-`*U7F

图3   内部转换流程
其中,Insert这个JWC组件有一个名为value的属性,而我们在Home.page中将它与一个外部对像userName进行绑定,在程序真正运行的时候,HTML模板中的user组件读取demo.Home这个JAVA类的userName属性,然后通过OGNL工具对Insert组件的 value属性进行更新,最后user组件将更新后的值插入到模板当中。好了,这时候你应该明白了Insert组件是怎样取值的吧。 需要强调的是Page组件是一种特殊的JWC组件,它可以包含其它的JWC组件,但不能被其它的JWC组件所包含。除此之外,Page组件还有一些特殊的属性和功能,它也不能和其它组件进行组合而生成新的组件。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:37 资料 短消息 加为好友
组件的命名方式和HTML模板的命名方式有些不同,它可以以.page作为扩展名(如果是Page组件),或者以.jwc作为扩展名(如果是非 Page组件)。组件一般放在当前web应用的WEB-INF目录下面,以本例来说,我们的Home.page这个文件就应该放在 webapps/Welcom/WEB-INF目录下面。
${#s)c:f,U*gTechWeb-技术社区Home.java
&E$x1v8a-p*WTechWeb-技术社区
:V&a(~6l/r j%Vpackage demo;%P/Q;O!i,` H0j9l
import org.apache.tapestry.html.BasePage;
%A3w!E2_!h5}%Rpublic class Home extends BasePage {tech.techweb.com.cn'J5O3D1[:]#c#c"N!c
private String userName = "Jack";/^$V1r1r%r!|.P+d
%L-I(q:N8f0w
public String getUserName() {
)g.]+B9m%f0Z:\ u9q!^tech.techweb.com.cnreturn this.userName;
-s%D(@:v,f8|3q(V(T}
*h&I#w8k0Z*O5c)m)d1?程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛}





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:38 资料 短消息 加为好友
最后一部分便是我们的demo.Home这个JAVA类,它实际上就是一个普通的javaBean,唯一不同的就是它必须从BasePage类中继承。它的作用就是为HTML模板中的user组件提供文本信息的来源,在本例中我们简单的返回”Jack”,但实际上getUserName方法还可以从 JNDI、数据库、EJB中取得用户名。2L+I*A4Q't&a8v-~
TechWeb-技术社区,{/W/C$q7l-j
其实demo.Home不仅仅只是提供数据来源,它还可以实现表单组件的提交。Tapestry提供了2个基本类方便用户进行扩充,一个是 BasePage类(专用于Page组件),另一个是BaseComponent类(用于用户自定义组件)。通过继承这些组件,可以大大地减轻用户的编程量,从而把精力放到程序流程设计上去。
6N,c9k3N!R8Etech.techweb.com.cn3t,?"q%a4M8T,H6|4`)])t;g!k
demo.Home组件类的名称应该与Home.page中定义的名称一致,它一般放在当前web应用的WEB-INF/classes目录下,以本例来说,Home.class这个类应该放在webapps/Welcome/WEB-INF/classes/demo目录下面。-I2Q&b,d9D8`;\*I+W/n

7v7{6l/V2E*`:DWelcome.application
'h2g:T$E7t;q9]1s V#GTechWeb-技术社区
5r)J.K2K+a'@6O0?tech.techweb.com.cn<?xml version="1.0" encoding="UTF-8"?>8w)l:r/A0D8n8a
<!DOCTYPE application PUBLIC
8M7A*o'l;S2F7sTechWeb-技术社区"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
0k"~9y0N8l%JTechWeb-技术社区"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">!o/} J'k"]&I/P.H0~7\

;e-@5C$B#Z8@ m1@<application name="Tapestry Illustration 1">程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛5h+c3D5e0B;Z
<page name="Home" specification-path="Home.page"/>
'A8r"B8{(j/q3U*F</application>tech.techweb.com.cn'U+]5b"G9[4i
*a3M'N2g,d%A"s6l
以上这个文件是这个Tapestry应用的配置文件,它是以application作为根元素的,其中page元素指定了一个名为Home的 Page组件,它的文件名为Home.page,当然你也可以指定更多的page组件,这个配置文件就像是一个总装车间,把一个个page组件或其它的组件装配起来。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:39 资料 短消息 加为好友
关于这个配置文件的命名规范我们在前面已经讲过了,它一般放在WEB-INF目录下,在本例中它放在了webapps/Welcome/WEB-INF目录下面。
"a2e6]*N)g+g [
8_4H8Z7e!|$lweb.xml
:n&j*T!P m&x2b
7Y+d2_+w9R<?xml version="1.0"?>
8z%l:u&i-h.x<!DOCTYPE web-app PUBLIC
8I(d/c*P1L'U6v&M程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN";s,W3}:p2S#P
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
$s3q3A$n+a%L6}TechWeb-技术社区
"[,V5]5R#]6g4Gtech.techweb.com.cn<web-app>9i&O4~&P:z.y'f6z9c
<display-name>Tapestry Welcome Application</display-name>
'L6m0e)@ Q3R%y2N
+r,S8J)J-x1~<servlet>+k7T5\'L(z
<servlet-name>Welcome</servlet-name>程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛2~*D.G9f.X;N%i3u)I:p
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>)_!Q%h9};b0~/L
<load-on-startup>0</load-on-startup>:J&Y3D+s1h,i'h
</servlet>
0X$`3[ W"s&}8]&i6|TechWeb-技术社区
9E;o"G:O m"Y*I&A<servlet-mapping>!k8C$L$t!d4q)W
<servlet-name>Welcome</servlet-name>;q%h H7i.Z.m/y }
<url-pattern>/app</url-pattern>0g3t2l-~:d#n%h9K&d
</servlet-mapping>.o:f#J!I"H3?'l

9E:Y5}%X J0h<session-config>
)N+W3y1l'a5H"Btech.techweb.com.cn<session-timeout>15</session-timeout>TechWeb-技术社区'I'}7a9@4B.\ d
</session-config>
$D:k1F;{8Z程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1c$o)W$G)|(~7O7P+R!~
<welcome-file-list>
3t&?'M&P!~9E<welcome-file>index.html</welcome-file>
8c*L3L6M3J#r5x3^:RTechWeb-技术社区</welcome-file-list>tech.techweb.com.cn0V%b4~)Y5I!l
</web-app>3j8f,C1q0y1T6r9k

(a;r3G7g)y!`程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛这个文件相信所有的JSP/servlet开发员都非常熟悉了吧?在这个文件中我们定义了一个名为Welcome的servlet,它实际上就是 org.apache.tapestry.ApplicationServlet这个类,它的主要作用是对客户的请求进行包装,然后转发到各个page组件进行处理,当然如果你有特殊需要,也可以继承ApplicationServlet类(当然这种情况很少出现)。
.\:Z9I.@5y.y,`)s;m,E!^程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛tech.techweb.com.cn9c(k$O&_0b6R(f6x
其中<servlet-mapping>用来进行地址映射,相信servlet开发员应该都知道它的作用吧?我们把所有对于/app的请求全部转发给Welcome这个servlet进行处理,当然你也可以将/app换成其你自己的定义。最后我们打开一个IE浏览器,在地址栏中输入http: //localhost:8080/Welcome/app 就会看到结果。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:39 资料 短消息 加为好友
好了,现在我们就讲一下关于上面那个用户注册的例子吧。由于篇幅的关系,我就不把所有的配置文件一一罗列了,只摘录一些关键的配置。
8i)m8s(O-s2Ztech.techweb.com.cntech.techweb.com.cn8C$[*?-t&^7u'I"S
CustInfo.html$r'L+f;i&Z"q

+j)`9g _#f2d.p I'Y7T<html jwcid="@Shell" title="Welcome Page">*O)Y%x4I'F/^5b*r1{*V
<body jwcid="@Body">
&t([1H+B&L5U4?+K程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛<form jwcid="@Form" listener="ognl:listeners.submit">
1F&`:z9U-i"x-o(PCustomer Name: <input jwcid="custName" type="text"/>
:q1l1i2Q9E;L
+T(C5Z/U5['H1S3pDate-of-Birth: <input jwcid="dob" type="text" format="MMM dd, yyyy"/>
-P:b)h:b&w;O!R%o4K(Month DD, YYYY)0^,E(j-R1G/M5`-W j4q

3p:E&K-C$Z.O T<input type="submit" value="Submit"/>(G3D0N"@.E-|'m+H7F6V
</form>tech.techweb.com.cn&p(g4N$E#~5M9c
</body>
,G6B)G%n,e/O8a5M*k8`</html>
"c4`+l&b%C6j7_&zTechWeb-技术社区7N(C M'a2I"j
也许你看了上面这个文件不禁会问:为什么有的组件名称前面加了一个“@”?原因如下:tapestry由于是由众多组件组成的,其中一般的组件都要在其Page组件中用<component>元素进行定义,对于一些简单的或者无其它附加参数的组件来说就显得比较麻烦,因此tapestry提出了显式定义组件和隐式定义组件这个概念,显式定义是指明确地在Page组件中定义过的组件,隐式定义是指没有明确地在Page组件中定义的组件,都要在组件名字前加一个“@”。
5H0A+}2t){TechWeb-技术社区,G;M'D$b/{:t,x&C
这里有一个组件显得很特别:@Form组件,这个组件由于是隐式定义地,因此它的参数就直接在HTML模板中进行定义:listener= "ognl:listeners.submit",它表示当用户按下submit按钮后页面流程会交给当前Page组件类(即Welcome这个类)的 submit函数进行管理。





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
队长不是我
TW金牌会员
Rank: 6Rank: 6



UID 85672
精华 11
积分 1645
帖子 762
阅读权限 70
注册 2006-10-26
状态 离线
发表于 2008-7-29 09:39 资料 短消息 加为好友
下面我们再看一下它的Page组件的定义:
&y.W8c*N5^+@+_(j*T-_-@CustInfo.pagetech.techweb.com.cn&g4X#x!U-}(b

1h5w2d"f5\#U/S*_)j程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛<?xml version="1.0" encoding="UTF-8"?>
$x!K4Y'U7G$Z(Y1Itech.techweb.com.cn<!DOCTYPE page-specification PUBLIC+S5K&f+T0t9m1@2r3e%J5^
"-//Apache Software Foundation//Tapestry Specification 3.0//EN" 'm1V,G;Q3z2Q:?#f {
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
"|&N!b9}'l2M/o&["c<page-specification class="demo.Welcome">
#{:p"?*f"W7g!q1G Ftech.techweb.com.cn<property-specification name="custName" type="java.lang.String"/>
*K+J){']"r"b%[&ptech.techweb.com.cn<property-specification name="dob" type="java.util.Date"/>
#]-g4z,d6S)I F&?$ktech.techweb.com.cn<component id="custName" type="TextField">TechWeb-技术社区+z3i$^4i%i-S U:A
<binding name="value" expression="custName"/>TechWeb-技术社区+@-|,h4_5q-a6O
</component>tech.techweb.com.cn7Q;N8Z#w#j7U*W2b&z
<component id="dob" type="DatePicker">2p f2O(W-d1]$o
<binding name="value" expression="dob"/>+z*k9m$A M4R5F7O
</component>
9a)x)e.]!F(W J7`</page-specification>"Q!~1C$_-g!^#M-^

O/Q0m!c$`9~*a7|程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛其中值得关注的是dob这个组件,它的类型是tapestry核心组件库中的DatePicker组件,有了它,我们就可以生成先前那个不可思义的选择日期的界面了。
2v-p4A:|%J2b%@程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
'S'_'O4Z,O)P*S%r5jTechWeb-技术社区这里出现了一个新面孔:property-specification元素,它是干什么用的呢?还是先让我们看一下那个“hello,world”例子中的组件类的定义吧:程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛5a0W)f5e$l$g+d

-k.d7?;R7}!b)O4gtech.techweb.com.cnHome.java
.o%q"\3R9m#x#?&Y8D
.?/F4G5g$T;Bpackage demo;
:E/u+s*M9V#~%B0k9|2~import org.apache.tapestry.html.BasePage;
1S1_*O$u%T4Y5Otech.techweb.com.cnpublic class Home extends BasePage {)C0C:v.y%z$U6R
private String userName = "Jack";'U2D [1^ Z3A2Z-x3W2l

%N!C,g:a6O5}#h#d!Fpublic String getUserName() {
4a;];V:J(r)X!s2e"m3a7}-yreturn this.userName;tech.techweb.com.cn-x&d7a-?,d2g;_4W,W
}4u8\&[!m&S/t,f2_-T
}





我帖的视频全是转载,但是也很辛苦的,给点留言吧,做为辛苦费吧。。。我在这里感谢了
引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-12-3 07:03
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.067461 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP