<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jiandeh</title>
    <description>这个世界的美丽在于变化，而一个人的美丽在于奋斗。</description>
    <link>http://jiandeh.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Windows下Ruby on Rails安装</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/170957" style="color:red;">http://jiandeh.javaeye.com/blog/170957</a>&nbsp;
          发表时间: 2008年03月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天为了安装好Ruby on Rails 折腾了一下午。我也是刚开始学习ruby，为了配置好安装环境在网上找了不少资料。很多人的安装说明不是很清楚容易对初学者造成困惑。于是乎自己好好研究了下手动安装的方式，成功后就赶紧乘着自己对过程比较清晰整理了下。希望初学者们可以更加顺利的搞定。 <br />下面我就详细介绍我自己手动安装的过程，使用的版本都是最新下载的(作者安装的时间2007-3-7) <br />大家都知道要安装Ruby on Rails 首先还是要下载Ruby http://www.ruby-lang.org/en/downloads/(在这个地址中找到windows下的安装程序Ruby 1.8.5 One-Click Installer 按照我写这文章的时间这个是最新版本ruby1.8.5) <br />然后到http://rubyforge.org/frs/?group_id=307 下载rails。朋友们找到这个网站会发现rails 提供几个下载我用的版本是1.2.2 里面有 <br />REL 1.2.2 2007-02-06 00:57 <br />rails-1.2.2.gem 165 KB 3,292 Any .gem (RubyGem) <br />rails-1.2.2.tgz 2.19 MB 1,976 Any .gz <br />rails-1.2.2.zip <br /><br />.gem 文件是ruby的安装文件。推荐大家下载这个。我们可以安装ruby以后使用ruby来安装rails。 <br />Ok，我们下载好了rails-1.2.2.gem 现在开始安装吧 <br />首先安装最前面我们下载的ruby185-24.exe 自己选定安装路径。我安装在c:\ruby. <br />安装完毕后，我们运行windows下开始—运行输入cmd 打开命令行窗口。 <br />输入 ruby – v 看到了什么？ <br />ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] <br />这个是ruby的版本号，你成功安装了ruby <br />接下来我们安装rails，我将rails-1.2.2.gem放在c盘根目录下方便我运行，你可以找到你放置的目录运行 <br />cmd输入C:\>gem install rails-1.2.2.gem <br />你会发现出错了，无法正确安装rails 那是因为你少了东西，看看提示是什么？ <br />Rails requires actionsupport=1.4.1 <br />这个是你的rails需要安装一些必要的库，这个对版本的要求很严格。什么意思呢，就是说你的ruby版本不一样，rails版本不一样所需要的库文件版本也就不一样。怎么确定自己需要的版本呢。最好的办法就是按照错误提示的版本去一个一个下载你要的版本。 <br />当你安装了rails需要的activesupport-1.4.1后再次运行gem install actionmailer-1.3.2.gem还是会报错。 <br />这时候提示需要activerecord-1.15.2你就如此跟着提示下载所需的。 <br /><br />我这里使用的是ruby1.8.5 ,rails 1.2.2 需要的库文件有： <br />activesupport-1.4.1 <br />activerecord-1.15.2 <br />actionpack-1.13.2 <br />actionmailer-1.3.2 <br />acion web service-1.2.2 <br />我看到别人安装时候还需要一个rake-0.7.0.gem (我还没有用到这个就成功了) <br />谁知道告诉一下谢谢，毕竟我也是个初学者。 <br />下载上面说的库文件到这个网站http://rubyforge.org/ 在网站上面的搜索里面可以选择搜索项目 <br />software/group 输入要搜索的名称例如 activesupport 就可以找到自己需要的东西。一样，下载.gem文件就够了。然后在cmd中输入gem install activesupport-1.4.1.gem。 <br />同样方法安装好每个文件后。运行 gem install rails-1.2.2.gem 显示成功后输入 rails –v <br />如果显示了版本就表示你rails安装成功。 <br />打开浏览器在地址中输入http://localhost:3000 发现不行哦，那是因为还没好呢。 <br />Ruby 和 Rails 都安装成功了，下面要创建自己的新项目还有启动服务。 <br />在cmd中输入 <br />rails path/to/your/new/application 创建一个新的项目。 <br />ruby path/to/your/new/application/script/server 启动服务。 <br />项目由第一个命令创建。你会发现你的安装根目录下生成了一个新的path文件夹里面的结构就如你输入的一样是 to/your/new/application。然后再由第二个命令启动服务。这样你就可以再试试看http://localhost:3000。如果你看到了网页内容恭喜你。终于成功了。 <br />你可以自己定义自己的项目，比如我运行rails pa /new/app 一样可以创建自己定义的项目目录。 <br />启动服务就要用ruby pa/new/app/script/server 就好了。 <br />这个是今天的所得。希望大家能迅速的安装好自己的ruby on rails 偶还会继续学习研究。
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/170957#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 13 Mar 2008 21:02:08 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/170957</link>
        <guid>http://jiandeh.javaeye.com/blog/170957</guid>
      </item>
      <item>
        <title>在windows上面使用 Apache 部署Ruby On Rails</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/170596" style="color:red;">http://jiandeh.javaeye.com/blog/170596</a>&nbsp;
          发表时间: 2008年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大体思路是安装一个apache监听到8080端口，然后利用apache转向到mongrel上就ok了。说说具体的步骤。<br /><br />首先是从网上下载windows版本的ruby，安装，记得要装gem哦。 <br />安装rails，mongrel，和mongrel_servicegem install rails <br />gem install win32-service <br />gem install mongrel <br />gem install mongrel_service <br />准备 ROR 程序，我就已经ok的山大路程序 <br />把 ROR 程序添加成windows服务<br />mongrel_rails service::install -N myapp -c c:\myapp -p 4000 -e production<br />你也可以使用mongrel_rails service::remove -N myapp 去删除他。<br />现在注册成服务你就可以在控制面板、管理工具、服务里面管理网站了，设置成自动启动就ok了。 <br />安装apache，选择使用端口8080的那个选项就ok了，防止和iis冲突了。不过下面要修改httpd.conf文件，取消一下三行的注释。<br />LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so <br />在httpd.conf最后加上proxy pass的设置<br />ProxyPass /myapp http://127.0.0.1:4000/ <br />ProxyPassReverse /myapp http://127.0.0.1:4000/<br />这样就可以使用http://127.0.0.1:8080/myapp来访问了。不过有个问题，就是你的图片和css之类的都会因为路径问题而无法显示。解决办法在javaeye里面看到一个，下面给出代码，还是在httpd.conf的最后添加几行代码，当然上面的proxy的要删除。<br /><br />ProxyRequests Off        <br />&lt;Proxy balancer://myCluster> <br />  BalancerMember http://localhost:4000        <br />  BalancerMember http://localhost:4001        <br />&lt;/Proxy> <br /><br />&lt;VirtualHost *:8080> <br />  ServerName www.cpu123.com        <br />  DocumentRoot d:/sdroad/public        <br />  ProxyPass /images !        <br />  ProxyPass /stylesheets !        <br />  ProxyPass /javascripts !        <br />  ProxyPass / balancer://myCluster/        <br />  ProxyPassReverse / balancer://myCluster/        <br />  ProxyPreserveHost on        <br />&lt;/VirtualHost>
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/170596#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Mar 2008 17:21:19 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/170596</link>
        <guid>http://jiandeh.javaeye.com/blog/170596</guid>
      </item>
      <item>
        <title>20080310操作</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/169840" style="color:red;">http://jiandeh.javaeye.com/blog/169840</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          短线股： <br />600571 买入 9.76 100 <br />持有股： <br />600117 1300 <br />601111 400 <br />000576 200 <br />002021 200 <br />600571 100<br />重点跟踪股票： <br />600319 亚星化学 10.5以下介入 高位换手率大，观望。<br />000705 浙江震元 10.5以下介入<br />000859 国风塑业 9左右介入<br />000788 西南合成 9.5以下介入<br />600078 澄星股份 15以下 到买入价，可惜没子弹。<br />总结： 大盘再次新低，全仓主动买套，等待反弹。
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/169840#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Mar 2008 15:26:51 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/169840</link>
        <guid>http://jiandeh.javaeye.com/blog/169840</guid>
      </item>
      <item>
        <title>Flex新手学习指南</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/165949" style="color:red;">http://jiandeh.javaeye.com/blog/165949</a>&nbsp;
          发表时间: 2008年02月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Flex新手学习指南<br /><br />http://weiwu83.javaeye.com/blog/142955<br /><br />常常看到有人问,初学者该怎么学习Flex,我该从哪里入手?我每次都很想耐心的回答这个问题,但还是因为想说的内容太多,反而觉得那时候说肯定会漏掉一些重要的东西和步骤,所以没说。趁现在休息的时间,给自己一点思考,希望写出的东西也能更全面一点。 <br /><br /><br />Macromedia Flex 2.0 Explorer <br /><br />此玩意称之为Flex Component Library, 虽然说这版本还是Flex2.0Beta3的版本, 但是如果Flex3.0还没到来, 我认为这东西还是Flex的初学者们必看的, 它让我们能知道Flex给我们提供了什么样的模板(为什么称为模板, 我想这是因为其实这些控件我们都可以亲手把它给创造出来, Adobe只是提供了平常常用的稳定的控件, 我们不用每次都写而已, 但说实话, 就算是大公司写的东西, BUG实在很多, 也许就单独一个而言,它是满好的,但N多东西结合在一起的时候,我会常常叫OMG)。 <br />Flex Component Library缺少了Chart这一类, 但是这东西我想你要用到它的时候你再去看也不迟, 我建议Flex Component Library中的Effects, States, Transitions, Printing可以滤过, 因为对于新人来说, 看完其它的东西已经足够了。 在看完Flex Component Library的内容之后, 我希望大家都能把源码放到自己机器上跑一跑, 自己写一写。 问到为什么的时候, 你只要记住内容就可以了, 不用再追问下去。 <br /><br /><br />Adobe Flex 2 Component Explorer <br /><br />名字很象吧, 但内容就不一样了, 在学完以Macromedia为名义的Flex 2 Component Explorer之后, 我们再学学"新东家"Adobe的Flex 2 Component Explorer。 做法跟上面一样, 所做的我想就是保持好心态。 <br /><br /><br />Demo <br /><br />我希望各位的第一个Demo是一个Application+TitleWindow, 功能很简单, 在Application上有个DataGrid, 把里面选中的值传给TitleWindow里的DataGrid, DataGrid有添加, 修改, 删除的操作。如果希望难度加打点？加上httpService怎么样？要么Remote？不用心急，这些都可以放下。<br /><br /><br />Flex Style Explorer v2.0.1 <br /><br />想自己的画面好看一点, 那就来看看Adobe给我们提供了的工具。 如果还觉得不满意呢, 我们的Flexer--Jason Hawryluk自己写了个Flex 2 Primitive Explorer, 去看看? 如果你要更好看, 那你就去学CSS或者scale9。 <br /><br /><br />Create Applications <br /><br />Create Application <br />我想完成到这一步肯定已经有了部分的基础，继续提高自己的话那你可以到Adobe Flex App Sample 下载sample进行学习，sample中比较推荐的是Flex Store，还有一个重要的sample那就是Flex Style Explorer v2.0.1的源代码和Flex 2 Primitive Explorer的源代码，只要右键，你就能看view source。<br /><br />Project in Structure <br />一个好的工程没有一个好的架构那是做得非常吃力的。对于已经成熟的团队，我非常推荐大家使用Adobe 推荐的Iteration::two公司的Cairngorm和Jeremy的Riawave. <br /><br /><br />Create Components <br /><br />Base <br />也有很多人问，上面东西我都会了，想写一个控件该从何处入手，最简单和最实用的方法是Help(F1)----->Adobe Flex 2 Help----->Creating and Extending Flex 2 Components，其中有2个重要的章节那就是Creating MXML Components 和 Creating ActionScript Components，顾名思义那就是如何用mxml和ActionScript来创建控件，里面的东西一定要全部看完<br />Ready <br />做完Base以后，我们将以实例子进行学习，打开X:\Program Files\Adobe\Flex Builder 2\Flex SDK 2\frameworks\source\mx\controls，里面有个Button.as，对，没错，这就是Button.as的源代码，而且还是从UIComponent继承过来的最简单的控件之一，我们要做的是要读懂它的一文一字，就算是一个Boolean，里面也隐藏了很多学问。<br />Go <br />Ready之后，Go还成问题么？<br /><br /><br /><br />Help <br />要Help吗？为什么每次遇到困难问题的时候总是去问身边的人。我不得不说的是当一个看Help(F1)的人和一个问别人的人在一个月内学习Flex，一个查看Help文档的人领先的不只是一条街那么大的距离。Any Question? Please Push F1!<br /><br /><br />Community Organizations <br />RIAChina --- 中国RIA开发者论坛，是全国数一的关于Flex的讨论社区，里面隐藏着众多的高手，而且很多已经参加了工作并在实际项目中。 <br />RIADev --- 联系两岸三地的关于Flex/Apollo的华人论坛社区，它所表现的优势在于只要一提出问题，它将以邮件的方式以最快的速度发到每位成员手中，最重要的它是Jeremy带头的。 <br />FlexCoders --- 全球最大的Flex用户讨论组织，只要是关于Flex的问题，你都可以在这里提出，而且常常回答者都是Adobe公司参加或者跟Flex相关的工作人员，当然前提条件是你要具备对英语的阅读能力和表达能力。 <br />FlexComponents--- FlexCoders 的同胞兄弟，这里讨论的都是关于控件的问题，前提条件还是英文:-)<br /><br /><br />Books <br />Adobe Flex 2: Training from the Source <br />Adobe Flex 2.0.1 Help <br />Adobe Flex 2.0.1 Language Reference <br />Advanced ActionScript 3 with Design Patterns <br />ActionScript 3 Cookbook <br />Make things move <br />Programming Flash Communication Server <br />Apollo for Adobe Flex Developers Pocket Guide <br />AS3 Tip Of the Day !<br /><br /><br />End <br />当然Flex的路还是很长，并祝各位好运!
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/165949#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Feb 2008 19:49:20 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/165949</link>
        <guid>http://jiandeh.javaeye.com/blog/165949</guid>
      </item>
      <item>
        <title>Apache URL Rewrite最简配置（二）</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/165246" style="color:red;">http://jiandeh.javaeye.com/blog/165246</a>&nbsp;
          发表时间: 2008年02月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用UrlRewriteFilter动态URL静态化<br /> 所用基于动态的url http://www.nihaoblog.com/content.jsp?id=1&contentid=404按照各大搜索引擎的喜好，应该美化成http://www.nihaoblog.com/content/1_404.html静态网页的方式，尽管目前的google及几大搜索引擎宣称支持动态页网的抓取，但与传统的html文件相比较抓取率仍不在一个数量级。Apche的mod_rewrite模块具有此功能，但是对于租用虚拟主机的用户来说就比较麻烦不太可能对所有运营商有更多的要求，需要条件依赖就不具通用性。<br /> <br />    目前有一个解决方法，通过UrlRewriteFilter可以完全实现动态URL表态化，你可以将它直接应用到你的web应用中，不管你用的是jsp+javabean还是struts. <br />    <br />下面是使用方法： <br /><br />    1、下载http://tuckey.org/urlrewrite/#download目前版本是1.2,解压缩后将文件考到相应的web-inf/lib和web-inf下，。 <br />    2、配置web.xml<br />&lt;filter> <br />       &lt;filter-name>UrlRewriteFilter&lt;/filter-name> <br />       &lt;filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class> <br />&lt;/filter> <br />&lt;filter-mapping> <br />       &lt;filter-name>UrlRewriteFilter&lt;/filter-name> <br />       &lt;url-pattern>/*&lt;/url-pattern> <br />&lt;/filter-mapping> <br />根据自己的需要，将相应目录下的url转给UrlRewriteFilter来处理。 <br />   3、配置urlwrite规则文件WEB-INF/urlrewrite.xml <br /><br />http://www.nihaoblog.com/content.jsp?id=1&contentid=404<br /> <br />静态化为：<br />http://www.nihaoblog.com/content/1_404.html<br /> <br />配置如下： <br /><br />&lt;rule> <br />    &lt;from>/content/([0-9]+)_([0-9]+).html&lt;/from> <br />    &lt;to>/content.jsp?id=$1&amp;contentid=$2&lt;/to> <br />&lt;/rule> <br /><br />     <br />注意：有多个参数时，中的连接符号&应该是&amp; <br /> <br />熟悉正则表达式的朋友可能一看就是明白rule的匹配原理了。更多的配置可以参照<a href="http://tuckey.org/urlrewrite/manual/" target="_blank">http://tuckey.org/urlrewrite/manual/</a>
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/165246#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 26 Feb 2008 19:16:29 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/165246</link>
        <guid>http://jiandeh.javaeye.com/blog/165246</guid>
      </item>
      <item>
        <title>Apache URL Rewrite最简配置（一）</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/165245" style="color:red;">http://jiandeh.javaeye.com/blog/165245</a>&nbsp;
          发表时间: 2008年02月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          假设你已经使用mod_jk2.so整合了Apache2.05x与Tomcat5.x<br />要完成的功能如下重定向：<br />将URL http://host/test.jps?id=1 重定向为 http://host/1.html <br />将URL http://host/conent.jsp?id=1&id2=3 重定向为 http://host/1_3.html <br /> <br />1. 修改Apache2\conf\httpd.conf文件，加载mod_rewrite.so<br /><br />LoadModule rewrite_module modules/mod_rewrite.so<br /><br />2. 在每个虚拟主机的地方设置Rewrite参数<br /> <br />&lt;VirtualHost *:80><br />    ServerAdmin wiseweidong@gmail.com<br />    DocumentRoot "I:/Job/Java"<br />    ServerName localhost<br />    RewriteEngine on<br />    RewriteRule /([0-9]+).html /test.jsp?id=$1 [PT]<br />    RewriteRule /([0-9]+)_([0-9]+).html /content.jsp?id=$1&id2=$2 [PT]<br />&lt;/VirtualHost>
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/165245#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 26 Feb 2008 19:15:25 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/165245</link>
        <guid>http://jiandeh.javaeye.com/blog/165245</guid>
      </item>
      <item>
        <title>MySQL数据库性能调整(转)</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/164439" style="color:red;">http://jiandeh.javaeye.com/blog/164439</a>&nbsp;
          发表时间: 2008年02月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          转自<a href="http://robbin.javaeye.com/blog/157731" target="_blank">http://robbin.javaeye.com/blog/157731</a><br />   MySQL5.0.XX版本，数据库引擎是InnoDB。关于MySQL数据库的调优，推荐大家看<a href="http://www.mysqlperformanceblog.com/" target="_blank">MySQL Performance Blog</a>，作者是一个MySQL性能调优方面的专家，并且提供MySQL咨询服务。他的博客上面有很丰富的关于MySQL调优的文章和演讲文稿，特别是关于InnoDB方面，非常深入。数据库调优就是根据他的InnoDB演讲文稿来调整的，一般说来，有几个需要调整的参数： <br /><br />innodb_buffer_pool_size <br />这个参数很重要，越大越好，对于专用的数据库服务器一般建议开服务器内存的50%以上。 <br /><br />query_cache_size <br />查询缓存，对于查询的性能提高有很大帮助，但不宜开得过大，查询缓存的过期可能很频繁，过大查询缓存反而降低性能，增加服务器开销 <br /><br />innodb_flush_method = O_DIRECT <br />针对InnoDB的数据文件，关闭操作系统的文件缓冲，由于InnoDB自己有巨大的Buffer Pool，操作系统对文件的读写缓冲功能反而会降低MySQL的InnoDB的IO性能。 <br /><br />最后针对数据库的SQL优化来说有两点原则： <br /><br />1、对数据库表要适当的创建索引 <br />特别是出现在where查询条件当中字段，和关联查询当中的外键，要高度注意。 <br /><br />2、尽量避免大表的全表扫描和数据库的硬盘IO <br />查询比较慢的SQL要explain一下，看看是否发生了全表扫描，采取各种措施减少或者避免大表的全表扫描问题，例如拆分表等等。 <br /><br />最后针对MySQL数据库运行情况，我们可以用show status; 和 show innodb status\G 来监测。
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/164439#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Feb 2008 15:31:33 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/164439</link>
        <guid>http://jiandeh.javaeye.com/blog/164439</guid>
      </item>
      <item>
        <title>在Linux平台上安装和配置Ruby on Rails详解(转)</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/163703" style="color:red;">http://jiandeh.javaeye.com/blog/163703</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large"><div style="text-align: center">在Linux平台上安装和配置Ruby on Rails详解</div></span><br />   转自<a href="http://robbin.javaeye.com/blog/43228" target="_blank">http://robbin.javaeye.com/blog/43228</a>(要学习Ruby,linux不熟，怕robbin会删掉，转一个先)<br /><br />  ruby on rails推荐的生产运行环境是Linux/FreeBSD/Unix，即Unix系列的操作系统，采用lighttpd＋FCGI的解决方案。以下我将以Linux操作系统，lighttpd＋FCGI，MySQL数据库为例，从源代码编译安装开始讲解。<br /> <br />在安装之前，应该确认Linux操作系统已经安装好gcc编译器，否则请用Linux安装光盘先行安装gcc编译器：<br />gcc –v <br />如能返回gcc版本号，则gcc正确安装。<br /> <br />一、安装Ruby解析器<br /> <br />一些Linux发行版本，MacOSX操作系统都自带Ruby解析器，但是我仍然建议自行下载ruby源代码编译安装。因为一方面可以自己定制ruby安装的路径，另一方面可以在编译过程中自行添加更多的特性。<br /> <br />ruby的源代码可以从Ruby官方网站下载：<br />http://www.ruby-lang.org/en/downloads/<br /> <br />下载源代码包到本地Linux主机，然后解压缩，进入该目录，进行配置，编译和安装：<br />tar xzvf ruby-1.8.5.tar.gz<br />cd ruby-1.8.5<br />./configure –prefix=/usr/local/ruby<br />make && make install<br />如果想浏览所有的configure参数，可以：<br />./configure –help |more<br />如果不定制安装的目录，默认将安装到/usr/local目录下面。然而我建议自行定制一个ruby的安装目录，例如/usr/local/ruby，这样便于以后的升级，不会和操作系统其他软件混在一起。<br /> <br />安装好以后，修改操作系统PATH路径，加入/usr/local/ruby/bin：<br />export PATH=/usr/local/ruby/bin:$PATH<br />将我们自己安装的ruby放在系统PATH前面，避免操作系统自带的ruby造成的干扰。在Linux上，一般将设置放在/etc/profile中，便于对全局生效。<br /> <br />二、安装ruby on rails<br /> <br />在安装rails之前，要先安装rubygems。rubygems是ruby的在线包管理工具，可以从rubyforge下载rubygems：<br />http://rubyforge.org/projects/rubygems/<br />下载好源代码包，解压缩，安装：<br />tar xzvf rubygems-0.9.0.tgz<br />cd rubygems-0.9.0/<br />ruby setup.rb<br /> <br />然后就可以安装rails了，在确认服务器已经连接互联网的情况下执行：<br />gem install rails –y<br />即通过gem从rubyforge网站下载rails所有依赖包安装。<br /> <br />安装好rails以后，可以执行：<br />rails –v <br />确认一下rails的版本。<br /> <br /> <br />三、安装ruby的数据库适配器<br /> <br />rails发行包中已经自带纯ruby的MySQL数据库适配器，然而对于生产环境来说，我们仍然应该下载安装C版本的数据库适配器，以达到更好的性能。下载mysql-ruby-2.7.3.tar.gz：<br />http://www.tmtm.org/en/mysql/ruby/<br />tar xzvf mysql-ruby-2.7.3.tar.gz<br />cd mysql-ruby-2.7.3<br />ruby extconf.rb --with-mysql-dir=/opt/mysql5 <br />make && make install<br />注意--with-mysql-dir应该指向MySQL数据库的安装路径，如果数据库服务器和Web服务器不在同一台机器上，那么Web服务器上也必须安装MySQL软件，因为ruby的C版本MySQL适配器需要在编译的时候联接MySQL的系统库。<br /> <br /> <br />四、安装Ruby的FCGI支持<br /> <br />由于ruby的fcgi支持库需要在编译的时候联接FCGI的系统库，因此我们需要先安装FCGI库，下载FCGI源代码发行包：<br />http://www.fastcgi.com/dist/<br />tar xzvf fcgi-2.4.0.tar.gz<br />cd fcgi-2.4.0<br />./configure --prefix=/usr/local/fcgi<br />make && make install<br />同样，将fcgi安装在自己指定的目录下，而不是默认的/usr/local，避免多个软件混在一起。<br /> <br />然后就可以安装ruby的fcgi支持库了，下载ruby-fcgi-0.8.7.tar.gz：<br />http://rubyforge.org/projects/fcgi/<br />tar xzvf ruby-fcgi-0.8.7.tar.gz<br />cd ruby-fcgi-0.8.7<br />ruby install.rb config -- --with-fcgi-include=/usr/local/fcgi/include --with-fcgi-lib=/usr/local/fcgi/lib <br />ruby install.rb setup<br />ruby install.rb install<br /> <br />五、安装lighttpd Web Server<br /> <br />安装Lighttpd<br /> <br />在安装lighttpd之前，应该确认操作系统已经安装pcre，即Perl兼容的规则表达式库：<br />rpm –qa |grep pcre<br />如果没有，请从Linux安装光盘里面安装。<br /> <br />然后下载lighttpd：<br />http://www.lighttpd.net/download/<br />tar xzvf lighttpd-1.4.13.tar.gz<br />cd lighttpd-1.4.13<br />./configure --prefix=/usr/local/lighttpd<br /> <br />configure完毕以后，会给出一个激活的模块和没有激活模块的清单，可以检查一下，是否自己需要的模块都已经激活，在enable的模块中一定要有“mod_rewrite”这一项，否则重新检查pcre是否安装。然后编译安装：<br />make && make install <br /> <br />编译后配置：<br />cp doc/sysconfig.lighttpd /etc/sysconfig/lighttpd<br />mkdir /etc/lighttpd<br />cp doc/lighttpd.conf /etc/lighttpd/lighttpd.conf<br /> <br />如果你的Linux是RedHat/CentOS，那么：<br />cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd<br />如果你的Linux是SuSE，那么：<br />cp doc/rc.lighttpd /etc/init.d/lighttpd<br />其他Linux发行版本可以自行参考该文件内容进行修改。然后修改/etc/init.d/lighttpd，把<br />LIGHTTPD_BIN=/usr/sbin/lighttpd<br />改为<br />LIGHTTPD_BIN=/usr/local/lighttpd/sbin/lighttpd<br /> <br />此脚本用来控制lighttpd的启动关闭和重起：<br />/etc/init.d/lighttpd start <br />/etc/init.d/lighttpd stop <br />/etc/init.d/lighttpd restart<br /> <br />如果你希望服务器启动的时候就启动lighttpd，那么：<br />chkconfig lighttpd on<br /> <br />这样lighttpd就安装好了，接下来需要配置lighttpd。<br /> <br />配置Lighttpd<br /> <br />修改/etc/lighttpd/lighttpd.conf<br /> <br />1）server.modules<br />取消需要用到模块的注释，mod_rewrite，mod_access，mod_fastcgi，mod_simple_vhost，mod_cgi，mod_compress，mod_accesslog是一般需要用到的。<br /> <br />2）server.document-root, server.error-log，accesslog.filename需要指定相应的目录<br /> <br />3）用什么权限来运行lighttpd<br />server.username            = "nobody"<br />server.groupname           = "nobody"<br />从安全角度来说，不建议用root权限运行web server，可以自行指定普通用户权限。<br /> <br />4）静态文件压缩<br />compress.cache-dir         = "/tmp/lighttpd/cache/compress"<br />compress.filetype          = ("text/plain", "text/html","text/javascript","text/css")<br />可以指定某些静态资源类型使用压缩方式传输，节省带宽，对于大量AJAX应用来说，可以极大提高页面加载速度。<br /> <br />5）配置ruby on rails<br /> <br />最简单的配置如下：<br />$HTTP["host"] == "www.xxx.com" {<br /> server.document-root = "/yourrails/public"<br /> server.error-handler-404 = "/dispatch.fcgi"<br /> fastcgi.server = (".fcgi" =><br />    ("localhost" =><br />      ("min-procs" => 10,<br />       "max-procs" => 10,<br />       "socket" => "/tmp/lighttpd/socket/rails.socket",<br />       "bin-path" => "/yourrails/public/dispatch.fcgi",<br />       "bin-environment" => ("RAILS_ENV" => "production")<br />      )<br />    )<br /> )<br />}<br />即由lighttpd启动10个FCGI进程，lighttpd和FCGI之间使用本机Unix Socket通信。<br /> <br /> <br />六、安装ImageMagick和RMagic<br /> <br />RMagic是ruby处理图片需要用到的库，很多ruby应用由于都涉及图片处理的功能，往往需要依赖RMagic，但安装ImageMagick和RMagic相当烦琐，需要特别的说明。<br /> <br />安装ImageMagick<br />http://www.imagemagick.org <br />ImageMagick是用C语言实现的图形处理库，有Unix版本和Windows版本。对于Unix版本来说，安装比较麻烦些，另外不建议安装ImageMagick二进制版本，往往会导致缺少某些图片处理功能，导致RMagic安装失败。下载ImageMagick源代码，解压缩，配置：<br />tar xzvf ImageMagick-6.2.9-0.tar.gz<br />cd tar xzvf ImageMagick-6.2.9<br />./configure --prefix=/usr/local/ImageMagick<br /> <br />观察配置后给出来的支持图形格式，看看该图形格式支持是否是yes，如果不是，那么必须先安装该图形格式的本地库。例如，你应该检查是否已经安装如下rpm包：<br />rpm –qa |grep libpng<br />rpm –qa |grep libpng-devel<br />rpm –qa |grep libjpeg<br />rpm –qa |grep gd-devel<br />如果你希望支持tiff格式，还应该检查<br />rpm –qa |grep libtiff<br />如果没有安装，那么在Linux安装光盘找到相应rpm包安装上，再次configure直到确认需要的图形格式全部支持为止，然后编译安装：<br />make && make install<br /> <br />由于ImageMagic被安装在我们自行指定的/usr/local/ImageMagick，后面安装RMagic会找不到需要用到的ImageMagic的命令和库，因此需要配置一下操作系统：<br /> <br />编辑/etc/profile里面的PATH环境变量，在最后面加入：<br />export PATH=/usr/local/ruby/bin:/usr/local/ImageMagick/bin:$PATH<br /> <br />编辑/etc/ld.so.conf，加入：<br />/usr/local/ImageMagick/lib<br />执行命令：<br />ldconfig<br />将ImageMagick的库加入系统联接库<br /> <br />然后注销当前用户重新登录，便于环境变量修改生效，执行：<br />convert logo: logo.gif<br />看是否正确生成一个logo.gif的图片文件。<br /> <br />安装RMagic<br />http://rubyforge.org/projects/rmagick/<br />在rubyfoge上面下载RMagic的源代码发行包，不要下载gem包，然后解压缩编译：<br />./configure <br />make && make install<br /> <br />如果配置和编译过程没有报错，即大功告成。<br /> <br />对于MacOSX来说，安装RMagic以上步骤会出错，请参考：<br />http://rmagick.rubyforge.org/install-osx.html<br /> <br />总体来说，ImageMagick和RMagic的安装很容易出错，安装起来比较困难，如果碰到无法解决的问题，可以通过Google寻求解决办法。
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/163703#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 18:10:49 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/163703</link>
        <guid>http://jiandeh.javaeye.com/blog/163703</guid>
      </item>
      <item>
        <title>基于ANTLR的语法编译器</title>
        <author>jiandeh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jiandeh.javaeye.com">jiandeh</a>&nbsp;
          链接：<a href="http://jiandeh.javaeye.com/blog/143279" style="color:red;">http://jiandeh.javaeye.com/blog/143279</a>&nbsp;
          发表时间: 2007年11月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" align="left" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">（一）、背景</span></font></font></p>
<p class="MsoNormal" align="left" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; MARGIN-RIGHT: 0px"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">目前业务部门对业务数据的查询可以通过业务系统提供的查询功能进行，也可以通过数据库产商提供的数据库工具进行。业务系统提供的查询功能都是预先设计好的，这种方式功能有限，业务人员需要进行新的查询时，只能通过升级系统来实现，时间上存在滞后，且依然无法满足将来可能的新需求。通过数据库工具进行查询可以满足业务人员随时的新查询需求，但是这要求业务人员需熟练掌握数据库工具和</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SQL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">语法。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; MARGIN-RIGHT: 0px"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">为满足相关业务部门特别是审计部门在不用掌握数据库查询工具和</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SQL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">语法等技术的情况下也能灵活、自由查询数据库，可使用数据库灵活查询工具（简称</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">DBQT</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）。该工具采用基于</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">LL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">K</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）文法的编译器技术实现，旨在为各行业的业务系统特别是审计系统提供快速、灵活、高效的数据库查询。</span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">（二）、工具的特点</span></font></font></p>
<p><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"></span></font></font><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">1、采用</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">ANTLR</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">，语言识别的另一个工具</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">(</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt">ANother Tool for Language Recognition</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">)</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">，通过</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">JAVA</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">动作的语法描述来构造语言识别器、编译器和解释器。</span></font></font></p>
<p><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt"></span></font></font><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">2、采用基本</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">LL</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 12.0pt">（</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">K</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 12.0pt">）</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">的文法编译原理技术实现，即编译器从左向右扫描输入串<span lang="EN-US">,</span>使用最左推导法<span lang="EN-US">,</span>每次向右扫描</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">K</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">个符号就可确定使用哪个产生式。</span></font></font></p>
<p><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt"></span></font></font><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">3、支持业务化的中文查询语句的语法验证，验证成功后通过翻译器将中文查询语句翻译成标准的英文查询语句。</span></font></font></p>
<p><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt"></span></font></font><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">4、支持常用的五种语句：常规语句、追加语句、比较语句、循环语句、自定义语句。</span></font></font></p>
<p><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt"></span></font></font><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">5、构件化功能组装强大、简单的业务延伸能力，工具提供了与业务系统无关性的</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 12.0pt">二次开发</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt">接口。</span></font></font></p>
<h1 class="MsoBodyTextFirstIndent" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt; mso-char-indent-count: 0"><span lang="EN-US" style="FONT-SIZE: 22pt; LINE-HEIGHT: 150%; FONT-FAMILY: 黑体; mso-hansi-font-family: 宋体"><o:p></o:p></span></h1>
<p class="MsoBodyTextFirstIndent" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt; mso-char-indent-count: 0"><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">（三）、工具的功能</span></font></font></p>
<p class="MsoBodyTextFirstIndent" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt; mso-char-indent-count: 0"><font face="Times New Roman"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'"></span></font></font><font face="Times New Roman"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-font-kerning: 12.0pt"><font size="2"><font face="Arial">本工具应用了当今最流行ANTLR元语言技术工具，使用BNF巴科斯范式（Backus-Naur Form）进行语法定义，采用基于LL（K）的文法编译原理技术实现的，该工具实现了数据库语句的灵活查询及强大语法验证功能，可以准确地分析复杂的语法，并能根据查询语句对应的数据库表、标准字段表等信息将业务化的中文查询语句翻译成标准的SQL语句，供业务系统提取使用。工具支持常规语句、追加语句、比较语句、循环语句、自定义语句等常用的五种查询语句。</font>&nbsp; </font></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">数据库表设置功能<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">用户根据业务系统的英文库表名称，设置对应的业务化中文库表或帐表名称，以及对应的辅助信息，如库表所在的数据库（当使用多个数据库时）、库表的类别等。通过设置库表，用户在前台就可以用直接选择业务化的库表名称即可，而无需去记住其英文名称。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">标准字段表设置功能<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font size="2" face="Times New Roman"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">用户根据业务系统的库表名称，设置此库表对应的标准字段信息，主要为字段中文名称、业务系统中的英文名称、对应的库表名称以及该字段的数据类型、最大长度、精度等。当用户选择的某一中文库表名称后，可通过快捷键直接获取该表对应的字段信息，方便业务人员的操作。</span></font><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2"><strong>&nbsp; </strong></font></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><strong>查询语句语法验证功能<span lang="EN-US"><o:p></o:p></span></strong></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">通过以上两个步骤进行库表及字段的设置后，业务人员就可在前台选择所需的数据库表名称、该数据库表的字段，根据业务需要输入自定义的查询语句后，工具可将用户输入的语句进行语法解析验证，一次扫描查询语句即可完成解析。语法的验证包含了对关键字（如：查询</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SELECT</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">、来自</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">FROM</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">、条件</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">WHERE</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、标点符号、运算符号（如：加、减、乘、除）、聚合函数（如：求平均值</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">AVG</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">、求最大值</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">MAX</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、数学函数（如：取绝对值</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">ABS</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">、求余弦值</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">COS</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、日期时间函数（如：取当前日期时间</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SYSDATE</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、字符串函数（如：求字符串长度</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">LENGTH</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">、字符串截取</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SUBSTR</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、数据类型转化函数</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">(</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">如：转为日期</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">TO_DATE)</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">等的验证。如果发现此语句错误，则可提供较为准确的错误提示；如果语句验证正确，则业务系统就可对该语句进行业务操作。</span></font></font><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><strong> </strong></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">&nbsp; </span><font size="2" face="Times New Roman"></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt">查询语句翻译功能及业务数据获取<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">对查询语句语法验证的最终目的是要将业务化的中文查询语句转化成业务系统所需要的标准英文</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SQL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">查询语句，本工具提供了将业务化查询语句转化成标准的可执行</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SQL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">语句的功能，业务系统可获取此语句直接在系统中使用。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">除了业务系统可对标准英文</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SQL</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">查询语句的获取外，工具还可准确识别并获取不同子句下的内容项，包括</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SELECT</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句的查询内容、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">FROM</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句的表信息、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">WHERE</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句的条件信息、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">GROUP BY</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句的分组内容、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">ORDER BY</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句的排序内容、表合并的表信息、循环语句的变量参数等。</span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"></span></font></font>&nbsp;<img src="http://jiandeh.javaeye.com/topics/download/5604eb6f-cd1d-453e-b546-4257afe83308" height="566" alt="" style="WIDTH: 654px; HEIGHT: 540px" width="662" />&nbsp;</p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"></span></font></font></span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"></span></font></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font face="Times New Roman"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">（四）、工具的架构</span></font></font><font face="Times New Roman"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'"><font size="2">&nbsp; </font></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">词法分析<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoBodyTextFirstIndent" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0"><font size="2"><font face="Times New Roman"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">编译器在接收到查询语句后，首先对查询语句进行扫描，即阅读查询语句（通常以字节流表示），扫描程序就是执行词法分析（</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt">Lexer Analysis</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">）的过程，并将字节流序列转成编译器可识别的记号流（</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt">TOKEN</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">）。</span></font><span lang="EN-US" style="LETTER-SPACING: 0.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">语法分析<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font size="2"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">语法分析程序</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">从扫描程序</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中获取记号形式的源代码，根据语法定义中的规则对查询语句进行语法分析（</span><span lang="EN-US" style="LETTER-SPACING: 0.5pt">Parser Analysis</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">）。</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">如果查询语句都能应用到所定义的规则，没有产生任何错误的话，则表示此查询语句的语法是正确的，分析全部完成后，将构造出符合该语句的一棵抽象语法树（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">AST</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">遍历抽象语法树<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">在语法分析全部完成后，编译器则遍历这棵抽象语法树（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">AST</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">），并根据需要提取相关的节点（根节点、叶子节点）信息，组成了编译器模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">QueryModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">编译器模型对象<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><font size="2"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">编译器模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">QueryModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）包含查询语句的异常信息、查询语句的类型信息、查询语句的子句信息。查询语句的类型信息，如：常规语句模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SelectStatementModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、表合并模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">TableUnionModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、表比较模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">TableCompareModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）；查询语句的子句信息，如：</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SELECT</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">子句模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SelectListModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">FROM</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">字句模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">TableListModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">WHERE</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">字句模型对象（</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt">SearchConditionModel</span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'">）等。同时，编译器模型对象负责接收翻译器传回的业务数据，如表名、字段名、表别名、字段别名等信息，进行各种相关的操作。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; LETTER-SPACING: 0.5pt; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><strong style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; LETTER-SPACING: 0.2pt; mso-bidi-font-size: 10.5pt"><font size="2">翻译器<span lang="EN-US"><o:p></o:p></span></font></span></strong></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font size="2" face="Times New Roman">翻译器提供了与业务系统查询语句的各种交互动作，包括常规语句、追加（合并）语句、比较语句、循环语句、自定义查询语句。翻译器负责接收业务系统的表名、字段名等信息及相关业务数据内容的处理，将编译器所需的数据传给编译器模型对象，并将结果传回给业务系统，供业务系统提取使用，完成对业务数据的中转控制与处理。</font></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font size="2" face="Times New Roman">（五）、支持的平台</font></span></p>
<p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; LETTER-SPACING: 0.5pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font face="Arial">硬件环境：SUN / IBM / HP小型机/ PC SERVER<br />
操作系统：WINDOWS、Linux、UNIX、AIX<br />
数据库系统：Oracle、Sybase、DB2<br />
服务器环境：WebSphere、WebLogic、JBoss、Tomcat</font></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://jiandeh.javaeye.com/blog/143279#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Nov 2007 18:40:00 +0800</pubDate>
        <link>http://jiandeh.javaeye.com/blog/143279</link>
        <guid>http://jiandeh.javaeye.com/blog/143279</guid>
      </item>
  </channel>
</rss>