<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye论坛最新讨论</title>
    <description>JavaEye论坛最新讨论 - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.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>写了一个简单的MVC框架</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://stworthy.javaeye.com">stworthy</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/223964" style="color:red;">http://www.javaeye.com/topic/223964</a>&nbsp;
          发表时间: 2008年08月04日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>用过一点struts,spring mvc，总觉得不如ROR直接方便，于是，做为练习，写了一个类ROR的简单框架，望大家批评指教。</p>
<p>1、先介绍一下配置，为保证和数据库连接，需要配置actionrecord.properties：</p>
<pre name="code" class="java">domain_base_class=com.et.ar.ActiveRecordBase

com.et.ar.ActiveRecordBase.driver_class=com.mysql.jdbc.Driver
com.et.ar.ActiveRecordBase.url=jdbc:mysql://localhost/mydb
com.et.ar.ActiveRecordBase.username=root
com.et.ar.ActiveRecordBase.password=soft123456
com.et.ar.ActiveRecordBase.pool_size=2
</pre>
<p>&nbsp;进而需要在web.xml中进行配置：</p>
<pre name="code" class="xml">    &lt;servlet&gt;
        &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
        &lt;servlet-class&gt;com.et.mvc.DispatcherServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;controllerBasePackage&lt;/param-name&gt;
            &lt;param-value&gt;controllers&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;viewBasePath&lt;/param-name&gt;
            &lt;param-value&gt;/WEB-INF/views/&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
        &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
</pre>
<p>2、建立模型对象</p>
<pre name="code" class="java">package models;

import com.et.ar.ActiveRecordBase;
import com.et.ar.Column;
import com.et.ar.Id;
import com.et.ar.Table;
import com.et.ar.Unique;

/**
 *
 * @author Administrator
 */
@Table(name="users")
public class User extends ActiveRecordBase{
    @Id     private Integer id;
    @Column 
    @Unique(message="名称必须唯一")
    private String name;
    @Column private String duty;
    @Column private String remark;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDuty() {
        return duty;
    }

    public void setDuty(String duty) {
        this.duty = duty;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}
</pre>
<p>3、编写控制器代码：</p>
<pre name="code" class="java">package controllers;

import com.et.mvc.JspView;
import java.util.List;
import models.User;

/**
 *
 * @author Administrator
 */
public class UserController extends ApplicationController{
    public void list() throws Exception{
        List&lt;User&gt; users = User.findAll(User.class);
        request.setAttribute("users", users);
    }
    
    public void show() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        request.setAttribute("user", user);
    }
    
    public void new_() throws Exception{
        User user = new User();
        request.setAttribute("user", user);
    }
    
    public JspView create() throws Exception{
        User user = User.createModel(User.class, "user", request.getParameterMap());
        System.out.println(user.getName());
        if (user.create()){
            redirect("/User/list.do");
            return null;
        }
        else{
            return new JspView("new_","user",user);
        }
    }
    
    public void edit() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        request.setAttribute("user", user);
    }
    
    public JspView update() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        user = User.updateModel(user, "user", request.getParameterMap());
        if (user.update()){
            redirect("/User/list.do");
            return null;
        }
        else{
            return new JspView("edit","user",user);
        }
    }
    
    public void destroy() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        user.destroy();
        redirect("/User/list.do");
    }
}
</pre>
<p>4、再来看看视图</p>
<p>4.1 list.jsp</p>
<pre name="code" class="html">        &lt;h2&gt;用户资料列表&lt;/h2&gt;
        &lt;table border="1"&gt;
        &lt;thead&gt;
        &lt;tr&gt;
        &lt;th&gt;名称&lt;/th&gt;
        &lt;th&gt;职务&lt;/th&gt;
        &lt;th&gt;备注&lt;/th&gt;
        &lt;th&gt;操作&lt;/th&gt;
        &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
        &lt;c:forEach var="user" items="${users}"&gt;
        &lt;tr&gt;
        &lt;td&gt;${user.name}&lt;/td&gt;
        &lt;td&gt;${user.duty}&lt;/td&gt;
        &lt;td&gt;${user.remark}&lt;/td&gt;
        &lt;td&gt;&lt;a href="edit.do?id=${user.id}"&gt;修改&lt;/a&gt; &lt;a href="destroy.do?id=${user.id}"&gt;删除&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;/c:forEach&gt;
        &lt;/tbody&gt;
        &lt;/table&gt;
        
        &lt;p&gt;&lt;a href="new_.do"&gt;新增用户&lt;/a&gt;&lt;/p&gt;
</pre>
<p>4.2 new_.jsp</p>
<pre name="code" class="html">        &lt;h2&gt;新增用户资料&lt;/h2&gt;
        &lt;ul&gt;
            &lt;c:forEach var="err" items="${user.errors}"&gt;
                &lt;li&gt;${err}&lt;/li&gt;
            &lt;/c:forEach&gt;
        &lt;/ul&gt;
        &lt;form action="create.do" method="POST"&gt;
            &lt;jsp:include page="form.jsp"/&gt;
            &lt;input type="submit" value="提交" /&gt;
        &lt;/form&gt;
        &lt;p&gt;&lt;a href="list.do"&gt;返回&lt;/a&gt;&lt;/p&gt;
</pre>
<p>4.3 edit.jsp</p>
<pre name="code" class="html">        &lt;h2&gt;修改用户资料&lt;/h2&gt;
        &lt;ul&gt;
            &lt;c:forEach var="err" items="${user.errors}"&gt;
                &lt;li&gt;${err}&lt;/li&gt;
            &lt;/c:forEach&gt;
        &lt;/ul&gt;
        &lt;form action="update.do?id=${user.id}" method="POST"&gt;
            &lt;jsp:include page="form.jsp"/&gt;
            &lt;input type="submit" value="提交" /&gt;
        &lt;/form&gt;
        &lt;p&gt;&lt;a href="list.do"&gt;返回&lt;/a&gt;&lt;/p&gt;
</pre>
<p>4.4 form.jsp</p>
<pre name="code" class="html">&lt;p&gt;名称：&lt;input type="text" name="user[name]" value="${user.name}" /&gt;&lt;/p&gt;
&lt;p&gt;职务：&lt;input type="text" name="user[duty]" value="${user.duty}" /&gt;&lt;/p&gt;
&lt;p&gt;备注：&lt;input type="text" name="user[remark]" value="${user.remark}" /&gt;&lt;/p&gt;
</pre>
<p>&nbsp;</p>
<p>这样，实现了基本的CRUD操作。</p>
<p>&nbsp;</p>
<p>这个框架同时考虑了AJAX的操作，可以返回JsonView, TextView等。</p>
<p>如果覆盖控制器的beforeFilter和afterFilter则可以进行基本的过滤操作。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/223964#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Aug 2008 18:25:04 +0800</pubDate>
        <link>http://www.javaeye.com/topic/223964</link>
        <guid>http://www.javaeye.com/topic/223964</guid>
      </item>
      <item>
        <title>今天，三年</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ice-k.javaeye.com">ice.k</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224498" style="color:red;">http://www.javaeye.com/topic/224498</a>&nbsp;
          发表时间: 2008年08月05日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          截至今天，做Java三年了。作为程序员三年是个坎，从市场上反映就是有三年工作经验的和不足三年工作经验的程序员待遇是完全不一样的。个人的感觉就是三年前只知道是那个东西，但是不知道是哪里来的，三年后知道是哪里来的，但是离了解架构还差很远。<br /><br />三年总结下来，越发的发现自己太差，数据结构，算法，编程语言都没有很好的基础。英语稍稍熟悉一点，现在放冷了，日语也就懂那么一点。<br /><br />薪水，算起来，税后的一年也有10W了，但是心里还是发慌，不知道明天是个啥样子。<br /><br />程序员，活到老，学到老，必须的。<br /><br />前途是光明的，就是看不到道路！
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224498#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 05 Aug 2008 12:46:51 +0800</pubDate>
        <link>http://www.javaeye.com/topic/224498</link>
        <guid>http://www.javaeye.com/topic/224498</guid>
      </item>
      <item>
        <title>关于js框架选择，发篇我去年的内部预研吧..</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://googleme.javaeye.com">googleme</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224445" style="color:red;">http://www.javaeye.com/topic/224445</a>&nbsp;
          发表时间: 2008年08月05日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>当初我们部门因为原有的框架是我们自己写的，渐渐不能适应要求，所以打算引入个第3方的js框架来做原型之用..这报告是我刚毕业加入部门不久后写的，算是一个预研吧，写的比较幼稚，呵呵，大家随便看看吧..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";
	mso-ansi-language:#0400;
	mso-fareast-language:#0400;
	mso-bidi-language:#0400;}
</style>
<![endif]-->
</p>
<p class="MsoNormal"><strong>Purpose:</strong></p>
<p class="MsoNormal"><span style="color: black;">The purpose of this&nbsp;study is
to find a suitable JavaScript framework for UCD in&nbsp;future prototyping. </span></p>
<p class="MsoNormal"><span style="color: blue;">&nbsp;</span></p>
<p class="MsoNormal"><strong><span style="color: black;">The framework should
fulfill these features:</span></strong></p>
<p class="MsoNormal"><span style="color: black;">There are a lot of JavaScript
toolkits or frameworks available, and it feels hard to choose a suitable one
for us. Every coins have two sides. So does these frameworks. Almost every
framework has some disadvantages, but we still have to make a choice. </span></p>
<p class="MsoNormal"><span style="color: blue;">&nbsp;</span></p>
<p class="MsoNormal"><span style="color: black;">So, what we really want? There are
some important factors we may take into account:</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style="color: black;">Ajax</span><span style="color: black;"> support. E.g.
sortable table, drag&amp; drop etc.</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Well documentation. This is a important and must part of
one good framework.</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Cross-browser support .Almost all frameworks will fulfill
this.</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Licensing issue. It will be great news if it&rsquo;s a free
lunch. </span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Extensive users, good community atmosphere. So it&rsquo;s easy to
get feedback or help.</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Quality (bug-free, reliable) It better has a good
maintenance or support team.</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Learning curve. How much time and effort should we paid
for?</span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Rich UI component. It&rsquo;s good if the framework provide us
many available components. </span></p>
<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Wingdings; color: black;">&uuml;</span><span style="font-size: 7pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black;">Easy to use, and easy to integration with DEV side.</span></p>
<p class="MsoNormal"><span style="color: blue;">&nbsp;</span></p>
<p class="MsoNormal"><strong><span style="color: black;">Available good frameworks:</span></strong></p>
<p class="MsoNormal"><span style="color: black;">After a long search and study, I
added below frameworks to my cart as&nbsp;our candidates. </span></p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">Dojo </span>(<span class="MsoHyperlink">dojotoolkit.org</span>)</li>
</ul>
<p class="MsoNormal">Dojo is the Open Source JavaScript toolkit that helps you
build serious applications in less time. It fills in the gaps where JavaScript
and browsers don't go quite far enough, and gives you powerful, portable,
lightweight, and tested tools for constructing dynamic interfaces.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">It&rsquo;s a powerful and big framework. But it&rsquo;s&nbsp;complicated
and not easy to use.&nbsp;If we use it, may have many potential problem, as
Dojo still have many bugs to fix. According to other's comment, Dojo is not so
stable for enterprise usage.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">Rico</span> (<span class="MsoHyperlink">openrico.org/rico/home.page</span>)</li>
</ul>
<p class="MsoNormal">Rico provides a very simple interface for registering Ajax request handlers as well as HTML elements or
JavaScript objects as Ajax
response objects. Multiple elements and/or objects may be updated as the result
of one Ajax
request.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">Rico provide basic Ajax,
Drag&amp;Drop, Cinematic and Behavior features . But I found this framework has
many bugs, some of its demo cannot work properly, and really worry about its
support and update.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">ActiveWidgets </span>(<a href="http://www.activewidgets.com/" title="blocked::http://www.activewidgets.com/">www.activewidgets.com/</a>)</li>
</ul>
<p class="MsoNormal">ActiveWidgets is a powerful javascript component library
which makes web application development (especially AJAX-style apps) a lot
easier and more productive. ActiveWidgets provides you with a set of common
visual elements (like datagrid, tabs, tree, combo) sharing professional
look-and-feel and simple programming model.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">Though it&rsquo;s a commercial product, but it&rsquo;s not so good
because we already&nbsp;found Ext which is same type like ActiveWidgets but
better framework that I will introduce later.</p>
<p class="MsoNormal" style="margin-left: 0.5in;">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">SmartClient</span> (<a href="http://www.smartclient.com/" title="blocked::http://www.smartclient.com/">www.smartclient.com</a>) </li>
</ul>
<p class="MsoNormal">SmartClient delivers on the promise of AJAX, enabling high-performance,
high-productivity web applications to be deployed today. SmartClient offers:</p>
<p class="MsoNormal"><span>&nbsp;&nbsp;&nbsp; </span>* the most mature
and proven AJAX
technology available</p>
<p class="MsoNormal"><span>&nbsp;&nbsp;&nbsp; </span>* a complete
solution: complete GUI toolkit, complete documentation</p>
<p class="MsoNormal"><span>&nbsp;&nbsp;&nbsp; </span>* the right
architecture: cutting edge service-oriented, metadata-driven architecture</p>
<p class="MsoNormal"><span>&nbsp;&nbsp;&nbsp; </span>* true, tested,
certified cross-browser, cross-platform support </p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">This is a very good framework, a real Enterprise Ajax
framework. But it&rsquo;s commercial. And it&rsquo;s mainly for developer to use. So, if we
want to use this, we have to know many details of its API, and the way&nbsp;how
to write&nbsp;in its grammar.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">MochiKit</span> (<span class="MsoHyperlink">mochikit.com</span>)</li>
</ul>
<p class="MsoNormal">MochiKit.Visual provides visual effects and support
functions for visuals.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em> </p>
<p class="MsoNormal">It also provide many common features such as draggable, Ajax tables, sortable
tables etc. But it has less support and&nbsp;not very extensible. Seems the
maintenance to it is not so good. No new update over one year.Compared to other
framework, it has little advantage&nbsp;as our framework.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">Spry </span>(<a href="http://labs.adobe.com/technologies/spry/" title="blocked::http://labs.adobe.com/technologies/spry/">http://labs.adobe.com/technologies/spry/</a>
     )</li>
</ul>
<p class="MsoNormal">The Spry framework for Ajax
is a JavaScript library that provides easy-to-use yet powerful Ajax functionality that allows designers to
build pages that provide a richer experience for their users. It is designed to
take the complexity out of Ajax
and allow designers to easily create Web 2.0 pages.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">Actually, I like Spry framework for Ajax. It&rsquo;s integrate very well with
Dreamweaver( they are from same family&mdash;Adobe). And it&rsquo;s easy for&nbsp;us UI
designers to use.But it&rsquo;s just prerelease 1.6, so that means its functions is
limited and maybe exists may bugs. When the final release of Spry framework
come out, I think it is likely to be the most suitable one for us, but
currently, it is not the one.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">script.aculo.us</span> (<span class="MsoHyperlink">script.aculo.u</span>s)</li>
</ul>
<p class="MsoNormal">script.aculo.us provides you with easy-to-use, cross-browser
user interface JavaScript libraries to make your web sites and web applications
fly.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">It&rsquo;s based on&nbsp;Prototype which is a famous Ajax framework.&nbsp;If
using Ruby on Rail, then it will be the most suitable framework. But for us,
not the best choice.</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: silver;">MooTools</span> (<span class="MsoHyperlink">mootools.net</span>)</li>
</ul>
<p class="MsoNormal">MooTools is a compact, modular, Object-Oriented JavaScript
framework designed for the intermediate to advanced JavaScript developer. It
allows you to write powerful,flexible, and cross-browser code with its elegant,
well docuemnted, and coherent API.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em> </p>
<p class="MsoNormal">MooTools provide basic functions to us, e.g. Ajax support, Animation
Effects, Drag&amp;Drop, Sortables. Its code is compact, elegant, but has few
plugins. So if we want more function, we have to dev by ourselves. And also it
does not have a strong community, and few support can get if have trouble.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: green;">jQuery </span>(<span class="MsoHyperlink">jquery.com</span>)</li>
</ul>
<p class="MsoNormal">jQuery is a fast, concise, JavaScript Library that
simplifies how you traverse HTML documents, handle events, perform animations,
and add Ajax interactions to your web pages. jQuery is designed to change the
way that you write JavaScript. If we want more, then we can find other
frameworks which is build upon jQuery framework. </p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">jQuery is for designers, developers, and suited for many
different applications. Also have many&nbsp;good plug-ins to support. Its
community is&nbsp;very active and has many&nbsp;successful customer stories. I
would recommend jQuery as one of our choice.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal"><span style="color: green;">Ext</span> (<a href="http://www.extjs.com/" title="blocked::http://www.extjs.com/">www.extjs.com</a>) </li>
</ul>
<p class="MsoNormal">Ext is a client-side, JavaScript framework for building web
applications. In early 2006, Jack Slocum began working on a set of extension
utilities for the Yahoo! User Interface (YUI) library. These extensions were
quickly organized into an independent library of code and distributed under the
name "yui-ext."</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="text-decoration: underline;">My comment:</span></em></p>
<p class="MsoNormal">Very good framework.<span>&nbsp;
</span>And have&nbsp;extensive user and&nbsp;strong support. It&rsquo;s very good for
Rich Internet Application development. I also pick it out as&nbsp;our
choice.&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<ul type="disc" style="margin-top: 0in;">
<li class="MsoNormal">Others&hellip;</li>
</ul>
<p class="MsoNormal">There are still many good
framework or library that I probably missed, or they are not the kind of
framework we truly&nbsp;seeking for, e.g.GWT.&nbsp;So, welcome additions to
this list. Any feedback on other overlooked good framework is most welcome. </p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><strong>Frameworks fulfill our requirement:</strong></p>
<p class="MsoNormal">So, we already got two likely candidates, will we hire both
or just one of them? That really depends on how we want to use them. </p>
<p class="MsoNormal">Anyway, let's further dig out what advantages and
disadvantages they have, and what roles they can play for us.&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em>jQuery</em></p>
<p class="MsoNormal"><span style="text-decoration: underline;">Advantage:</span></p>
<ol type="1" style="margin-top: 0in;">
<li class="MsoNormal">jQuery
     is small size (14kb, Minified and Gziped) </li>
<li class="MsoNormal">jQuery
     is currently available for use in all personal or commercial projects
     under both MIT and GPL licenses. So it&rsquo;s have no potential legal issue for
     our project. </li>
<li class="MsoNormal">It
     provide us foundation JavaScript support such as Mouse
     Interaction(Draggables,Droppables,Sortables,Selectables,Resizeables),User
     Interface Extensions(Accordion, Calendar, Dialog,Slider, Table,Tabs),
     Effects(Shadow,Magnifier), Ajax support, and also many utilities
     functions. </li>
<li class="MsoNormal">If we
     need more functions, jQuery also provide us hundreds of plugins for
     self-service. These plugins include DOM, UI, Widgets, Ajax etc. Really
     thoughtful for us. And if this cannot meet our needs, then we can also
     write our own plugins. </li>
<li class="MsoNormal">Many
     successful customer stories, e.g. Google,Amazon,Intel,AOL,Oracle,Cisco
     etc. This also means jQuery have every good and proven quality.</li>
</ol>
<p class="MsoNormal"><span style="text-decoration: underline;">Disadvantage:</span></p>
<p class="MsoNormal" style="text-indent: 0.25in;">1. It does not provide UI
components or widgets, but we can solve this by adding some of its plugins.</p>
<p class="MsoNormal" style="text-indent: 0.25in;">2. Should take some time to learn
modern style JavaScript through it's a must for most currently popular
frameworks.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em>Ext</em></p>
<p class="MsoNormal"><span style="text-decoration: underline;">Advantage:</span></p>
<ol type="1" style="margin-top: 0in;">
<li class="MsoNormal">Ext
     provides Real Enterprise support for Grids and Trees, Tabs and Layouts,
     Forms &amp; Combo Box and other UI component. </li>
<li class="MsoNormal">It
     supports YUI/prototype/jQuery. So, it will work well if we are using
     jQuery as its base library. </li>
<li class="MsoNormal">It&rsquo;s
     a really powerful and almost full-function JavaScript framework. </li>
<li class="MsoNormal">It
     has very fast and good support, and its community is very active. </li>
<li class="MsoNormal">It
     can be use free in our commercial project. But it also has premium help if
     we paid for it. </li>
<li class="MsoNormal">Even
     it&rsquo;s a full function framework, Ext still have very excellent performance.</li>
</ol>
<p class="MsoNormal"><span style="text-decoration: underline;">&nbsp;Disadvantage:</span></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;1. Ext is suitable for develop
"one page one application", maybe not so same as we used to design
the web UI flow. </p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; 2. Ext library is heavy for traditional
web, full size Ext has 491kb. Through Ext be proved has very good performance,
but we still need cautious for our enterprise usage.</p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; 3. Ext is kind of complicated if we want
to adjust it to suit for our project, and may pay many effort to learn it.</p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; 4. Developer may also need to learn Ext,
it may have impact on our current process.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><strong>Conclusion:</strong></p>
<p class="MsoNormal">Finally, My advice is we can just use <span style="color: red;">jQuery</span> as our foundation 3rd party JavaScript Library,
thus we will not have much change to our current Web UI design way. And can
easy append our own functions to this library or adopt some proven plug-ins (we
shall&nbsp;take a full test for these plug-ins before choose it). </p>
<p class="MsoNormal">And if we want to change to new Web Application UI design
way (Web 2.0? One page one application?), then we can also easily move to Ext
as Ext is also based on jQuery.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><strong>So, mates, I want to know how do you guys think? If
you have any concern, please let me know. </strong></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">And if we have common agreement on jQuery or Ext or other
framework (if have) , then I will host a meeting to&nbsp;detail discuss how we
to use the framework,&nbsp;impact on our project, best practice,
and&nbsp;&nbsp;A.O.B.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">Thanks.</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">-------------------</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">从email里拷出来的，格式有点乱，不过实在懒得再排版了，大家见谅 :-)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224445#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 05 Aug 2008 11:47:30 +0800</pubDate>
        <link>http://www.javaeye.com/topic/224445</link>
        <guid>http://www.javaeye.com/topic/224445</guid>
      </item>
      <item>
        <title>希望在Linux环境下使用JavaScript开发独立的应用程序，是否有这样的JS解释器？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cscript.javaeye.com">cscript</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225661" style="color:red;">http://www.javaeye.com/topic/225661</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我学习过shell、awk、javascript、perl、python等脚本，单就语法来说，我喜欢awk和javascript，因为它们和C语言最接近。那么为什么不能使用JavaScript开发独立的应用程序呢？如果有库的支持，如封装unix的系统调用、wxWidgets、gtk的JavaScript库，那么自然也可以使用Javascript编写独立的应用程序，我现在希望用Javascript开发一个独立运行(不依附于浏览器)的GUI聊天程序，不知道在Linux环境下是否存在这样的JS解释器？<br /><br />下面是一个假想中的使用unix系统调用的javascript程序：<br /><pre name="code" class="java">
01 function main()
02 {
03     var listen_fd, accept_fd;
04
05     listen_fd = socket(AF_INET, SOCK_STREAM, 0);
06     bind(listen_fd, ["127.0.0.1", 23]);
07     listen(listen_fd);
08     while (accept_fd = accept(listen_fd)) {
09         var pid = fork();
10         if (pid == 0) {
11             /* read data from accept_fd */
12             exit(0);
13         }
14         close(accept_fd);
15         wait();
16     }
17 }
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225661#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 08 Aug 2008 01:45:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225661</link>
        <guid>http://www.javaeye.com/topic/225661</guid>
      </item>
      <item>
        <title>[发布] GT-Grid 1.0 奥运版 (080808发布) ★ without doc  </title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fins.javaeye.com">fins</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225926" style="color:red;">http://www.javaeye.com/topic/225926</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于文档工作滞后<br />导致我本来放弃了今天发布的念头<br />但是还是不忍心 让这样一个特殊的日子与 GT-Grid 擦肩而过<br />所以 还是决定放出 奥运版(本来打算叫正式版,不过刚才网友提醒,叫奥运版更合适 呵呵)<br /><br />不过我只能说 这个版本的代码是正式的 , <br />但是文档依然是目前大家在网上看到的这些.<br /><br />这贴必然还会是一个 时常更新和编辑的帖子.<br />希望大家能够喜欢.<br /><img src="http://fins.javaeye.com/blog/225926" /><br /><br />我先不多说什么了 晚上看完奥运再来补充 :)<br /><br />祝福中国 祝福北京 祝福奥运 <br />祝福javaeye <br />祝福gt<br />祝福你 祝福我<br /><br /><br />============================<br /><br />具体文档请参见下面地址:<br /><a href="http://fins.javaeye.com/blog/214290" target="_blank">列表组件 GT-Grid 最新版本 & 教程</a>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225926#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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>Fri, 08 Aug 2008 17:17:50 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225926</link>
        <guid>http://www.javaeye.com/topic/225926</guid>
      </item>
      <item>
        <title>各位大大，有缺人的吗？进来看看，开个价</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangxin0072000.javaeye.com">wangxin0072000</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225963" style="color:red;">http://www.javaeye.com/topic/225963</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          北京，工作两年，普通本科，英语一般，2年java，熟悉web开发，数据库开发，socket，线程。<br />Ext 比较熟，从1.0用到2.0，不过也有大半年没用过了，其他的Ajax还用过DWR，JQuery。<br />操作系统：Linux用过半年。<br />Struts，Hibernate，Spring都用了一年多，Hibernate最熟。<br />Ruby On Rails 和python都用过，RoR是当时维护一个老外写的Web Portal。<br />由于工作需要，用python写过一些Linux定时程序，涉及的数据库和socket，httplib。<br />做过无线移动应用的开发。<br /><br />最后提一句，第一届javaeye问答大赛第四名（本来一直是第三名，保持了一周多，最后一天被超了，郁闷，我的书呀！！！）。
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225963#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Aug 2008 22:44:41 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225963</link>
        <guid>http://www.javaeye.com/topic/225963</guid>
      </item>
      <item>
        <title>潜入memcached server</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ahuaxuan.javaeye.com">ahuaxuan</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225692" style="color:red;">http://www.javaeye.com/topic/225692</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          /**<br /><br />*作者：张荣华<br /><br />*日期：2008-08-08<br /><br />**/ <br /><br />Memcached，人所皆知的remote distribute cache（不知道的可以javaeye一下下，或者google一下下，或者baidu一下下，但是鉴于baidu的排名商业味道太浓（从最近得某某事件可以看出），所以还是建议javaeye一下下），使用起来也非常的简单，它被用在了很多网站上面，几乎很少有大型的网站不会使用memcached。<br /><br />	曾经我也看过很多剖析memcached内部机制的文章，有一点收获，但是看过之后又忘记了，而且没有什么深刻的概念，但是最近我遇到一个问题，这个问题迫使我重新来认识memcache，下面我阐述一下我遇到的问题<br /><br />	问题：我有几千万的数据，这些数据会经常被用到，目前来看，它必须要放到memcached中，以保证访问速度，但是我的memcached中数据经常会有丢失，而业务需求是memcached中的数据是不能丢失的。我的数据丢失的时候，memcached server的内存才使用到60%，也就是还有40%内存被严重的浪费掉了。但不是所有的应用都是这样，其他应用内存浪费的就比较少。为什么内存才使用到60%的时候LRU就执行了呢（之所以确定是LRU执行是因为我发现我的数据丢失的总是前面放进去的，而且这个过程中，这些数据都没有被访问，比如第一次访问的时候，只能访问第1000w条，而第300w条或者之前的数据都已经丢失了，从日志里看，第300w条肯定是放进去了）。<br /><br />	带着这些疑问，我开始重新审视memcached这个产品，首先从它的内存模型开始：我们知道c++里分配内存有两种方式，预先分配和动态分配，显然，预先分配内存会使程序比较快，但是它的缺点是不能有效利用内存，而动态分配可以有效利用内存，但是会使程序运行效率下降，memcached的内存分配就是基于以上原理，显然为了获得更快的速度，有时候我们不得不以空间换时间。<br /><br />	也就是说memcached会预先分配内存，对了，memcached分配内存方式称之为allocator，首先，这里有3个概念：<br />1 slab<br />2 page<br />3 chunk<br />解释一下，一般来说一个memcahced进程会预先将自己划分为若干个slab，每个slab下又有若干个page，每个page下又有多个chunk，如果我们把这3个咚咚看作是object得话，这是两个一对多得关系。再一般来说，slab得数量是有限得，几个，十几个，或者几十个，这个跟进程配置得内存有关。而每个slab下得page默认情况是1m，也就是说如果一个slab占用100m得内存得话，那么默认情况下这个slab所拥有得page得个数就是100，而chunk就是我们得数据存放得最终地方。<br /><br />举一个例子，我启动一个memcached进程，占用内存100m，再打开telnet，telnet localhost 11211，连接上memcache之后，输入stats  slabs，回车，出现如下数据：<br /><pre name="code" class="java">STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 13107
STAT 1:free_chunks 0
STAT 1:free_chunks_end 13107
STAT 2:chunk_size 100
STAT 2:chunks_per_page 10485
STAT 2:total_pages 1
STAT 2:total_chunks 10485
STAT 2:used_chunks 10485
STAT 2:free_chunks 0
STAT 2:free_chunks_end 10485
STAT 3:chunk_size 128
STAT 3:chunks_per_page 8192
STAT 3:total_pages 1
STAT 3:total_chunks 8192
STAT 3:used_chunks 8192
STAT 3:free_chunks 0
STAT 3:free_chunks_end 8192</pre><br /><br />以上就是前3个slab得详细信息<br />chunk_size表示数据存放块得大小，chunks_per_page表示一个内存页page中拥有得chunk得数量，total_pages表示每个slab下page得个数。total_chunks表示这个slab下chunk得总数（＝total_pages * chunks_per_page），used_chunks表示该slab下已经使用得chunk得数量，free_chunks表示该slab下还可以使用得chunks数量。<br /><br />从上面得示例slab 1一共有1m得内存空间，而且现在已经被用完了，slab2也有1m得内存空间，也被用完了，slab3得情况依然如此。 而且从这3个slab中chunk得size可以看出来，第一个chunk为80b，第二个是100b，第3个是128b，基本上后一个是前一个得1.25倍，但是这个增长情况我们是可以控制得，我们可以通过在启动时得进程参数 –f来修改这个值，比如说 –f 1.1表示这个增长因子为1.1，那么第一个slab中得chunk为80b得话，第二个slab中得chunk应该是80*1.1左右。<br /><br />解释了这么多也该可以看出来我遇到得问题得原因了，如果还看不出来，那我再补充关键的一句：memcached中新的value过来存放的地址是该value的大小决定的，value总是会被选择存放到chunk与其最接近的一个slab中，比如上面的例子，如果我的value是80b，那么我这所有的value总是会被存放到1号slab中，而1号slab中的free_chunks已经是0了，怎么办呢，如果你在启动memcached的时候没有追加-M（禁止LRU，这种情况下内存不够时会out of memory），那么memcached会把这个slab中最近最少被使用的chunk中的数据清掉，然后放上最新的数据。这就解释了为什么我的内存还有40%的时候LRU就执行了，因为我的其他slab中的chunk_size都远大于我的value，所以我的value根本不会放到那几个slab中，而只会放到和我的value最接近的chunk所在的slab中(而这些slab早就满了，郁闷了)。这就导致了我的数据被不停的覆盖，后者覆盖前者。<br /><br />问题找到了，解决方案还是没有找到，因为我的数据必须要求命中率时100%，我只能通过调整slab的增长因子和page的大小来尽量来使命中率接近100%，但是并不能100%保证命中率是100%（这话怎么读起来这么别扭呢，自我检讨一下自己的语文水平），如果您说，这种方案不行啊，因为我的memcached server不能停啊，不要紧还有另外一个方法，就是memcached-tool，执行move命令，如：move 3 1，代表把3号slab中的一个内存页移动到1号slab中，有人问了，这有什么用呢，比如说我的20号slab的利用率非常低，但是page却又很多，比如200，那么就是200m，而2好slab经常发生LRU，明显page不够，我就可以move 20 2，把20号slab的一个内存页移动到2号slab上，这样就能更加有效的利用内存了（有人说了，一次只移动一个page，多麻烦啊？ahuaxuan说，还是写个脚本，循环一下吧）。<br /><br />	有人说不行啊，我的memcache中的数据不能丢失啊，ok，试试新浪的memcachedb吧，虽然我没有用过，但是建议大家可以试试，它也使利用memcache协议和berkeleyDB做的（写到这里，我不得不佩服danga了，我觉得它最大的贡献不是memcache server本身，而是memcache协议），据说它被用在新浪的不少应用上，包括新浪的博客。<br /><br />	补充，stats slab命令可以查看memcached中slab的情况，而stats命令可以查看你的memcached的一些健康情况，比如说命中率之类的，示例如下：<br /><pre name="code" class="java">STAT pid 2232
STAT uptime 1348
STAT time 1218120955
STAT version 1.2.1
STAT pointer_size 32
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 1
STAT total_connections 3
STAT connection_structures 2
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT bytes_read 26
STAT bytes_written 16655
STAT limit_maxbytes 104857600</pre><br />从上面的数据可以看到这个memcached进程的命中率很好，get_misses低达0个，怎么回事啊，因为这个进程使我刚启动的，我只用telnet连了一下，所以curr_connections为1，而total_items为0，因为我没有放数据进去，get_hits为0，因为我没有调用get方法，最后的结果就是misses当然为0，哇哦，换句话说命中率就是100%，又yy了。<br /><br />该到总结的时候了，从这篇文章里我们可以得到以下几个结论：<br />结论一，memcached得LRU不是全局的，而是针对slab的，可以说是区域性的。<br />结论二，要提高memcached的命中率，预估我们的value大小并且适当的调整内存页大小和增长因子是必须的。<br />结论三，带着问题找答案理解的要比随便看看的效果好得多。<br /><br />Ok,晚了，睡了。<br /><br /><br />注明：由于ahuaxuan水平有限，文中不妥之处还望不吝指正，谢谢。
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225692#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 08 Aug 2008 09:57:40 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225692</link>
        <guid>http://www.javaeye.com/topic/225692</guid>
      </item>
      <item>
        <title>groovy有多动态?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://regale.javaeye.com">regale</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225922" style="color:red;">http://www.javaeye.com/topic/225922</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          跟java相比，最大的差别是多了闭包，还有是类型是动态的<br />对于ruby我不熟悉，无从比较，跟javascript相比较，没有以下功能：<br />1 不能动态增、删、改方法<br />2 没有eval()动态执行的能力<br />欢迎大家补充
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225922#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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>Fri, 08 Aug 2008 17:04:22 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225922</link>
        <guid>http://www.javaeye.com/topic/225922</guid>
      </item>
      <item>
        <title>再发一些rails和数据库有意思的问题和意见</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyhu1007.javaeye.com">andyhu1007</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225946" style="color:red;">http://www.javaeye.com/topic/225946</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1. 数据库查询</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; persons = Person.find(:all, :joins =&gt; &quot;INNER JOIN accounts ON persons.id = accounts.person_id&quot;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :conditions =&gt; &quot;persons.gender = 'male' AND accounts.number &lt; 10&quot;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :select =&gt; &quot;*&quot;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 有啥问题？</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 如果persons表和accounts表有一个相同name的column，取得的persons需要reload一下才能用，不然使用时取不到那个字段的值。这是由于查询时的 ambiguous field问题引起的。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 如何解决？</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; persons = Person.find(:all, :joins =&gt; &quot;INNER JOIN accounts ON persons.id = accounts.person_id&quot;,
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :conditions =&gt; &quot;persons.gender = 'male' AND accounts.number &lt; 10&quot;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :select =&gt; &quot;<span style="color: #ff0000;"><span style="background-color: #ffffff;">persons.</span>
</span>
*&quot;)</p>
<p>&nbsp;</p>
<p>2. 关联表</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 项目开发到后期，往往会发现关联表因为汇聚越来越多的有用信息，需要实现成model。所以项目刚开始就给关联表加上id吧。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225946#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 08 Aug 2008 18:28:20 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225946</link>
        <guid>http://www.javaeye.com/topic/225946</guid>
      </item>
      <item>
        <title>我的第一个Jquery组件（jGrid）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://firefly-liu.javaeye.com">firefly_liu</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224987" style="color:red;">http://www.javaeye.com/topic/224987</a>&nbsp;
          发表时间: 2008年08月06日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>我的第一个Jquery组件（jGrid）</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224987#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 06 Aug 2008 13:47:12 +0800</pubDate>
        <link>http://www.javaeye.com/topic/224987</link>
        <guid>http://www.javaeye.com/topic/224987</guid>
      </item>
      <item>
        <title>[原创]基于词法分析的小巧的js代码格式化工具</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wmingjian.javaeye.com">wmingjian</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224675" style="color:red;">http://www.javaeye.com/topic/224675</a>&nbsp;
          发表时间: 2008年08月05日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          * 基于js语法的词法分析工作实现<br />* 代码体积非常小，并且是用js自身实现的<br />* 源码公开，可以修改源码实现特殊的格式化需求<br />下载地址：<a href="http://alztools.googlecode.com/files/js_format-0.01.zip" target="_blank">js_format-0.01.zip</a>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224675#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Aug 2008 16:45:40 +0800</pubDate>
        <link>http://www.javaeye.com/topic/224675</link>
        <guid>http://www.javaeye.com/topic/224675</guid>
      </item>
      <item>
        <title>ext2.2出来了，性能提升怎么样？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://absolute007.javaeye.com">absolute007</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225231" style="color:red;">http://www.javaeye.com/topic/225231</a>&nbsp;
          发表时间: 2008年08月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天刚看到ext2。2出来了，看见说明上有一些性能的提升，不知道到底提升程度如何啊？<br />有没有人介绍下 啊？<br />最近被ext的性能问题搞得烦死了！<br /><br />刚才仔细看了下，firefox3的问题解决了，很好，但是性能还是没有什么提升，加入那么多新功能有什么用啊 ？<br />性能没有提升，再多功能还是白搭！头疼啊！
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225231#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 07 Aug 2008 00:15:01 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225231</link>
        <guid>http://www.javaeye.com/topic/225231</guid>
      </item>
      <item>
        <title>两个Around Adivce同时通知一个方法的时候，TxAdvice没有提交事务</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://johnnylzb.javaeye.com">johnnylzb</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225935" style="color:red;">http://www.javaeye.com/topic/225935</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我现在要为一个现成的系统以AOP的形式加入一个性能日志组件，记录业务方法的时间损耗，这个性能日志组件是使用Spring配置的Around Advice方式对业务方法进行代理，但这些业务方法本身已经有一个Around Advice：Transaction Advice。<br /><br />一开始的时候，我两个Advice都没有设置优先级别，按照Spring的说法，这时候执行顺序是无法预知的，这时我发现TxAdvice并没有执行，因为事务没有提交。<br /><br />之后，我在性能日志Advice里面增加了@Order(value=0)注解，让性能日志组件优先执行，按Spring的说法，优先执行的Advice在After之后是最后执行。但这次情况还是一样，TxAdvice没有生效。<br /><br />我对SpringAOP的认识是，SpringAOP通过运行时代理来完成AOP功能，但问题是，当两个Advice同时需要通知同一个方法时，其代理是如何进行的呢？<br /><br />我的理解是：假设目标对象为Target，事务通知为TxAdvice，日志通知为LogAdvice，则在LogAdvice优先的情况下应该是这样代理：<br /><br />LogAdviceProxy 代理 TxAdviceProxy<br />TxAdvice 代理 Target<br /><br />可以理解为：TxAdvice 包住Target，LogAdviceProxy 再把TxAdvice包住。<br /><br />TargetMethod被调用时候，LogAdviceProxy 的代理方法先被调用，记录当前系统时间，然后TxAdvice被调用，开启事务，然后TargetMethod被调用，执行业务逻辑，然后TxAdvice进行事务提交，最后LogAdviceProxy记录方法执行时间差，输出日志。<br /><br />不知道我的理解是否正确，请指教，并说明一下TxAdvice失效的原因。
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225935#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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>Fri, 08 Aug 2008 17:53:43 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225935</link>
        <guid>http://www.javaeye.com/topic/225935</guid>
      </item>
      <item>
        <title>异常捕获的切面--java需要优雅吗？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hite.javaeye.com">hite</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225933" style="color:red;">http://www.javaeye.com/topic/225933</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我是je的新人，大学刚毕业，入司后就一直在看别人的代码。<br />今天看到前人的两行注释让我思考——<br />……也许我所述不是问题for YOU，但是我迷茫<br /><pre name="code" class="java">    public synchronized void putInCache(String cacheName, String key, Object value){
        CacheExt cache= getCache(cacheName);
//        if (cache == null) {
//            throw new NeedsRefreshException("Cache is not exist");
//        }
        cache.putInCache(key, value);
    }</pre><br />为什么要注释掉呢？可能是作者认为调用它的代码过滤了cache为空的可能，例如：<br /><pre name="code" class="java">   
   public synchronized boolean hasCache(String cacheName) {
        return cacheMap.getKeys().contains(cacheName);
    } 
……
    if(hasCache(cacheName)) { putInCache(……);}
……
</pre><br />但下面：<br /><pre name="code" class="java">    public synchronized Object getFromCache(String cacheName, String key){
        CacheExt cache = getCache(cacheName);
        if(cache == null)
            return null;
        try {
            return cache.getFromCache(key);
        } catch (NeedsRefreshException e) {
            cache.cancelUpdate(key);
            return null;
        }
    }</pre><br />作者又在方法内部过滤这种异常，是作者的逻辑有问题吗？<br />当面对外部对本方法调用有多种可能性，而每种可能性的处理又个不相同时，就出现这样的问题：<br />本方法不能确定外部调用是否已经过滤了异常，而自己又很迫切的需要保证这一点时，你就得在自己内部过滤掉可能的异常。但是对于许多人来说：注意防止异常的发生是基本原则(至少老师是这么教我的——)，所以对于一个充分解耦的程序来说多级的调用中，或者是分组开发里，出现这样的调用A-调用->B-调用->C-调用->D-调用->E-调用->F-调用->G的调用栈，G是最终的方法即本方法，内部有过滤，同样的A-调用->B有过滤，其他一样，既<br /><pre name="code" class="java">if (cache == null) {
            throw new NeedsRefreshException("Cache is not exist");
        }</pre><br />出现多次，判断N次（影响效率！？）。这样我看起来很不爽，这么麻烦！一点都不简约，不朴素。<br />当然，也可以不处理这样就简约了，朴素了-<br />待续……去看奥运会开幕式——
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225933#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 08 Aug 2008 17:42:34 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225933</link>
        <guid>http://www.javaeye.com/topic/225933</guid>
      </item>
      <item>
        <title>基于SVG技术进行WebGIS开发浅析</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuqiang.javaeye.com">liuqiang</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225931" style="color:red;">http://www.javaeye.com/topic/225931</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-family: 宋体;"><span style="font-size: 10.5pt; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;SVG(Scalable&nbsp;Vector&nbsp;Graphics)</span><span style="font-size: 10.5pt; color: #000000;">是<span lang="EN-US">W3C</span>组织为适应<span lang="EN-US">InternetWeb</span>应用的飞速发展需要而制定的一套基于<span lang="EN-US">XML</span>语言的二维可缩放矢量图形语言描述规范。传统的<span lang="EN-US">HTML</span>静态页面描述语言的采用的标记固定、有限且无内涵、不支持矢量图形等缺点日益暴露出来，已经越来越满足不了<span lang="EN-US">WebGIS</span>发展要求。目前网络上浒的<span lang="EN-US">MacroMiedia</span>公司提出的<span lang="EN-US">SWF</span>文件格式以其图像矢量化，文件较小及具有交互性而倍受青睐，但它相比于<span lang="EN-US">SVG</span>，还是有一些不足之处。<span lang="EN-US">XML</span>作为公认的世界未来统一格式标准已经为越来越多的领域所应用。<span lang="EN-US">SVG</span>作为<span lang="EN-US">XML</span>的一个描述矢量图形的子集的出现，为解决<span lang="EN-US">WebGIS</span>面临的静态性，数据格式多样性，平台相关的<span lang="EN-US">Web</span>内容表现和缺乏交互性，网络传输慢等问题提供了一个全新的解决方法。</span></span></p>
<p><span style="font-family: 宋体;"><span style="font-size: 10.5pt; color: #000000;">1 SVG</span><span style="font-size: 10.5pt; color: #000000;">与<span lang="EN-US">HTML</span>的比较</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">SVG</span>与<span lang="EN-US">HTML</span>相比，具有如下优点：</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(1)</span>突破了<span lang="EN-US">HTML</span>固定标记集合的约束，使文件的内容更丰富、更复杂、更容易组成一个完整的信息体系；</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(2)SVG</span>是矢量图像格式，非常适合在网络中传输和应用。一般而言，<span lang="EN-US">SVG</span>图像要比其他网络图像格式<span lang="EN-US">(</span>如<span lang="EN-US">GIF</span>，<span lang="EN-US">JPEG)</span>更小，下载速度更快；</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(3)</span>由文本构成矢量图像。其文本性使得<span lang="EN-US">SVG</span>文件有良好的跨平台性和可以通过<span lang="EN-US">DOM(Document&nbsp;Object&nbsp;Model)</span>方便的对其进行编辑，修改。另外一个很突出的优点就是<span lang="EN-US">SVG</span>文件中的文字也可以被网络搜索引擎作为关键词搜索到。</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(4)</span>具有动态交互性。<span lang="EN-US">SVG</span>图像能对用户动作做出不同响应，例如高亮、声效、特效、动画等。另外，由于<span lang="EN-US">Microsoft</span>的<span lang="EN-US">IE6.0</span>中已经集成了浏览<span lang="EN-US">SVG</span>文件的插件，这使得<span lang="EN-US">SVG</span>的浏览更加方便，容易。</span></span></p>
<p><span style="font-family: 宋体;"><span style="font-size: 10.5pt; color: #000000;">2&nbsp;SVG</span><span style="font-size: 10.5pt; color: #000000;">与<span lang="EN-US">SWF</span>的比较</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">SWF</span>与<span lang="EN-US">SVG</span>相比，其不足体现为：</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(1)SWF</span>标准的非开放性。<span lang="EN-US">SWF</span>是一个相对封闭的技术，与其他的开放标准之间没有一个完全融合的方案。随着<span lang="EN-US">XML</span>及其他开放标准的发展，<span lang="EN-US">SWF</span>的不协调性将日益突出。</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(2)SWF</span>较差的可编辑性。<span lang="EN-US">SWF</span>是<span lang="EN-US">Flash</span>的输出文件格式，作为最终的动画生成格式，其创作过程封闭在<span lang="EN-US">SWF</span>文件中，无法再进行二次编辑。对于<span lang="EN-US">SVG</span>来说，因为它是一种文本格式，用普通的编辑工具就可以打开并进行编辑。</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　<span lang="EN-US">(3)SWF</span>无法进行图像搜索。由于<span lang="EN-US">SWF</span>为非文本格式，文本不能独立于图像而存在，因此无法建立类似于<span lang="EN-US">SVG</span>的图像搜索功能。</span></span><span style="font-size: 10.5pt; color: #000000; font-family: Verdana;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　鉴于<span lang="EN-US">SVG</span>的以上特性和优点，在<span lang="EN-US">WebGIS</span>应用领域，如果将地理空间数据用<span lang="EN-US">SVG</span>格式来存储、传输和显示，那么对于获得<span lang="EN-US">WebGIS</span>服务的非专业的大众用户群，一方面可以通过各种<span lang="EN-US">SVG</span>工具来组织，发布自己的地理空间数据，从而使地理信息资源和网上其他资源一样可以被整修<span lang="EN-US">Internet</span>共享；另一方面，由于<span lang="EN-US">SVG</span>的交互性，他们也将得到更具表现力和吸引力的<span lang="EN-US">WebGIS</span>服务。</span></span></p>
<p><span style="font-family: 宋体;"><span style="font-size: 10.5pt; color: #000000;">3 SVG</span><span style="font-size: 10.5pt; color: #000000;">与<span lang="EN-US">VRML</span>的比较<span lang="EN-US"> </span></span></span></p>
<p style="text-indent: 21pt;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">虚拟现实建模语言是用来描述三维交互场景和实体的一种文件格式。用于联接全球网（<span lang="EN-US">WWW</span>）。它可以用于创建复杂场景的三维表示，如装饰图像，产品设计和虚拟现实实现。同<span lang="EN-US">Java 3D</span>一样，<span lang="EN-US">VRML</span>也是遵循<span lang="EN-US">OpenGL</span>标准的。<span lang="EN-US">OpenGL</span>是近年来发展起来的一个性能卓越的三维图形标准，它是在<span lang="EN-US">SGI</span>等多家世界闻名的计算机公司的倡导下，以<span lang="EN-US">SGI</span>的<span lang="EN-US">GL</span>三维图形库为基础制定的一个通用共享的开放式三维图形标准。<span lang="EN-US">VRML</span>在其描述中也采用了节点树的表达方式。与<span lang="EN-US">VRML</span>不同的是，<span lang="EN-US">SVG</span>是专门针对二维场景而推出的一种基于是<span lang="EN-US">XML</span>标准的标记言语，对三维场景它显然无能为力。另一方面，<span lang="EN-US">VRML</span>并不是基于<span lang="EN-US">XML</span>标准的，这对我们实现三维<span lang="EN-US">OpenGIS</span>也是一个不利因素。</span></span></p>
<p><span style="font-family: 宋体;"><span style="font-size: 10.5pt; color: #000000;">4 SVG</span><span style="font-size: 10.5pt; color: #000000;">与<span lang="EN-US">GML</span>、<span lang="EN-US">VML</span>、<span lang="EN-US">PGML</span>的比较<span lang="EN-US"> </span></span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">矢量标识语言<span lang="EN-US">(VML),</span>精度图像标识语言<span lang="EN-US">(PGML)</span>都是作为<span lang="EN-US">W3C</span>的矢量图像初始标准在<span lang="EN-US">1998</span>年提出的。<span lang="EN-US">VML</span>和<span lang="EN-US">PGML</span>在很多地方非常的类似，但<span lang="EN-US">VML</span>比较适合一些普通矢量图像，而<span lang="EN-US">PGML</span>可以做出更加丰富多彩，适合专业设计和公众出版的图像。为了进一步促进图像标准的发展，<span lang="EN-US">W3C</span>成立了<span lang="EN-US">SVG</span>工作组。<span lang="EN-US">SVG</span>工作组将<span lang="EN-US">VML</span>和<span lang="EN-US">PGML</span>的优势结合在了一起，重新推出了新的标准矢量格式，这就是<span lang="EN-US">SVG</span>。<span lang="EN-US">GML</span>、<span lang="EN-US">SVG</span>、<span lang="EN-US">VML</span>都与矢量图形有着密切的关系：<span lang="EN-US">GML</span>在表示实体的空间信息的同时加入了实体的其他属性信息，是表示实体的空间信息和属性的编码标准，但它并不支持直接显示图形。而<span lang="EN-US">VML</span>和<span lang="EN-US">SVG</span>是在表示图形的矢量信息同时加入了图形的显示信息（即以什么样的样式显示矢量图形），是显示矢量图形的两种比较好的格式。相比之下，<span lang="EN-US">SVG</span>是综合了<span lang="EN-US">VML</span>的优点后推出的，是国际标准，它比<span lang="EN-US">VML</span>具有更多的优点，也有更广阔的前景。</span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">基于<span lang="EN-US">SVG</span>的系统主要由<span lang="EN-US">Web</span>服务、<span lang="EN-US">GIS</span>服务和数据存储三部分的关键技术构成，采用基于<span lang="EN-US">B/S</span>方式的三层体系结构，</span><span style="font-family: 宋体;">整个工作流程如下：</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　（<span lang="EN-US">1</span>）客户端向<span lang="EN-US">Web</span>服务器发出服务请求；<span lang="EN-US">Web</span>服务器接收到请求后，分析调用请求。如果只是普通的网页服务就由<span lang="EN-US">Web</span>服务器直接处理；如果是<span lang="EN-US">GIS</span>服务请求，则向下连接<span lang="EN-US">GIS</span>服务器。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　（<span lang="EN-US">2</span>）在<span lang="EN-US">GIS</span>服务器中，根据调用请求，在其中完成空间数据到<span lang="EN-US">GML</span>文件的格式转换，以及<span lang="EN-US">GML</span>文件到<span lang="EN-US">SVG</span>文件的转换，并转回<span lang="EN-US">Web</span>服务器。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　（<span lang="EN-US">3</span>）<span lang="EN-US">Web</span>服务器把<span lang="EN-US">GIS</span>服务器传回的<span lang="EN-US">SVG</span>文件发送给客户端，在客户端的浏览器中进行显示，利用<span lang="EN-US">JavaScript</span>脚本语言实现地图的操作和交互功能。 </span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><br /></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">　　整个系统功能的实现主要分为服务器端和客户端的技术实现，在服务器端主要由<span lang="EN-US">Web</span>服务器和<span lang="EN-US">GIS</span>服务器组成。其中，<span lang="EN-US">Web</span>服务器主要负责与客户端的连接，并提供普通的<span lang="EN-US">Web</span>服务，当客户端需要<span lang="EN-US">GIS</span>服务时才连接<span lang="EN-US">GIS</span>服务器；<span lang="EN-US">GIS</span>服务器主要负责与空间数据的连接与管理。对于多源异构的空间数据，在<span lang="EN-US">GIS</span>服务器中进行数据格式的转换，最终生成<span lang="EN-US">SVG</span>文件并传回给<span lang="EN-US">Web</span>服务器，由<span lang="EN-US">Web</span>服务器再传回到客户端进行显示。本文主要讨论了客户端的<span lang="EN-US">SVG</span>图像展示和交互操作的实现。</span><span lang="EN-US"><br /></span><span style="font-family: 宋体;">　　在客户端安装<span lang="EN-US">Adobe</span>公司的<span lang="EN-US">SVG</span>插件，在客户端使用<span lang="EN-US">SVG</span>技术，结合<span lang="EN-US">JavaScript</span>脚本语言实现基本的<span lang="EN-US">Web GIS</span>功能，包括地图平移、放大、缩小、图层的管理、地图的交互性显示以及对图层属性的查询等。整个系统基于矢量图形，在放大和缩小的情况下，图形显示质量好；能无级放大和缩小，实现了对测线属性和测线二维反演图的查询；能分别管理各个图层的显示与隐藏，并实现了对工作区的交互显示。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br />1 </span>地图的平移</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　地图向左平移功能的实现代码，与其他平移方法代码类似，主要是利用<span lang="EN-US">currentPosition</span>变量的增加和减少进行平移操作。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">function hori</span>－<span lang="EN-US">move(evt){</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">viewBox=SVGRoot.getAttribute(&prime;viewBox&prime;);</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">var viewVals=viewBox.split(&prime; &prime;);</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">currentPosition=parseFloat(viewVals[0]);</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">if (goLeft==true){//</span>地图向左移动</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">if (currentPosition</span>＜<span lang="EN-US">0</span>．<span lang="EN-US">1){</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">currentPosition=currentPosition+0.1;</span></span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">}</span></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;"></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">goLeft=false;</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">viewVals[1]=currentPosition;</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVGRoot.setAttribute(&prime;viewBox&prime;,viewVals.join(&prime; &prime;));</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span> </span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><br /><span style="font-family: 宋体;">2 </span></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">地图的缩放</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　地图放大<span lang="EN-US">/</span>缩小的实现代码，主要利用<span lang="EN-US">currentScale</span>变量进行图形的扩大和缩小变化。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">function zoomIn(){</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">if (SVGRoot.currentScale</span>＜<span lang="EN-US">5){ //</span>地图放大</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVGRoot.currentScale=SVGRoot.currentScale*1.5;</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">function zoomOut(){</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">if (SVGRoot.currentScale&gt;0.3){ //</span>地图缩小</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVGRoot.currentScale=SVGRoot.currentScale*0.5;</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span> </span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><br /><span style="font-family: 宋体;">3 </span></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">图层的人机交互</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVG</span>采用基于<span lang="EN-US">XML</span>的<span lang="EN-US">DOM</span>文档管理结构可以很方便地实现层次管理。〈<span lang="EN-US">g</span>〉〈<span lang="EN-US">/g</span>〉代表一个组，<span lang="EN-US"> GIS</span>中的一个专题图层存储在一个组中，每个组都有一个唯一标志<span lang="EN-US">ID</span>属性。根据这个<span lang="EN-US">ID</span>属性就可以通过<span lang="EN-US">JavaScript</span>控制不同图层的显示和隐藏，并且<span lang="EN-US">SVG</span>图形支持事件编程，可以很容易地实现对<span lang="EN-US">onclick()</span>或<span lang="EN-US">onmouseover()</span>等事件的编程。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　图层的隐藏和显示功能主要是利用<span lang="EN-US">setAttribute</span>函数对<span lang="EN-US">visibility</span>参数赋予<span lang="EN-US">hidden</span>属性或<span lang="EN-US">visible</span>属性。部分实现代码如下：</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">function vis_hid(id){ //</span>显示或隐藏图层获得所选图层对象</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">var SVGstyle=SVGDoc.getElementById(id);</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">if(SVGstyle.getAttribute("visibility")=="visible")</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">{</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">//</span>隐藏该图层</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVGstyle.setAttribute("visibility"</span>，<span lang="EN-US">"hidden");</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">} else {</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">//</span>显示该图层</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">SVGstyle.setAttribute("visibility"</span>，<span lang="EN-US">"visible");</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　</span><span style="font-family: 宋体;"><span lang="EN-US">} <br /></span>　　<span lang="EN-US">}</span> </span></span></p>
<p><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">&nbsp;</span></span></p>
<p><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">4 </span></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">查询功能的实现</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　该模块主要对金沙遗址的测线编号进行查询，输出该测线的电性结构剖面图或描述字段信息，以方便探测人员利用该<span lang="EN-US">Web GIS</span>平台进行考古探测数据的管理。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　查询测线的属性字段主要根据测线的<span lang="EN-US">ID</span>号，利用<span lang="EN-US">getElementById()</span>函数进行查询；利用<span lang="EN-US">getAttribute ()</span>函数得到测线的属性字段内容。结果如图<span lang="EN-US">3</span>和<span lang="EN-US">4</span>所示，分别为查询测线的反演图和测线的数据说明。</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">//</span>从表单中获得要查询的<span lang="EN-US">ID</span>号</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">function showattrib(value){</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">//</span>获得符合<span lang="EN-US">ID</span>号内容的对象</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　</span><span style="font-family: 宋体;"><span lang="EN-US">var SVGid=SVGDoc.getElementById(value) <br /></span>　　</span><span style="font-family: 宋体;"><span lang="EN-US">var new_window=window.open("","query" ,"height=133, <br /></span>　　<span lang="EN-US">width=450");</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">//</span>显示该对象的<span lang="EN-US">describe</span>字段内容</span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">new_window.document.writeln(SVGid.getAttribute("describe"));</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">new_window.focus();</span></span><span style="font-family: 宋体;"><span lang="EN-US"> <br /></span>　　<span lang="EN-US">}</span></span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">SVG</span></span><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">技术不仅用于地图的展示，任何矢量图形都可以使用该技术。基于该技术的图像具有图形美观、文件标准统一、可读性强、灵活易用等特点。个人觉得<span lang="EN-US">SVG</span>技术在<span lang="EN-US">WebGIS</span>及互联网上的矢量图形发布中将具有广阔的应用前景。</span><span lang="EN-US"><br style="mso-special-character: line-break;" /><br style="mso-special-character: line-break;" /></span></span></p>
<p style="text-indent: 26.25pt; mso-char-indent-count: 2.5;"><span style="font-size: 10.5pt; color: #000000;"><span style="font-family: 宋体;">&nbsp;</span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225931#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Fri, 08 Aug 2008 17:38:52 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225931</link>
        <guid>http://www.javaeye.com/topic/225931</guid>
      </item>
      <item>
        <title>DBExplorer0.2版发布 向北京奥运献礼</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cnetwei.javaeye.com">cnetwei</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225929" style="color:red;">http://www.javaeye.com/topic/225929</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: small;"><span style="font-size: medium; color: #008000;"><strong>向北京奥运献礼，DBExplorer0.2版发布</strong></span> </span></p>
<p><br /><span style="font-size: small;">DBExplorer开发团队，非常高兴的宣布，经过一段时间的工作，DBExplorer0.2版正式发布，并藉此祝福北京奥运。 <br />本次版本有以下内容的更新及改变： <br />1、全面开放源码，并添加Maven构建支持，您可以从</span><a href="http://code.google.com/p/jdbexplorer/source/checkout" target="_blank"><span style="font-size: small;">SVN</span></a><span style="font-size: small;">获取，或直接</span><a href="http://jdbexplorer.googlecode.com/files/DBExplorer_0.2.rar" target="_self"><span style="font-size: small;">下载</span></a><span style="font-size: small;">； <br />2、降低JDK依赖版本到1.5，降低Tomcat依赖版本到5.x; <br />3、添加SQLEditor 编辑器支持语法高亮（目前仅支持IE）； <br />4、添加对IBM-DB2数据库支持； <br />5、添加创建表结构的功能； <br />6、添加主键字段图标标识； <br />7、添加copy DBTree节点到剪贴板的功能 <br />8、添加执行批量SQL（.sql文件）的功能； <br />9、添加消息面板到SQL查询窗体； <br />10、修正了在grid 字段forceFit的问题; <br />11、修正了主键为非数值类型时出错的BUG; <br />13、修正了不支持多个主键（联合主键）的BUG； <br />14、EXT升级到2.2 <br /><br />另外为方便大家了解系统结构，我们还提供了一个系统架构的文档，欢迎大家浏览：</span><a href="http://groups.google.com/group/dbexplorer/web/dbexplorer-architecture" target="_blank"><span style="font-size: small;">DBExplorer_Architecture</span></a><span style="font-size: small;"> <br /><br />更多内容请访问：</span><a href="http://groups.google.com/group/dbexplorer/"><span style="font-size: small;">http://groups.google.com/group/dbexplorer/</span></a><span style="font-size: small;">&nbsp;&nbsp;&amp;&nbsp; </span><a href="http://code.google.com/p/jdbexplorer/"><span style="font-size: small;">http://code.google.com/p/jdbexplorer/</span></a>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225929#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Aug 2008 17:25:29 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225929</link>
        <guid>http://www.javaeye.com/topic/225929</guid>
      </item>
      <item>
        <title>rails有趣的性能问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyhu1007.javaeye.com">andyhu1007</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225641" style="color:red;">http://www.javaeye.com/topic/225641</a>&nbsp;
          发表时间: 2008年08月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 今天遇到两个有趣的性能问题。</p>
<p>&nbsp;</p>
<p>&nbsp; 1. 把所有数据都读取到一个数组，然后在内存层面去操作，每次从数组中查找一个对象耗时：0.02秒。因为数据太多，性能严重不行，完成整个操作要30分钟。试着改成每次都从数据库去find的方式来操作，每次查询也只耗时0.02秒，而且还要比内存层面的操作稍快。加个index，速度立马提升一个数量级，整个操作只需3分钟。cool！</p>
<p>&nbsp;</p>
<p>&nbsp; 2. 一个update操作，因为数据较多，耗时将近10分钟。看了一下，一个n方的算法完全可以改成n的。后来直接改成sql去update，耗时不超过1秒钟。</p>
<p>&nbsp;</p>
<p>&nbsp; 当然，为了性能问题，写一堆一堆的sql，或许就是噩梦的开始。</p>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225641#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 07 Aug 2008 22:47:13 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225641</link>
        <guid>http://www.javaeye.com/topic/225641</guid>
      </item>
      <item>
        <title>Java报表工具打印方案集锦 </title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jatools.javaeye.com">jatools</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225912" style="color:red;">http://www.javaeye.com/topic/225912</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本文试图对市面上流行的纯java实现的web报表工具，jasperreport 、 stylereport 、杰表、润乾报表、快逸、finererport为例，分析各报表工具采用的web打印技术的异同、优劣、及对用户需求的适应性，供大家参考。<br /><br />打印是报表工具的基本功能之一，有些报表工具就是从一个专门的打印程序中发展而来，如用友华表。因为想当然地简单，所以，在报表工具选型时用户常常忽略这个问题，特别是有些报表工具厂商，明知自己的打印方案在满足某些需求时，存在缺陷，但没有尽明确告知义务，而故意事先做好花里胡哨的有关打印方面的文档，欺骗客户。我曾不至一次地听说，有些开发商选用的报表工具，其打印功能不能满足需求，不得不另外找打印工具的事情，实在是吃尽苦头。<br /><br />报表打印在c/s时代，确实非常简单，vb,vc,Delphi,pb,都有很好用的打印api，有的甚至用报表控件方式，搞定打印更是分分秒的事情，但今天是b/s的天下，报表都是在网页浏览器中显示，但当今的浏览器打印功能一般非常弱(谁让你叫他“浏览”器呢？“浏览”就是让你用眼睛看，“打印”属于兼职)，要做到精确分页打印，几乎不可能，所以当前的报表工具，一般不会让你使用浏览器的打印菜单来打印报表，都有自己的解决方案，这下可好，各报表工具厂商由是乎，八仙过海，各显神通，各家都说自己的好，对于web打印了解不深的客户，总有雾里看花的感觉。<br /><br />归纳来说，当今java报表工具采用的打印技术不外乎三类：Applet打印、导出成pdf/excel打印、控件打印。用户选用的重点是：尽量选择插件小的打印软件，因为文件小意味着安装迅速，启动速度快。插件大小除了插件本身的大小外，还需要考虑支持软件的大小，如有些插件很小，支持软件却很大。<br /><br /><strong>Applet打印</strong><br /><br />本文开始处提及的报表工具，除finereport外都支持Applet打印。之所以多数厂商支持Applet方式打印，因为Applet是java实现，与java后台、java报表设计器的兼容性较好，代码容易维护，实现也方便。然而，厂商省事，用户就得多事。Applet方式打印，用户最多的抱怨是需要安装jre（而当前的操作系统，一般不是默认安装的），虽然说，多数厂商已经做到可以自动安装jre，但对于10几M(JRE1.4有15M，JRE1.5为16M))的安装，这意味着用户需要较长时间的等待。<br /><br />另一个问题是Applet配置复杂，使用不稳定。1995年，正是因为给人们无穷的视觉和脑力震荡的Applet ，使人们认识了java，认识了Games Gosling。所以在b/s早期，人们为了展现html的富客户效果，Applet是唯一之选。但现如今，Applet已经是昨日黄花，早已被ajax、flex取代，是什么原因？战略层面的东西，我也不太说得清楚，但作为程序员，经过几番折腾后，也不会愿意再用Applet了。如经常莫名其妙地出现“小应用程序，… notinited”的错误，还得清理ie缓存，对于Applet打印，还需要设置jre的安全策略等等。不是靠终端用户能完成的，这就必须额外地增加开发商的服务成本。<br /><br />Applet打印，启动速度慢。Applet打印原理是，当你点击打印按钮时，浏览器启动Applet，Applet根据参数访问后台页面信息，后台返回页面，Applet加载页面后，调用jre的打印服务进行打印。这就意味着，每次打印都需要调用后台服务程序，就必然影响打印的响应速度。<br /><br />Applet打印很安全，言下之意是ActiveX打印不安全，这是采用Applet打印的厂商津津乐道的，实际上，这是一个伪命题。Applet和ActiveX都是浏览器的插件，我们当然不希望下载插件后，该插件可以为所欲为，比如，删除你磁盘里的文件，或启动一个木马，从这点来说，Applet确实比ActiveX安全，因为Applet是在一个受限的环境里运行，而ActiveX是不受限的。所以，当你访问一个陌生的网站时，出于安全考虑，你可能会允许下载运行Applet，而阻止ActiveX。但当用户访问自己的网站系统,时，这种担心就没必要，这好比，当你与陌生人打交道时，很自然地会问自己，这人可信嘛？但如果你与家里人打交道，这个问题就不成其为问题了。<br /><br />Applet打印，除了可以设置打印机，设置纸张页面大小等常规打印功能外，往往也集成与打印不相关的功能，比如，打印前修改（有人说，是为了做假帐方便，中国特色，国产报表工具一般都具备,jasperreport,stylereport不支持），按行分页，自由定位，这些本来由设计器完成的功能，挪到打印功能上来，来掩盖上面指出的Applet的种种不足。实际上，Applet功能强弱完全取决于Applet的大小，有些报表厂商甚至用Applet或web start 的方式，提供所谓的基于web的报表设计，前提是下载 40多M的jar包，实际上，这种方案远非一般意义上的纯web 的报表设计，完全是混淆概念。作为用户最希望常规的，他们熟悉的打印功能，不需要不相关的，理解困难的打印功能。<br /><br /><strong>PDF/EXCEL打印</strong><br /><br />Pdf打印方式，就是用户点击打印后，浏览器会自动弹出adobe reader，再利用adobe的打印按钮进行打印，由于国外adobe reader安装非常普及，国外的java报表工具多提供这种打印方案，比如 stylereport，jasperreport，国内报表工具finereport也采用这种方式(让人不解)，pdf方式打印的好处是能做到精确打印，而且报表预览与打印一气呵成。但不足是需要在客户的机子里，事先安装有adobe reader，作为程序员，一般不太会有问题，因为程序员可能经常要浏览一些pdf文档，多数已经装了adobe reader，但国内的终端用户，大多不知pdf是何物，更谈不上安装。<br /><br />Pdf打印的另一个问题是必须弹出adobe reader，不能做到无预览打印，这可能由于pdf缺少相应api的缘故吧。<br /><br /><strong>轻量级的ActiveX打印</strong><br /><br />这里之所以强调“轻量级”，目的是与传统意义上的ActiveX报表相区别。ActiveX技术可以说是报表工具家族里的没落贵族，c/s时代，报表工具一般都被做成控件形式，水晶报表就是如此，在b/s时代，报表工具里仍然能看到ActiveX的身影，但风光大不如从前，如数巨，明宇，用友华表，inforeport。用ActiveX实现报表的不足，在网上你能轻易找到，在此不再详述。ActiveX 报表虽深受诟责，但从打印功能来说，却都是近乎完美，处理得却非常好，非常稳定。<br /><br />既然，ActiveX打印是长处，能不能扬长避短地使用ActiveX技术？有人提出这样的问题。于是，有些厂商，比如杰表，采用了浏览时用html，打印时用插件的方式。这种方案的需要解决的问题是，ActiveX打印控件，不能太大，否则报表工具成了ActiveX报表了。<br /><br />与Applet相比，轻量级ActiveX打印具有以下优势：<br /><br />1. 下载时间短，（大小是Applet的1/250）；<br /><br />2. 本地打印，打印时，不需要访问后台服务程序，不占用服务器资源；<br /><br />3. 启动速度快，由于控件小，且本地打印，所以打印速度是优于以上两中打印方案，打印速度与你点击浏览器打印菜单相差无几。<br /><br />采用轻量级的ActiveX打印的不足是，只有ie 5.5 及以上版本支持，其他版本的浏览器不支持。好在ie5.5浏览器已非常普及，在用户那里应该不是大问题。<br /><br />杰表采用的打印方案，用一个jatoolsPrinter的控件，大小是60k，是经过数字签名的。这个打印控件采用ie特有的打印技术（templateprinter）实现打印功能，支持打印，预览，边距设置，重复打印，批量打印功能。<br /><br />目前，jatoolsPrinter已经从杰表中独立出来，任何报表工具或第三方软件都利用该控件，实现web打印，推出至今，免费加收费用户上万。<br /><br />下表总结三种方式的采用者及优劣对比，对于ie5.5客户来说,我们推荐使用ActiveX打印方案.<br /><br /><img src="http://www.jatools.com/tech/print.gif" /><br />报表厂商列表<br /><br /><a href="http://jasperreports.sourceforge.net" target="_blank">jasperreport </a><br /><a href="http://www.inetsoft.com.cn/" target="_blank">Stylereport </a><br /><a href="http://http://www.jatools.com" target="_blank">杰表</a><br /><a href="http://www.runqian.com.cn/" target="_blank">润乾</a><br /><a href="http://www.quiee.com.cn/" target="_blank">快逸</a><br /><a href="http://www.finereport.com/" target="_blank">finererport</a>
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225912#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Aug 2008 16:35:57 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225912</link>
        <guid>http://www.javaeye.com/topic/225912</guid>
      </item>
      <item>
        <title>请教一个Python打包的问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bromon.javaeye.com">bromon</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/225910" style="color:red;">http://www.javaeye.com/topic/225910</a>&nbsp;
          发表时间: 2008年08月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我写了一个简单的GUI程序，它利用SOAPpy Module去调用一个web service，调试都已经通过没有问题。<br /><br />我用cx_freeze打包这个程序之后，执行生成的exe文件，在进行web service调用时，会产生错误：<br /><br />SaxReaderNotAvailable no parsers found<br /><br />详细的错误信息我无法拷贝，只能截图了。<br /><br />google过这个错误，目前还没有看到明确的答案和解决办法，所以请大家帮忙了。<br /><br />我各人觉得，应该是cx_freeze在打包的时候遗漏了一些Module，可能是PyXML、fpconst 或SOAPpy中的一些东西。更详细的就不知道了。
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/225910#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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>Fri, 08 Aug 2008 16:30:43 +0800</pubDate>
        <link>http://www.javaeye.com/topic/225910</link>
        <guid>http://www.javaeye.com/topic/225910</guid>
      </item>
      <item>
        <title>关于EXT的Portal保存布局的问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tq04q5k.javaeye.com">tq04q5k</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224521" style="color:red;">http://www.javaeye.com/topic/224521</a>&nbsp;
          发表时间: 2008年08月05日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看了几位大侠的例子还是没搞明白如何保存Portal的布局和状态，触发事件的资料也很少。<br /><br />我想能不能给我一个小例子，说明下原理，Portal里的子节点好像和一般的DD实例都不一样，<br /><br />保存的时候光是用Manager是没法保存的。<br /><pre name="code" class="java">
Ext.namespace("myzone.app");

myzone.app.Portaldemo = function() {

	/* ----------------------- private properties ----------------------- */
	var portId = 'app-portal-demo-res-portal';
	var settingId = 'app-portal-demo-ext-div';

	var portalState;
	var portalMgr;

	var tools = [{

		id : 'maximize',
		handler : handleMaximize
	}, {
		id : 'close',
		handler : function(e, target, panel) {
			panel.ownerCt.remove(panel, true);
		}
	}];

	/* ----------------------- private method ----------------------- */
	function handleMaximize(event, toolEl, panel) {
		panel.originalOwnerCt = panel.ownerCt;
		panel.originalPosition = panel.ownerCt.items.indexOf(panel);
		panel.originalSize = panel.getSize();

		if (!toolEl.window) {
			var defaultConfig = {
				id : (panel.getId() + '-MAX'),
				width : (Ext.getBody().getSize().width - 100),
				height : (Ext.getBody().getSize().height - 100),
				resizable : true,
				draggable : true,
				closable : true,
				closeAction : 'hide',
				hideBorders : true,
				plain : true,
				layout : 'fit',
				autoScroll : false,
				border : false,
				bodyBorder : false,
				frame : true,
				pinned : true,
				y:80,
				bodyStyle : 'background-color: #ffffff;'
			};
			toolEl.window = new Ext.Window(defaultConfig);
			toolEl.window.on('hide', handleMinimize, panel);
		}
		if (!panel.dummyComponent) {
			var dummyCompConfig = {
				title : panel.title,
				width : panel.getSize().width,
				height : panel.getSize().height,
				html : '&nbsp;'
			};
			panel.dummyComponent = new Ext.Panel(dummyCompConfig);
		}

		toolEl.window.add(panel);
		if (panel.tools['toggle'])
			panel.tools['toggle'].setVisible(false);
		if (panel.tools['close'])
			panel.tools['close'].setVisible(false);
		panel.tools['maximize'].setVisible(false);

		panel.originalOwnerCt.insert(panel.originalPosition,
				panel.dummyComponent);
		panel.originalOwnerCt.doLayout();
		panel.dummyComponent.setSize(panel.originalSize);
		panel.dummyComponent.setVisible(true);
		panel.dummyComponent.getEl().mask('it is maximized');
		toolEl.window.show(this);
	};

	function handleMinimize(window) {
		this.dummyComponent.getEl().unmask();
		this.dummyComponent.setVisible(false);
		this.originalOwnerCt.insert(this.originalPosition, this);
		this.originalOwnerCt.doLayout();
		this.setSize(this.originalSize);
		this.tools['maximize'].setVisible(true);
		if (this.tools['toggle'])
			this.tools['toggle'].setVisible(true);
		if (this.tools['close'])
			this.tools['close'].setVisible(true);
	}
	
	function createLayout() {

		new Ext.Panel({

			renderTo : "Header",
			width : 1000,
			height : 170,
			frame : true,
			layout : 'column'
		});

		new Ext.Panel({

			renderTo : "Footer",
			width : 1000,
			height : 150,
			frame : true,
			autoLoad : './footer.jsp'
		});

		new Ext.Panel({

			frame : true,
			renderTo : "PageBody",
			width : 1000,
			height : 1500,
			layout : 'border',
			// bodyStyle : 'x-layout-collapsed-north',
			items : [{
				region : 'north',
				split : true,
				height : 100,

				width : 800,
				title : '模块设置',
				frame : true,
				collapsed : true,
				collapsible : true,
				/* 动画效果收缩的时间 */
				expandDefaults : {
					duration : .75
				},
				collapseDefaults : {
					duration : .85
				}
			}, {
				xtype : 'portal',
				region : 'center',
				margins : '5 5 5 5',

				items : [{
					columnWidth : .25,
					style : 'padding:10px 0 10px 10px',
					items : [{

						title : '&lt;img src="../../images/icon/ico_clock.gif">时钟',
						html : '&lt;embed src="http://localhost:8080/YiZhong/flash/clock.swf" width="120" height="40" type="application/x-shockwave-flash" wmode="transparent" style=" margin-top:15px; margin-left:50px">&lt;/embed>',
						tools : tools,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						},
						height : 100
					}, {

						title : '&lt;img src="../../images/icon/ico_person.gif">个人档案',
						tools : tools,
						height : 400,

						autoLoad : './c_userthing.html',
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_blogtype.gif">日志分类',
						tools : tools,
						height : 300,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_newgroup.gif">近期圈子活动',
						tools : tools,
						height : 350,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_tj.gif">个人统计',
						tools : tools,
						height : 150,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}]
				}, {
					columnWidth : .5,
					style : 'padding:10px 0 10px 10px',
					items : [{
						title : '&lt;img src="../../images/icon/ico_blogc.gif">个人日志',
						tools : tools,
						html : "",
						height : 600,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_ghot.gif">圈子热帖',
						tools : tools,
						height : 350,
						// autoLoad:'http://localhost:8080/YiZhong/flash/photo/index.htm',
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_note.gif">留言板',
						tools : tools,
						html : "",
						height : 370,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}]
				}, {

					columnWidth : .25,
					style : 'padding:10px',
					items : [{
						title : '&lt;img src="../../images/icon/ico_seo.gif">搜索',
						tools : tools,
						html : '',
						height : 150,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_online.gif">在线好友',
						tools : tools,
						html : "",
						height : 350,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_renote.gif">最新评论',
						tools : tools,
						html : "",
						height : 440,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}, {
						title : '&lt;img src="../../images/icon/ico_nvi.gif">最近访客',
						tools : tools,
						html : "",
						height : 370,
						expandDefaults : {
							duration : .75
						},
						collapseDefaults : {
							duration : .85
						}
					}]
				}]
			}]

		});
	}//creatLayour
	
	/* ----------------------- public method ----------------------- */
	return{
	
		init : function(){
		
			Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
			
			createLayout();
			
			portalState = new myzone.app.PortalState();
			
			portalState.init(portId);
			
			
		}
	};
}();

Ext.onReady(myzone.app.Portaldemo.init,myzone.app.Portaldemo);
</pre><br /><br />我送用的Portal是EXT官方那个Portal2的js文件
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224521#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 05 Aug 2008 13:37:12 +0800</pubDate>
        <link>http://www.javaeye.com/topic/224521</link>
        <guid>http://www.javaeye.com/topic/224521</guid>
      </item>
      <item>
        <title>在Struts2中应用FreeMarker还是Velocity好？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://newchengse.javaeye.com">newchengse</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/224937" style="color:red;">http://www.javaeye.com/topic/224937</a>&nbsp;
          发表时间: 2008年08月06日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　我采用Struts2作ＭＶＣ框架，想考虑应用一种模板技术来美化页面，目前在FreeMarker和Velocity之间选择，拿不定主意，想听听大伙的意见。<br />　　我先来说说我了解到的情况：<br />Velocity优点：<br />1.采用简单而强大的模板语言ＶＴＬ来渲染页面，能保证在Dreamwaver之类的可视化编辑器中正常显示。<br />2.模板可以是任意扩展名，采用.html也可以，这样就能直接在浏览器中看到效果。<br />3.渲染速度快。<br />Velocity缺点：<br />1.不是JavaEE标准，文档较少。<br />2.ＶＴＬ语法需要一定上的学习时间，尽管相对较容易。<br /><br />FreeMarker优点：<br />1.Struts2默认采用（是否溶合起来比Velocity更容易？）<br />2.具有一些编程能力，虽然有限，只能提供一些数据格式的轮换功能。<br />3.与WEB容器无关，除了ＨＴＭＬ，也可以生成各种文本，如ＸＭＬ、ＲＴＦ、Ｊａｖａ源代码等。<br />FreeMarker缺点：<br />1.freemarker的map限定key必须是string，不支持其他数据类型。（对我的应用好象影响不大）<br />2.freemarker的变量必须有值，没有被赋值的变量就会抛出异常。程序里面几乎所有可能出现空值的变量统统需要加上${xxx?if_exists}，有些循环条件还需要写if判断。<br />3.不能在群集上面发布应用。freemarker支持在页面里面直接操作Session，request等，例如${Session[...]}，但不能对其序列化。（这个对我也不是问题，作为企业里的小应用，我就不用群集）
          <br/>
          <span style="color:red;">
            <a href="http://apusiczhang.javaeye.com/topic/224937#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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/>
       