`
dudo
  • 浏览: 20814 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

新一代的Web表现层开发方法(欢迎讨论)

    博客分类:
  • JAVA
阅读更多

    目前基于javaweb开发框架数不胜数,而且其核心的功能都集中在web表现层的开发上,在这里我不打算对这些框架进行详细的分析和评论(因为针对这些框架的评论文章已经很多了),而是从另外一个角度提出一个新的Web表现层开发方法。

Web开发的大都有这样的体会,页面与逻辑总是纠缠不清,没有一个清楚地界限。有一些开发方法虽然可以将程序逻辑与网页分离开来,但是却带来的另外的复杂性,不是需要借助特定的tag,就是需要创建附加的模板文件,目前还没有一种框架(我所见到的,也许已经有了),能够真正实现页面与程序逻辑的完全分类,只是将这种关系转移了而已。

我所要描述的这种新的Web表现层开发方法的灵感来自于ORM技术。对象/关系映射技术将java对象映射至数据库,由ORM框架自动完成数据的crud操作。同样的,我们也可以将java对象映射至html文档,由框架来完成html文档的填充,开发人员只需要操作普通的java对象,即可实现以前由脚本或者模版完成的工作。我将这种技术称为odm(对象/文档映射)。之所以称之为odm而不是ohm(对象/html映射),是因为这种技术还可以应用于更广泛的场景,比如,java对象到xml的映射,到wml的映射等。大家可能会认为这并不是真正的新的技术,其实很多使用taglib和模版的框架中都在使用这样的方法。但是我所要描述的方法与这些方法在实现上很大的不同,主要在以下几个方面:

1 Java对象属性与html文档中的节点通过java对象属性名和html中节点的ID属性对应.

  使用这种方法保证了这种新的web开发方法不需要创建额外的模版,也不需要定义特定的taglib,最为主要的是将java对象,javascript脚本,css这几方统一命名,使得web开发的这几方面实现有机的统一,也使得这3个方面的相互操作成为可能。

2 程序开发人员所操作的只有java对象,没有任何的关于显示的循环、判断逻辑等。 

3 开发人员与美工完全可以独立的、并行的工作,不会出现垮领域操作。

<o:p> </o:p>关于如何将java对象属性影射到html文档节点,这里面有一套完整但却不需要特别记忆的映射规则,以后再写。

这个框架完成后将具有以下主要特性:

1 基于POJO

2 事件驱动;

3 原生的AJAX;

4 容易与现有的基于POJO的持久化框架集成,且更方便。

5 真正的所见即所得的页面开发

6 搜索引擎友好

7 无需复杂的配置文件,甚至不需要配置文件即可工作;

8 支持组件式开发;

9 真正的代码与页面分离。

……

还有更多的特性,比如可以将java属性映射到cooki,或者session变量甚至application级变量等,可以最大限对的简化web开发中的方方面面,可以说这个框架在开发效率以及可维护性方面将超越目前的其他所有的框架(有点说大了~_~)

   系统中一个html页面,对应一个页面类,它们通过一个约定来对应,不需要配置。

整个系统的模型有点像Delphi,熟悉delphi的朋友可能比较熟悉,在开发delphi GUI程序时,一个窗口对应一个dfm文件,而代码则放在pas文件中,dfm文件中的内容描述了窗口的gui组件的位置、颜色等显示信息,pas文件中则是事件处理代码。在webpilot中,html页面文件相当于delphi中的dfm文件,页面java类相当于delphi中的pas文件,页面java类中的事件处理函数相当于delphipas文件中的事件处理过程。

    

今天就写这么多了,写的比较零散,请大家见谅。这个方法我已经考虑了两年多了,已经有一个完整的实现思路,也已经有一个可运行的实现。工作一直比较忙,工作也与java不沾边,而且发现现在变懒了(^_^)。不过我还是希望能够实现一个真正可用东西。

文笔不好,有些地方可能说的不太清楚,请原谅。有什么疑问请提出,欢迎大家讨论。

分享到:
评论
23 楼 giscat 2007-01-22  
表现层真是越来越重要了,
以前一直搞服务器端,对客户端的东西不屑一顾,
现在大有长进,有时还能够帮美工MM做做美工,
N多难缠问题拿到客户端处理,相当之简洁完美方便
22 楼 SteveGY 2007-01-21  
<br/>
<strong>dudo 写道:</strong><br/>
<div class='quote_div'><font>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt;'><font size='3'><span style=''>    目前基于</span><span lang='EN-US'><font>java</font></span><span style=''>的</span><span lang='EN-US'><font>web</font></span><span style=''>开发框架数不胜数,而且其核心的功能都集中在</span><span lang='EN-US'><font>web</font></span><span style=''>表现层的开发上,在这里我不打算对这些框架进行详细的分析和评论</span><span lang='EN-US'><font>(</font></span><span style=''>因为针对这些框架的评论文章已经很多了</span><span lang='EN-US'><font>)</font></span><span style=''>,而是从另外一个角度提出一个新的</span><span lang='EN-US'><font>Web</font></span><span style=''>表现层开发方法。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt;'><font size='3'><span style=''/></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''>作</span><span lang='EN-US'><font>Web</font></span><span style=''>开发的大都有这样的体会,页面与逻辑总是纠缠不清,没有一个清楚地界限。有一些开发方法虽然可以将程序逻辑与网页分离开来,但是却带来的另外的复杂性,不是需要借助特定的</span><span lang='EN-US'><font>tag,</font></span><span style=''>就是需要创建附加的模板文件,目前还没有一种框架</span><span lang='EN-US'><font>(</font></span><span style=''>我所见到的,也许已经有了</span><span lang='EN-US'><font>)</font></span><span style=''>,能够真正实现页面与程序逻辑的完全分类,只是将这种关系转移了而已。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''/></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''>我所要描述的这种新的</span><span lang='EN-US'><font>Web</font></span><span style=''>表现层开发方法的灵感来自于</span><span lang='EN-US'><font>ORM</font></span><span style=''>技术。对象</span><span lang='EN-US'><font>/</font></span><span style=''>关系映射技术将</span><span lang='EN-US'><font>java</font></span><span style=''>对象映射至数据库,由</span><span lang='EN-US'><font>ORM</font></span><span style=''>框架自动完成数据的</span><span lang='EN-US'><font>crud</font></span><span style=''>操作。同样的,我们也可以将</span><span lang='EN-US'><font>java</font></span><span style=''>对象映射至</span><span lang='EN-US'><font>html</font></span><span style=''>文档,由框架来完成</span><span lang='EN-US'><font>html</font></span><span style=''>文档的填充,开发人员只需要操作普通的</span><span lang='EN-US'><font>java</font></span><span style=''>对象,即可实现以前由脚本或者模版完成的工作。我将这种技术称为</span><span lang='EN-US'><font>odm(</font></span><span style=''>对象</span><span lang='EN-US'><font>/</font></span><span style=''>文档映射</span><span lang='EN-US'><font>)</font></span><span style=''>。之所以称之为</span><span lang='EN-US'><font>odm</font></span><span style=''>而不是</span><span lang='EN-US'><font>ohm(</font></span><span style=''>对象</span><span lang='EN-US'><font>/html</font></span><span style=''>映射</span><span lang='EN-US'><font>)</font></span><span style=''>,是因为这种技术还可以应用于更广泛的场景,比如</span><span lang='EN-US'><font>,java</font></span><span style=''>对象到</span><span lang='EN-US'><font>xml</font></span><span style=''>的映射,到</span><span lang='EN-US'><font>wml</font></span><span style=''>的映射等。大家可能会认为这并不是真正的新的技术,其实很多使用</span><span lang='EN-US'><font>taglib</font></span><span style=''>和模版的框架中都在使用这样的方法。但是我所要描述的方法与这些方法在实现上很大的不同,主要在以下几个方面:</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''/></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 32.25pt; text-indent: -10.5pt;'><font size='3'><span lang='EN-US'><font>1 Java</font></span><span style=''>对象属性与</span><span lang='EN-US'><font>html</font></span><span style=''>文档中的节点通过</span><span lang='EN-US'><font>java</font></span><span style=''>对象属性名和</span><span lang='EN-US'><font>html</font></span><span style=''>中节点的</span><span lang='EN-US'><font>ID</font></span><span style=''>属性对应</span><span lang='EN-US'><font>.</font></span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 32.25pt; text-indent: -10.5pt;'><font size='3'><span lang='EN-US'><span style=''><font>  </font></span></span><span style=''>使用这种方法保证了这种新的</span><span lang='EN-US'><font>web</font></span><span style=''>开发方法不需要创建额外的模版,也不需要定义特定的</span><span lang='EN-US'><font>taglib</font></span><span style=''>,最为主要的是将</span><span lang='EN-US'><font>java</font></span><span style=''>对象</span><span lang='EN-US'><font>,javascript</font></span><span style=''>脚本,</span><span lang='EN-US'><font>css</font></span><span style=''>这几方统一命名,使得</span><span lang='EN-US'><font>web</font></span><span style=''>开发的这几方面实现有机的统一,也使得这</span><span lang='EN-US'><font>3</font></span><span style=''>个方面的相互操作成为可能。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><span lang='EN-US'><span style=''><font size='3'/></span></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 32.25pt; text-indent: -10.5pt;'><font size='3'><span lang='EN-US'><font>2 </font></span><span style=''>程序开发人员所操作的只有</span><span lang='EN-US'><font>java</font></span><span style=''>对象,没有任何的关于显示的循环、判断逻辑等。</span></font><span lang='EN-US'><span style=''><font size='3'> </font></span></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>3 </font></span><span style=''>开发人员与美工完全可以独立的、并行的工作,不会出现垮领域操作。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><span lang='EN-US'>&lt;o:p&gt;<font size='3'> </font>&lt;/o:p&gt;</span><font size='3'><span style=''>关于如何将</span><span lang='EN-US'><font>java</font></span><span style=''>对象属性影射到</span><span lang='EN-US'><font>html</font></span><span style=''>文档节点,这里面有一套完整但却不需要特别记忆的映射规则,以后再写。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 0.75pt;'><span style=''><font size='3'>这个框架完成后将具有以下主要特性:</font></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 0.75pt;'><span style=''><font size='3'/></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>1 </font></span><span style=''>基于</span><span lang='EN-US'><font>POJO</font></span><span style=''>;</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>2 </font></span><span style=''>事件驱动;</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>3 </font></span><span style=''>原生的</span><span lang='EN-US'><font>AJAX;</font></span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>4 </font></span><span style=''>容易与现有的基于</span><span lang='EN-US'><font>POJO</font></span><span style=''>的持久化框架集成,且更方便。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>5 </font></span><span style=''>真正的所见即所得的页面开发</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>6 </font></span><span style=''>搜索引擎友好</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>7 </font></span><span style=''>无需复杂的配置文件,甚至不需要配置文件即可工作;</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>8 </font></span><span style=''>支持组件式开发;</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span lang='EN-US'><font>9 </font></span><span style=''>真正的代码与页面分离。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><span lang='EN-US'><font size='3'>……</font></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><span lang='EN-US'><font size='3'/></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''>还有更多的特性,比如可以将</span><span lang='EN-US'><font>java</font></span><span style=''>属性映射到</span><span lang='EN-US'><font>cooki,</font></span><span style=''>或者</span><span lang='EN-US'><font>session</font></span><span style=''>变量甚至</span><span lang='EN-US'><font>application</font></span><span style=''>级变量等,可以最大限对的简化</span><span lang='EN-US'><font>web</font></span><span style=''>开发中的方方面面,可以说这个框架在开发效率以及可维护性方面将超越目前的其他所有的框架</span><span lang='EN-US'><font>(</font></span><span style=''>有点说大了</span><span lang='EN-US'><font>~_~)</font></span><span style=''>。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt; text-indent: 21.75pt;'><font size='3'><span style=''/></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'><font size='3'><span lang='EN-US'><span style=''><font>   </font></span></span><span style=''>系统中一个</span><span lang='EN-US'><font>html</font></span><span style=''>页面,对应一个页面类,它们通过一个约定来对应,不需要配置。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 21.75pt;'><font size='3'><span style=''>整个系统的模型有点像</span><span lang='EN-US'><font>Delphi</font></span><span style=''>,熟悉</span><span lang='EN-US'><font>delphi</font></span><span style=''>的朋友可能比较熟悉,在开发</span><span lang='EN-US'><font>delphi GUI</font></span><span style=''>程序时,一个窗口对应一个</span><span lang='EN-US'><font>dfm</font></span><span style=''>文件</span><span lang='EN-US'><font>,</font></span><span style=''>而代码则放在</span><span lang='EN-US'><font>pas</font></span><span style=''>文件中,</span><span lang='EN-US'><font>dfm</font></span><span style=''>文件中的内容描述了窗口的</span><span lang='EN-US'><font>gui</font></span><span style=''>组件的位置、颜色等显示信息,</span><span lang='EN-US'><font>pas</font></span><span style=''>文件中则是事件处理代码。在</span><span lang='EN-US'><font>webpilot</font></span><span style=''>中,</span><span lang='EN-US'><font>html</font></span><span style=''>页面文件相当于</span><span lang='EN-US'><font>delphi</font></span><span style=''>中的</span><span lang='EN-US'><font>dfm</font></span><span style=''>文件,页面</span><span lang='EN-US'><font>java</font></span><span style=''>类相当于</span><span lang='EN-US'><font>delphi</font></span><span style=''>中的</span><span lang='EN-US'><font>pas</font></span><span style=''>文件,页面</span><span lang='EN-US'><font>java</font></span><span style=''>类中的事件处理函数相当于</span><span lang='EN-US'><font>delphi</font></span><span style=''>中</span><span lang='EN-US'><font>pas</font></span><span style=''>文件中的事件处理过程。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'><span lang='EN-US'><span style=''><font size='3'>     </font></span></span></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'><font size='3'><span style=''>今天就写这么多了,写的比较零散,请大家见谅。这个方法我已经考虑了两年多了,已经有一个完整的实现思路,也已经有一个可运行的实现。工作一直比较忙,工作也与</span><span lang='EN-US'><font>java</font></span><span style=''>不沾边,而且发现现在变懒了</span><span lang='EN-US'><font>(^_^)</font></span><span style=''>。不过我还是希望能够实现一个真正可用东西。</span></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'><font size='3'><span style=''/></font></p>
<p class='MsoNormal' style='margin: 0cm 0cm 0pt 21pt; text-indent: 11.25pt;'><span style=''><font size='3'>文笔不好,有些地方可能说的不太清楚,请原谅。有什么疑问请提出,欢迎大家讨论。</font></span></p>
</font></div>
<br/>
<br/>
<br/>
<br/>
<div style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'><strong>“词汇疲劳”。</strong>楼主已经写了一堆似是而非的东西,唯一看的出来的是,楼主曾经是delphi的开发人员,并且试图以过去的经验来解决java web开发过程中遇到的一些问题。有这样的想法也无可非议,但,目前世界上真正实现了这一堆功能的,只有ASP.NET,在具有强大的IDE的支持下,这样的一种implementation才可以称为是effective的。甚至JSF,离这一目标还有很遥远的距离。</div>
<div style='margin: 0cm 0cm 0pt 21pt; text-indent: 0.75pt;'>我不常来这里,我也没有评分的爱好,不过要是我可以评分的话,我投票是“新手帖”</div>
21 楼 JavaInActoin 2007-01-18  
楼主看一下JSF吧,不要瞎忙乎了
20 楼 qy33 2007-01-18  
studying...
19 楼 过河卒 2007-01-18  
期待实际的例子!学习中。。
18 楼 dudo 2007-01-18  
比wicket的开发更简单,目前看到的只有Tapestry 5有点类似,但是比Tapestry 5将更简单。


  这几天比较忙,本来要放一个例子上来,一回到家就忘记了,今天晚上贴一个例子,能更明白些。
17 楼 wxwdt 2007-01-18  
就是wicket就是这种思想!!!
16 楼 flyingbug 2007-01-17  
楼主说的是wicket吧?
15 楼 amozon 2007-01-17  
感觉楼主想做的和zk有相似之处
14 楼 dudo 2007-01-17  
billyu 写道
看了下,其实这个思想就是xmlc的思想封装吧,http://www.enhydra.org/ 实现的很好啊,只是用起来还是有些问题的。

忘了贴一个地址:

可以参看这个比较老一点的文章

http://www-128.ibm.com/developerworks/cn/linux/l-enhydra/index.html



完全不一样,不需要生成dom树,效率会高很多,而且更直观,就像操作持久类一样。
13 楼 billyu 2007-01-17  
看了下,其实这个思想就是xmlc的思想封装吧,http://www.enhydra.org/ 实现的很好啊,只是用起来还是有些问题的。

忘了贴一个地址:

可以参看这个比较老一点的文章

http://www-128.ibm.com/developerworks/cn/linux/l-enhydra/index.html

12 楼 giscat 2007-01-17  
表现层跑完龙套,果然要唱主角了,
11 楼 dudo 2007-01-17  
<br/>
<strong>AllenYoung 写道:</strong><br/>
<div class='quote_div'>你说的这个我怎么感觉和基于组件编程有些象呢?比如普元EOS这样的东西,就是把一个对象实体映射到数据库、xml还有网页,只不过它用的是source code生成,而你现在用别的?<br/>
<br/>
我觉得所有现在所谓的新开发方法,比如GWT,当然还有你提出的这个模型,都有一个问题,就是如何与现有的技术集成。你说所有的东东(除了美工)都在Java中写,那我要用一些第三方的Ajax库怎么办?比如我要用dhtmlXGrid和DWR,怎么办呢?当然,如果你足够牛,能在你的框架内提供所有第三方类库的替代品或以Java为表现形式的整合方式,那倒是可以考虑使用你的模型。<br/>
<br/>
其实我一直在关注GWT类似的东西,很多人都说它好,从编程模型上看确实也挺新鲜的,但是我怎么把它和其他类库一起使用呢?这个是所有新编程模型都要面对的问题。<br/>
<br/>
另外,还有一个恶心的遗留代码问题。你的新模型只能用来开发新程序,不能用来改善遗留系统,除非你提供一个从HTML到Java的转换工具(或类似的机制)。当然,用恶心的遗留代码来刁难新模型,本身就不是太应该的,哈哈。</div>
<p><br/>
<br/>
to <strong>AllenYoung:</strong></p>
<p>1 我所讲的框架可以基于组件编程,但并不止局限于组建编程;</p>
<p>2 这个框架与其他技术的集成,自然会留有接口。目前需要集成的只是第三方的Ajax库,有于这个框架只是一个web表现层的开发框架,所以后台业务处理使用什么技术,使用者完全可以自己处理。当然为了使更加方便还是要提供一些措施来处理这些问题。</p>
<p>3 遗留代码的改造问题历来都是一个头疼的问题,并不能一概而论那个框架不能改造遗留系统。由于这个框架只是一个web表现层的开发框架,所以只要以前的系统是分层开发,改造起来都不回太复杂。</p>
<p>下面我会给出一个简单的例子作一个示例.</p>
<p> </p>
10 楼 歆渊 2007-01-16  
galaxystar 写道
Book/byISBN/13-978-0201485677
这种方式也有一个缺陷,该参数key必须是双方协定好的!

key是指哪一部分?
用参数的话就不需要协定了么?
9 楼 galaxystar 2007-01-16  
Book/byISBN/13-978-0201485677
这种方式也有一个缺陷,该参数key必须是双方协定好的!
8 楼 歆渊 2007-01-16  
如果遗留系统都只能保留, 不知道现在还有多少人在写 COBOL ...

BTW. JE = JavaEye
7 楼 AllenYoung 2007-01-16  
你说的这个我怎么感觉和基于组件编程有些象呢?比如普元EOS这样的东西,就是把一个对象实体映射到数据库、xml还有网页,只不过它用的是source code生成,而你现在用别的?<br/>
<br/>
我觉得所有现在所谓的新开发方法,比如GWT,当然还有你提出的这个模型,都有一个问题,就是如何与现有的技术集成。你说所有的东东(除了美工)都在Java中写,那我要用一些第三方的Ajax库怎么办?比如我要用dhtmlXGrid和DWR,怎么办呢?当然,如果你足够牛,能在你的框架内提供所有第三方类库的替代品或以Java为表现形式的整合方式,那倒是可以考虑使用你的模型。<br/>
<br/>
其实我一直在关注GWT类似的东西,很多人都说它好,从编程模型上看确实也挺新鲜的,但是我怎么把它和其他类库一起使用呢?这个是所有新编程模型都要面对的问题。<br/>
<br/>
另外,还有一个恶心的遗留代码问题。你的新模型只能用来开发新程序,不能用来改善遗留系统,除非你提供一个从HTML到Java的转换工具(或类似的机制)。当然,用恶心的遗留代码来刁难新模型,本身就不是太应该的,哈哈。
6 楼 AllenYoung 2007-01-16  
complystill 写道
好像现在的JE就是类似的形式, 不知道是RoR的传统还是JE自创, 反正觉得这样会比Servlet传统的模式要好.

楼主说已经有可以实现的例子了, 希望能贴一些简单直观的片段出来看看.


JE是啥...就这么两个字母,google都难...
5 楼 歆渊 2007-01-16  
我很少写Web页面, 不过在 URL 映射方面有些可能和楼主类似的想法, 比如用
/Book/byISBN/13-978-0201485677

代替
/showProducts.do?class=Book&qn=ISBN&qv=13-978-0201485677


/TShirt/bySize/XL

代替
/showProducts.do?class=TShirt&qn=size&qv=XL


这样就可以直接映射到处理类的方法上, 比如:
public class Product implements WebModel
{
  public WebModel create(Env env, WebPath path, WebParams params)
  {
     String type = path.head();
     return env.getFactory().create(type, params);
  }
}

public class Book extends Product
{
  public WebModel byISBN(Env env, WebPath path, WebParams params)
  {
     List<Book> books = env.getDAO().query(this.getClass(), 
                        "ISBN = ?", Integer.parseInt(path.head()));
     return books.size() > 0 ? books.iterator().next() : null;
  }
}

public class TShirt extends Product
{
  public WebModel bySize(Env env, WebPath path, WebParams params)
  {
     List<TShirt> shirts = env.getDAO().query(this.getClass(), 
                           "size = ?", path.head());
     return books.size() > 0 ? shirts.iterator().next() : null;
  }
}



好像现在的JE(JavaEye)就是类似的形式, 不知道是RoR的传统还是JE自创, 反正觉得这样会比Servlet传统的模式要好.


楼主说已经有可以实现的例子了, 希望能贴一些简单直观的片段出来看看.
4 楼 lighter 2007-01-16  
对于一大堆的理论通常不感兴趣,我最喜欢看到实例,源代码后,再去看一下别人说得理论是否确实如此....

相关推荐

    Java Web服务开发

    内容简介:本书全面深入地探讨了下一代分布式计算技术—— Web服务,深入透彻地阐述了如何使用Java实现和部署Web服务,同时也全面介绍了与之相关的基础知识。在详细介绍了Web服务之后,本书还引导您探讨Web服务体系...

    目 录关键词本文是一篇讨论基于Web的数据库管理的本科毕业论文,它详细地讲述了开发一个基于Web的通用BBS(Bullitin Board Syste统所用到的技术和方法。其中运用了ASP技术(Avtive Server Page)、ADO技术(ActiveX Data Object)、MS Access数据库技术、RegExp技术(Regular Expression 正则表达式)、VBScript及JavaScript脚本语言技术等等,并从几个不同的方面来对上述技术的实现方法进行了讨论。

    传统的单机版应用软件正在逐渐退出舞台,取而代之的是支持网络、支持多种数据信息(多媒体)的新一代网络版应用软件,而目前网络版软件中似乎存在着两种不同的趋势,一种是称为客户端——服务器的C/S结构应用系统,...

    html5高级程序设计

    逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、Web Workers、Storage等APⅡ的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的核心...

    android web高级应用编程随书代码

    讨论HTML5 的Canvas、Geolocation 、Communication、WebSocket、Forms、Web Workers、Storage 等API 的使用, 辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web 标准所涵盖的核心...

    [HTML5高级程序设计]

    逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、Web Workers [1] 、Storage等API的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的...

    Pro_HTML5_Programming_2nd_Edition

    逐一讨论了html5 的canvas、geolocation 、communication、websocket、forms、web workers、storage 等api 的使用, 辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代web 标准所涵盖的...

    HTML5高级程序设计

    逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、WebWorkers、Storage等API的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的核心技术...

    《HTML5高级程序设计》(源代码)

    逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、Web Workers、Storage等APⅡ的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的核心...

    HTML5高级程序设计,第2版(Pro HTML5 Programming,2nd Edition)

    逐一讨论了html5 的canvas、geolocation 、communication、websocket、forms、web workers、storage 等api 的使用, 辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代web 标准所涵盖的...

    asp.net知识库

    Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的MasterPage技术) Tool Tip 示例(FILTER版) Tool Tip示例 (htc版) 一个.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及...

    精通Dojo 中文版PDF版(高清)

    Doio是一个功能强大的面向对象开源JavaScript工具包,它为开发新一代Web程序提供了一套完整的小部件和一些特效,得到了IBM、Sun、Zend等公司的大力支持。 本书是Dojo之父Alex Russell与人编著的一部Dojo权威之作,...

    ASP.NET 2.0 跟我一起学Visual.Studio2005 1/9

    作为新一代的Web 应用的开发工具,ASP.NET 2.0针对ASP.NET 1.x作了大量的优化和改进。除了利用到了DOT NET 2.0的新特性之外,ASP.NET 2.0在内部编译模型上也做了较大的改进,本课程将围绕ASP.NET编译模型作一个全面...

    ASP.NET 2.0 跟我一起学Visual.Studio2005 2/9

    作为新一代的Web 应用的开发工具,ASP.NET 2.0针对ASP.NET 1.x作了大量的优化和改进。除了利用到了DOT NET 2.0的新特性之外,ASP.NET 2.0在内部编译模型上也做了较大的改进,本课程将围绕ASP.NET编译模型作一个全面...

    091_《Delphi6实务经典》

    Delphi 6是一个功能强大且高效的快速应用程序开发工具,它可协助您快速且容易地开发各种新一代的电子商务应用系统。Delphi的BizSnap运用Web Service技术轻松地整合企业与企业(B2B Business to Business)之间的信息...

    HTML5程序设计(第2版).[荷]Peter Lubbers(带详细书签).pdf

    逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、WebWorkers、Storage等API的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的核心技术...

    数据分析和处理的计算机方法-研究论文

    本章讨论的问题既涉及技术发展,也涉及这种发展对数据处理能力(包括新一代处理器、外设)的影响,以及新兴的数据处理新概念(云计算)。 作者希望本书能够帮助读者理解所讨论的问题,并为继续探索数据分析的方法和...

    C#微软培训资料

    &lt;&lt;page 1&gt;&gt; page begin==================== 目 目目 目 录 录录 ... 1.1 Microsoft.NET——一场新的革命.4 ... 11.1 方法的声明.124 ... 11.2 方法中的参数.125 ...这一天 微软公司正式推出了其下一代...

    基于ASP的辅导教学管理系统(说明报告+源代码+答辩PPT)

    传统的单机版应用软件正在逐渐退出舞台,取而代之的是支持网络、支持多种数据信息(多媒体)的新一代网络版应用软件,而目前网络版软件中似乎存在着两种不同的趋势,一种是称为客户端——服务器的C/S结构,这类软件...

Global site tag (gtag.js) - Google Analytics