科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道了解 Struts 框架的全新后代:Shale不是Struts(3)

了解 Struts 框架的全新后代:Shale不是Struts(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Shale 不是什么?Shale 不是打包好的、有编制好的文档并经过严格测试的产品,也没有附带自动安装程序和优雅的管理界面。那么 Shale 到底是什么呢?Brett McLaughlin 在本文中将揭开这个 Struts 后代的面纱。

作者:Brett McLaughlin 来源:IT专家网 2008年5月5日

关键字: 后代 框架 Struts java

  • 评论
  • 分享微博
  • 分享邮件
构建 WAR 文件

  如果使用的 servlet 引擎要求提供 WAR 文件,那么可以使用相同的 Shale starter 应用程序的构建文件,只需略微修改一下。由于还没有为这个 Shale 应用程序编写任何 Java 文件,当您请求一个 WAR 文件时,构建脚本将出现错误(在 build.xml 中有查找文件的 JavaScript 命令,但是没有找到任何文件)。为了修复这个问题,打开 build.xml 文件,找到以 “javadoc” 开头且如下所示的代码:

<!-- ===================== Generate Documentation ======================== -->
  <target         name="javadocs" depends="compile"
           description="Create JavaDocs">

    <mkdir         dir="${build.docs.dir}"/>

    <javadoc
            sourcepath="${src.java.dir}"
               destdir="${build.docs.dir}"
                author="false"
               private="true"
               version="true"
                source="${project.source}"
          packagenames="${project.package}.*"
           windowtitle="${project.name} (Version ${project.version})"
              doctitle="${project.name} (Version ${project.version})"
                bottom="${project.copyright}">
      <classpath refid="compile.classpath"/>
    </javadoc>

    <copy        todir="${build.docs.dir}">
      <fileset     dir="${src.java.dir}"
              includes="**/*.gif"/>
    </copy>

  </target>

  现在,注释掉 javadoc 任务,如下所示:

  <!-- ===================== Generate Documentation ======================== -->
  <target         name="javadocs" depends="compile"
           description="Create JavaDocs">

    <mkdir         dir="${build.docs.dir}"/>
<
    <javadoc
            sourcepath="${src.java.dir}"
               destdir="${build.docs.dir}"
                author="false"
               private="true"
               version="true"
                source="${project.source}"
          packagenames="${project.package}.*"
           windowtitle="${project.name} (Version ${project.version})"
              doctitle="${project.name} (Version ${project.version})"
                bottom="${project.copyright}">
      <classpath refid="compile.classpath"/>
    </javadoc>
-->
    <copy        todir="${build.docs.dir}">
      <fileset     dir="${src.java.dir}"
              includes="**/*.gif"/>
    </copy>

  </target>

  一旦开始为 Shale 应用程序开发 Java 代码,便不必这样做。不过对于现在,这样做可以解决上述问题。保存修改后的 build.xml 并运行 ant dist。Ant 编译和装配 starter 应用程序,并在 dist/ 目录中创建一个新的 WAR 文件。例如,我运行 ant dist 后得到一个 dist/first-shale-0.1.war 文件。现在可以将这个 WAR 文件复制到 servlet 引擎的 webapps/ 目录。

 测试安装情况

  如果完成了以上步骤,不管选择的安装路径是什么,都应该可以启动 servlet 引擎并通过地址 http://your.host.name/first-shale 访问 Shale 应用程序。例如,如果在本地机器上运行 Tomcat,那么最终可以访问的地址是 http://localhost:8080/first-shale。如果一切正常,那么应该可以看到如图 2 所示的简单页面:

点击放大此图片

  图 2. Shale starter 应用程序证明一切没问题

  看起来似乎做了这么多工作却所得甚少,但是要考虑到,通过打开并编辑一个简单的 build.properties 文件,可以避免大量繁杂的复制和配置工作。您将发现,从空白的 Shale starter 应用程序开始总是开发新的 Shale 应用程序最容易的方式。实际上,当在下一篇文章中开始开发 Shale 应用程序的时候,将使用空白的 starter 应用程序作为开始的基础。

  Shale 用例

  关于 Shale 的下载和安装就介绍到这里,不过我们还是再花点儿时间从 Shale 主下载站点下载 Shale 的用例 WAR 应用程序。找到一个文件名形如 shale-usecases-20060204.war 的文件。下载该文件,并将它放入 servlet 引擎的 webapps/ 目录,然后进入到这个 WAR。在我的系统上,访问 http://localhost:8080/shale-usecases-20060204/ 并得到如图 3 所示的屏幕:

  图 3. Shale 用例应用程序

  您应该花些时间来看看这个用例应用程序。它有关于 Shale 中 Validator 和远程报告等特性的很好的演示,并有一个简单的 Ajax 应用程序。通过浏览这些用例,您可以了解到即使是简单的 Shale 应用程序也可以做许多事情。

  不过这里要提一个忠告:有些用例仍在开发中,取决于您何时下载每晚构建,可能发现有些用例不能正常工作。不过总是可以晚些时候再下载这些用例应用程序,看看有些问题是否已经被修复。虽然存在这些小问题,但是用例应用程序仍然是取得对 Shale 的基本印象的一种好途径。

深入研究 Shale!

  大多数 Web 开发人员向来只是使用已有的框架(例如 Shale、Struts 或 Spring)来开发他们的 Web 应用程序,而没有做别的事情。当然这没有什么错,但是如果想理解一种框架以及它所涉及的技术,那么只能对框架本身做深入的研究。

  对于 Shale(当然也包括 Struts),通过查看框架的内部,您可以学到大量关于 servlet 和 Web 开发的知识。如果想在自己的项目中使用一些 Shale 依赖项,这样做还可以获得难以置信的帮助。如果您对通过 Java 应用程序进行日志管理感兴趣,那么通过 Shale 来熟悉 Apache Logging 项目比阅读任何文章都要有效得多。对于 Jakarta Commons BeanUtils、Chain 或 Digester 项目也是一样。这些都是很好的工具,对于开发人员很有用,所以花几个星期或几个月的时间探索一下 Shale 对于这些领域是一个很好的学习经历。

  由于本文是对 Shale 进行深入探讨的系列中的第一期,因此如果我不对几个对于 Shale 项目入门来说至关重要的方面进行讨论的话,就是不负责任了。

  亲密接触源代码

  不幸的是,关于 Shale 中涉及的开发过程的文档并不多,所以如果您想直接使用 Shale 源代码的话,需要用点儿技巧。一般来说,我这里给出的关于下载 Shale 并将它作为框架使用的说明也适用于下载 Shale 的源代码。每晚构建包含 Shale 的所有源代码,并且代码的每个目录中都有一个 build.xml 文件。

  需要将下载的 Shale 的根目录下的 build.properties.sample 文件复制到一个名为 build.properties 的文件中(去掉原始文件名尾部的 “.sample”)。清单 2 展示了这个文件的一个示例,为了简洁起见,这里省略了其中一些注释:

  清单 2. 示例 Shale 构建文件

# This file contains example property settings that you would use to customize
# your build environment to build the Struts Shale Library from
# source code.  To use this file, make a copy of it in "build.properties" and
# customize the values as required.

# Root directory into which you have unpacked the Shale Framework release.
root.dir=${basedir}

# Fully qualified pathname of the directory into which you have unpacked
# a binary distribution of the JavaServer Faces Reference Implementation
jsfri.dir=/usr/local/jsf-1_1_01

findbugs.outputFile=${root.dir}/find-bugs.html
lib.dir=${root.dir}/lib
jsf.home = ${lib.dir}/myfaces
jsf-api.jar = ${jsf.home}/myfaces-api.jar
jsf-impl.jar = ${jsf.home}/myfaces-impl.jar

# The absolute or relative pathname of the Apache Struts
# distribution
struts.home = /usr/local/jakarta-struts

spring.home=${lib.dir}/springframework
findbugs.home = /usr/local/findbugs-0.8.6

  为了与您的系统相匹配,需要更改这个构建文件中大部分的路径。默认情况下,${basedir} 指向运行 Ant 时所在的目录,因此如果是从下载的 Shale 的根目录下运行 Ant,那么就刚好不用改路径了。但是对于其他路径,应该改为适当的与系统相匹配的路径。例如,如果您的 JSF 参考实现在 c:/java/jsf-1_1_02 中,那么使用 jsfri.dir 目录所在的路径。大多数默认路径都适合于使用 MyFaces(请参阅 “MyFaces 还是 JavaServer Faces”),但是当然也可以使用 Sun 的 JSF 实现,并对这些路径作相应的更改。另外还需要设置 Struts、Spring(这是可选的,对于核心 Shale 框架来说不必要)和 FindBugs 项目的路径。

  Ant 登场

  设置好这些文件的路径后,就可以在 Shale 的根目录中运行 Ant。但是,首先应该运行 ant download-dependencies。您当然也已经注意到,Shale 有很多 依赖项,而通过使用 Ant 自动下载这些依赖项可以为您节省很多时间,也令您轻松不少。Ant 脚本还负责设置路径,以便使 Shale 与那些依赖项连接起来。还应该运行 ant copy-jsf-ri 来处理一些特定于 JSF 的任务(具体细节不必关心,因为 Ant 会为您打点一切)。

  在构建主 Shale 发行版之前,应该运行 ant clean 删除之前已有的构建后的代码。虽然这意味着整个构建时间会更长,但是可以确保所有代码将一致地构建。最后,运行 ant release,以便从头开始构建 Shale。当这个 Ant 脚本运行完成后(这要花一点儿时间),就可以得到一个完整的、从源代码构建的 Shale 发行版。

  关于邮件列表的只言片语

  开发源码项目几乎完全是通过电子邮件(再加上 Apache bug 跟踪数据库,在 参考资料 小节中有这方面的内容)来运作的。Shale 在这方面也是一样的,不过它仍然使用 Struts 的邮件列表。如果在使用 Shale 时有什么疑问,可以发送电子邮件到 user@struts.apache.org。但是当您开始开发真正的 Shale 内部组件时,应该将电子邮件发送到 dev@struts.apache.org。不管将电子邮件发送到哪里,都应该以 “[shale]” 开头,这样别人一下子就明白您是要问关于 Shale 的问题,而不是关于 Struts 的问题。预期在几个月后,当 Shale 开始成为独立的项目时,它也会有它自己的邮件列表。

  这里稍微提醒一下,尤其是在发送电子邮件到开发列表的时候:做好自己的工作,问题要有的放矢。那些飘忽不定、模棱两可或缺乏思想的邮件很可能不会收到回复。如果您到处发送 “我想学习 Shale,请给我发送一些例子应用程序” 之类的邮件,甚至还可能得到粗鲁的回答。虽然这种提醒看上去有些傻,但事实就是这样。开发列表中总是充斥着这一类的问题,这些问题都是不受欢迎 的。通常,花点儿时间认真地斟酌您的问题,解释一下您使用的平台和软件的版本,并说明您已经试过了一些常用的步骤。这样一来,您的请求才会得到尊重并受到欢迎,也就更容易得到答案。开发人员的列表并不是令人生畏的,但最起码这样做显得您尊重别人。

  结束语

  这个关于 Shale 的系列中的第一期文章说明,Shale 并不适合每一个人。Shale 没有提供一个打包好的、有编制好的文档并经过良好测试的产品,也没有附带自动安装程序和优雅的管理界面,这些都是很多 Web 开发人员期待 Tapestry 时代能提供的东西。虽然在以后版本的框架中会体现这些东西(除了完全打包),但目前 Shale(从 2006 年初起)仍在开发过程中,并且 Shale 站点也基本上将它称为处于 “alpha” 状态的项目。Shale 中使用的很多组件是稳定和成熟的,但 Shale 本身仍然很年轻。如果您不能接受一些麻烦和困惑,那么可能会想过一年左右再开始使用它。

  另一方面,如果您是一名对 Web 开发的前沿技术感兴趣的 Java 开发人员,那么真应该看看 Shale 项目。虽然安装 Shale 并使之工作要花费更多的精力,但是它完全有条件成为特别流行的 Web 开发框架。Shale 继承了 Struts,同时也提供了一些全新的东西,这本身就值得作一番调查。对于有兴趣成为开放源码项目中的一员的开发人员,Shale 也是值得投入精力的一个项目。

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐鎼佸磹妞嬪孩顐介柨鐔哄Т閻骞栧ǎ顒€濡肩紒鎰殜閺岋繝宕堕埡浣锋睏闂佸搫顑呴柊锝夊蓟閺囷紕鐤€閻庯綆浜炴禒鐐節濞堝灝鐏犻柕鍫熸倐瀵寮撮敍鍕澑闁诲函缍嗘禍鏍磻閹捐鍐€妞ゆ挶鍔庣粙蹇涙⒑鐠恒劌娅愰柟鍑ゆ嫹

    婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗坊閸嬫挾绱撳鍜冭含妤犵偛鍟灒閻犲洩灏欑粣鐐烘⒑瑜版帒浜伴柛鎾寸洴閹儳煤椤忓應鎷洪梻鍌氱墛閸楁洟宕奸妷銉ф煣濠电姴锕ょ€氼參宕h箛鏃傜瘈濠电姴鍊绘晶娑㈡煕鐎c劌濡介柕鍥у瀵粙濡歌閳ь剚甯¢弻鐔兼寠婢跺﹥娈婚梺鍝勭灱閸犳牠骞冨⿰鍫濈厸闁稿本绋撹ぐ瀣煟鎼淬値娼愭繛鍙壝悾婵堢矙鐠恒劍娈鹃梺鍓插亝濞叉牠鎮″☉銏$厱閻忕偛澧介惌瀣箾閸喐鍊愭慨濠勭帛閹峰懐绮电€n亝鐣伴梻浣规偠閸斿宕¢崘鑼殾闁靛繈鍊曢崘鈧銈嗗姂閸庡崬鐨梻鍌欑劍鐎笛呯矙閹寸姭鍋撳鐓庡籍鐎规洑鍗冲畷鍗炍熼梹鎰泿闂備線娼ч悧鍡涘箠鎼淬垺鍙忔い鎺嗗亾闁宠鍨块崺銉╁幢濡炲墽鍑规繝鐢靛О閸ㄦ椽鏁嬮柧鑽ゅ仦娣囧﹪濡堕崨顔兼闂佺ǹ顑呴崐鍦崲濞戙垹骞㈡俊顖濐嚙绾板秹鏌f惔銏e妞わ妇鏁诲璇差吋閸偅顎囬梻浣告啞閹搁箖宕版惔顭戞晪闁挎繂顦介弫鍡椼€掑顒婂姛闁活厽顨嗙换娑㈠箻閺夋垹鍔伴梺绋款儐閹瑰洭寮婚敐鍛婵炲棙鍔曠壕鎶芥⒑閸濆嫭婀扮紒瀣灴閸╃偤骞嬮敃鈧婵囥亜閺囩偞鍣洪柍璇诧功缁辨捇宕掑▎鎴濆濡炪們鍔岄幊姗€骞嗗畝鍕<闁绘劙娼х粊锕傛煙閸忚偐鏆橀柛鏂跨焸閹偤宕归鐘辩盎闂佸湱鍎ら崹鐢割敂閳哄懏鍊垫慨姗嗗墻濡插綊鏌曢崶褍顏€殿喕绮欐俊姝岊槼闁革絻鍎崇槐鎾存媴缁涘娈┑鈽嗗亝缁诲牆顕f繝姘亜缁炬媽椴搁弲锝夋偡濠婂啰效闁诡喗锕㈤幊鐘活敆閸屾粣绱查梺鍝勵槸閻楀嫰宕濇惔锝囦笉闁绘劗鍎ら悡娑㈡倶閻愯泛袚闁哥姵锕㈤弻鈩冩媴閻熸澘顫掗悗瑙勬礈閸犳牠銆佸鈧幃鈺呮惞椤愩倝鎷婚梻鍌氬€峰ù鍥х暦閸偅鍙忛柟鎯板Г閳锋梻鈧箍鍎遍ˇ顖炲垂閸岀偞鐓㈡俊顖滃皑缁辨岸鏌ㄥ┑鍡╂Ц缂佲偓鐎n偁浜滈柡宥冨妿閳藉绻涢崼鐔虹煉婵﹨娅e☉鐢稿川椤斾勘鈧劕顪冮妶搴′簼婵炶尙鍠栧畷娲焵椤掍降浜滈柟鍝勬娴滈箖姊洪幐搴㈢┛濠碘€虫搐鍗遍柟鐗堟緲缁秹鏌涢锝囩畼妞ゆ挻妞藉铏圭磼濡搫顫岄悗娈垮櫘閸撴瑨鐏冮梺鍛婁緱閸犳岸宕㈤幖浣光拺闁告挻褰冩禍浠嬫煕鐎n亜顏柟顔斤耿閺佸啴宕掑☉姘箞闂佽鍑界紞鍡涘磻閸℃ɑ娅犳い鎺戝€荤壕濂告煕鐏炲墽鈽夌紒妞﹀洦鐓欓柣鐔告緲椤忣參鏌熼悡搴㈣础闁瑰弶鎸冲畷鐔兼濞戞瑦鐝¢梻鍌氬€搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍌氫壕婵ê宕崢瀵糕偓瑙勬礀缂嶅﹪寮婚崱妤婂悑闁告侗鍨界槐閬嶆煟鎼达紕鐣柛搴ㄤ憾钘濆ù鍏兼綑绾捐法鈧箍鍎遍ˇ浼存偂閺囥垺鐓涢柛銉e劚婵$厧顭胯閸ㄤ即婀侀梺缁樓圭粔顕€顢旈崼鐔虹暢闂傚倷鐒︾€笛呮崲閸屾娑樜旈崨顓犲幒闂佸搫娲㈤崹娲偂閸愵亝鍠愭繝濠傜墕缁€鍫熸叏濡寧纭鹃柦鍐枛閺屾洘绻涜鐎氱兘宕戦妸鈺傗拺缂備焦锚婵洦銇勯弴銊ュ籍闁糕斂鍨藉鎾閳ユ枼鍋撻悽鍛婄叆婵犻潧妫楅埀顒傛嚀閳诲秹宕堕妸锝勭盎闂婎偄娲︾粙鎰板箟妤e啯鐓涢悘鐐靛亾缁€瀣偓瑙勬礋娴滃爼銆佸鈧幃銏$附婢跺澶�

    重磅专题
    往期文章
    最新文章