<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye博客</title>
    <description>Java博客,Ruby on Rails博客,AJAX博客,Agile博客 -- JavaEye做最棒的软件开发交流社区</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>也谈刘翔</title>
        <author>lxf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lxf.javaeye.com">lxf</a>&nbsp;
          链接：<a href="http://lxf.javaeye.com/blog/230335" style="color:red;">http://lxf.javaeye.com/blog/230335</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>看了那么多国人对这个事件的揣测和解释，真是感叹中国人的想象力就是丰富。还有人把刘翔的比赛号码1356号说成13亿人56个民族的期望呢。<br />
<br />
讲讲我自己的感受吧：8月18日中午12:00得知这个消息时，我的反应是震惊而不是理解。当时淮海路上的液晶广告牌上仍然在放着刘翔为耐克代言的广告，我盯着这个广告，久久不能释怀。<br />
<br />
其实，我在上周末看新浪新闻时已经知道了刘翔有伤，但却根本没往心里去。刘翔的团队怎么可能让他在这个时候还受伤病困扰呢，最多只是小伤无大碍罢了。我不知道大多数记者们当时是不是也是这种心态。<br />
<br />
作为一个搞技术的人我喜欢分析问题。作为一个运动员，最大的惩罚是不能上赛场。要不然对吃药的人为什么不罚款而是禁赛？至少我认为刘翔是无奈。至于是不是事先安排好的，新浪有一篇报道，大意是说17日晚和18日早，孙海平已经和体育总局的领导讨论过刘翔伤势的严重性，体育总局的指示是由刘翔自己决定。18日的预赛，刘翔是跑了，不过第一枪有人抢跑，我查了一下秩序册，这个小组其他人都是老外，难道是刘翔抢跑了？想去看视频，但觉得很无聊，这样分析下去没有什么意义。<br />
<br />
昨晚（8月19日）看了史东鹏的第二轮赛后接受采访，看他为刘翔泣不成声。作为刘翔的队友和对手应该对刘翔有足够的了解吧，史东鹏能为刘翔如此动情，我觉得刘翔和孙海平不象某些人所说的那么差。<br />
<br />
最后想说的是，这件事永远也说不清，一百个人有一百个看法。刘翔唯一需要做的是在将来证明自己。还记得当年的迈克尔.约翰逊吗？他在那场和贝利的150米的荒唐比赛中途受伤退赛后，不也是被人戳了很长时间的脊梁骨吗？然而迈克尔.约翰逊经历了差不多两年的低谷后，打破了被认为最难打破的400米世界记录。现在谁还会嘲笑迈克尔.约翰逊？</p>
          <br/>
          <span style="color:red;">
            <a href="http://lxf.javaeye.com/blog/230335#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 10:13:55 +0800</pubDate>
        <link>http://lxf.javaeye.com/blog/230335</link>
        <guid>http://lxf.javaeye.com/blog/230335</guid>
      </item>
      <item>
        <title>添加号码的例子</title>
        <author>qmug</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qmug.javaeye.com">qmug</a>&nbsp;
          链接：<a href="http://qmug.javaeye.com/blog/230321" style="color:red;">http://qmug.javaeye.com/blog/230321</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          添加号码。<br />在输入号码之前跳出对话框提示。<br />输入的号码一定为3位以内的数字。<br />用到的是onclick触发事件<br /><br /><pre name="code" class="java">
&lt;%@ page language="java" pageEncoding="GBK"%>

&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html:html lang="true">
  &lt;head>
    &lt;html:base />
    
    &lt;title>privilegeAdd.jsp&lt;/title>
    
	&lt;meta http-equiv="pragma" content="no-cache">
	&lt;meta http-equiv="cache-control" content="no-cache">
	&lt;meta http-equiv="expires" content="0">    
	&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	&lt;meta http-equiv="description" content="This is my page">
	&lt;link href="../css/admin.css" type="text/css" rel="stylesheet" />
	&lt;link href="../../css/body.css" type="text/css" rel="stylesheet" />
	&lt;link href="privilege.css" type="text/css" rel="stylesheet" />
	&lt;script type="text/javascript" src="tellist.js">&lt;/script>
	&lt;script type="text/javascript" src="privilegeControl.js">&lt;/script>
	
  &lt;/head>
  
  &lt;body bgcolor="#8CBAEB" >
	&lt;div class="div_main" >
		&lt;table width="400px" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
			&lt;tr >
				&lt;td class="div_title" >添加号码&lt;/td>
			&lt;/tr>
			&lt;tr >
				&lt;td class="div_body" bgcolor="F8FCFD">

					&lt;form id="main" action="../../../tellist.do" method="post">
						&lt;input type=hidden name=groupStr id=groupStr value="">
			&lt;input type=hidden name=method id=method value="add">
					
							&lt;table class="div_table" bgcolor="F8FCFD"  border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#E0E0E0" >
							  &lt;tr>
				    &lt;td width="17%" align="center">电话号码：&lt;/td>
				    &lt;td width="34%" align="left">&lt;input name="tel" type="text" id="tel" onclick="javascript:alert('请输入3位以内的数字')"  onpropertychange="notNull(this,3)"/>&lt;/td>
				  &lt;/tr>
				  				
				  
				  &lt;tr>
				    &lt;td height="30" colspan="2" align="center">&lt;input name="Submit" type="submit" class="button1" value="提 交" onClick="return add()"/>
				      &nbsp;&nbsp;&nbsp;
				       &lt;input name="Submit2" type="button" class="button1" value="返 回" onClick="toMain()"/>&lt;/td>
				  &lt;/tr>
						&lt;/table>
					&lt;/form>
				&lt;/td>
			&lt;/tr>
		&lt;/table>
	&lt;/div>
  &lt;/body>
&lt;/html:html>

</pre><br /><br /><pre name="code" class="java">
function notNull(obj,maxlen){
  
     if(obj.value.length>maxlen)   
        {   
            alert('文本框输入超出'+maxlen+'个长度');     
   		   obj.value=obj.value.substring(0,maxlen); 
   		                   
     } else{
     	if(/[^\d]/.test(obj.value))
     	
		obj.value=obj.value.replace(/[^\d]/,"");
		
		
		}
 }


</pre>
          <br/>
          <span style="color:red;">
            <a href="http://qmug.javaeye.com/blog/230321#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 09:33:47 +0800</pubDate>
        <link>http://qmug.javaeye.com/blog/230321</link>
        <guid>http://qmug.javaeye.com/blog/230321</guid>
      </item>
      <item>
        <title>监控文本区域的内容长度</title>
        <author>sunfengcheng</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sunfengcheng.javaeye.com">sunfengcheng</a>&nbsp;
          链接：<a href="http://sunfengcheng.javaeye.com/blog/230293" style="color:red;">http://sunfengcheng.javaeye.com/blog/230293</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          监控文本区域的内容长度<br /><br />  我们经常在网络注册或者填写电子简介的时候经常会看到你输入的内容应该在 多少多少 字之间， 你超过了多少字符，等等。 今天这了就是来实现这个经常使用的功能。<br />   解决方法：<br />  <br />  布局包括了。 prototype 库， 并包含了一个 error 出错信息的提示样式 。 <br /> <br /> <pre name="code" class="java">app/controllers/tags_controller.rb:

class TagsController &lt; ApplicationController

  def list
    @tags = Tag.find(:all,:order => "created_on desc")
  end

  def add
    Tag.create(:name => params[:name])
    @tags = Tag.find(:all, :order => "created_on desc")
    render :partial => "tags", :locals => {:tags => @tags}, :layout => false
  end
end</pre><br />你的表单包含一个  有text_area 辅助方法生成的textarea 元素， 以及一个作用于这个 textarea 元素上的恶 对observer_field 的调用。<br /><br /><pre name="code" class="java">app/views/articles/edit.rhtml:

&lt;h1>Editing article&lt;/h1>

&lt;% form_tag :action => 'update', :id => @article do %>
  &lt;p>
    &lt;div id="length_alert">&lt;/div>
    &lt;label for="article_body">Short Intro (255 character maximum)&lt;/label>

    &lt;%= text_area 'article', 'body', "rows" => 10  %>
  &lt;/p>
  &lt;%= submit_tag 'Edit' %>
&lt;% end %>

&lt;%= observe_field("article_body", :frequency => 1,
                            :update => "length_alert",
                            :url => { :action => "check_length"})</pre><br />控制器包含 check_length 的方法，这个方法就是重复检查textarea 中的数据长度。 <br /><pre name="code" class="java">app/controllers/articles_controller.rb:

class ArticlesController &lt; ApplicationController

  def edit
  end

  def check_length 
    body_text = request.raw_post || request.query_string

    total_words = body_text.split(/\s+/).length
    total_chars = body_text.length
    if ( total_chars >= 255 )
      render :text => "&lt;p class=\"error\">Warning: Length exceeded!
                        (You have #{total_chars} characters; #{total_words}
                        words.)&lt;/p>" 
    else    
      render :nothing => true
    end
  end
end</pre>
          <br/>
          <span style="color:red;">
            <a href="http://sunfengcheng.javaeye.com/blog/230293#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 07:31:55 +0800</pubDate>
        <link>http://sunfengcheng.javaeye.com/blog/230293</link>
        <guid>http://sunfengcheng.javaeye.com/blog/230293</guid>
      </item>
      <item>
        <title>Java学习笔记之四(数据存储、字节流和字符流)</title>
        <author>sunajax</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sunajax.javaeye.com">sunajax</a>&nbsp;
          链接：<a href="http://sunajax.javaeye.com/blog/230284" style="color:red;">http://sunajax.javaeye.com/blog/230284</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Java中有两个地方存储数据就是：<span style="color: olive">堆和栈。</span><br /><span style="font-size: small"><span style="color: olive">1) 栈：</span></span>驻留于常规RAM（随机访问存储器）区域，但可通过它的&ldquo;堆栈指针&rdquo;获得处理的直接支持。堆栈指针若向下移，会创建新的内存；若向上移，则会释放那些内存。这是一种特别快、特别有效的数据保存方式，仅次于寄存器。创建程序时，Java编译器必须准确地知道堆栈内保存的所有数据的&ldquo;长度&rdquo;以及&ldquo;存在时间&rdquo;。这是由于它必须生成相应的代码，以便向上和向下移动指针。这一限制无疑影响了程序的灵活性，所以尽管有些Java数据要保存在堆栈里&mdash;&mdash;特别是对象句柄，但Java对象并不放到其中。 &lt;br /><br /><span style="font-size: small"><span style="color: olive">2)堆：</span></span>一种常规用途的内存池（也在RAM区域），其中保存了Java对象。和堆栈不同，&ldquo;内存堆&rdquo;或&ldquo;堆&rdquo;（Heap）最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间，也不必知道存储的数据要在堆里停留多长的时间。因此，用堆保存数据时会得到更大的灵活性。要求创建一个对象时，只需用new命令编制相关的代码即可。执行这些代码时，会在堆里自动进行数据的保存。当然，为达到这种灵活性，必然会付出一定的代价：在堆里分配存储空间时会花掉更长的时间！(转载于《Think in Java》)<br />因为基本类型和静态变量是存放在栈中，&nbsp;所以在程序的任何地方都可以直接引用它，而非静态变量由于存放在堆中，所以在静态的方法中不能引用它，例如：<br /><pre name="code" class="java">
        int i = 1;
        public static void test(){
           i++;   //编译错误，静态方法中不能引用非静态变量
        }
</pre><br />在使用static修饰符时，有个地方需要注意，就是它与final一起修饰的静态常量时，它的初始化顺序有些不同，如下所示：<br /><pre name="code" class="java">
  abstract class Glyph {
  abstract void draw();
  Glyph() {
    System.out.println("Glyph() before draw()");
    draw(); 
    System.out.println("Glyph() after draw()");
  }
}

class RoundGlyph extends Glyph {
  int i = 1;
  public static final int radius = 1;
  RoundGlyph() {
    System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
  }
  void draw() { 
    System.out.println("RoundGlyph.draw(), radius = " + radius); //radius输出为1,并非是0
  }
}

public class PolyConstructors {
  public static void main(String[] args) {
     new RoundGlyph();
  }
}
</pre><br />因为final static修饰的变量是本地编译的(参照《深入Java虚拟机》)，它是在源文件编译时就已赋值。<br /><br /><span style="font-size: small"><span style="color: darkred"><strong>字节流和字符流：</strong></span></span><br /><span style="font-size: small"><span style="color: olive">1)字节流：</span></span>读写基础类分别为：InputStream和OutputStream,read()和write()方法按一个字节一个字节读取和写入，当有汉字时读出就是乱码，因为中文是2个字节存储的，只能采取字符流的读取方式；<br /><span style="font-size: small"><span style="color: olive">2)字符流：</span></span>读写基础类分别为：Reader和Writer，是JDK1.2提出的，read()和write()方法按一个字符一个字符读取和写入；<br />其他的流类如BufferInputStream和DataInputStream，这些是方便使用和提高性能的一些流类；有两个流类可读取和写入对象：<span style="color: gray">ObjectInputStream和ObjectOutputStream</span>,提供了readObject()和writeObject()方法，只是要注意对象需实现序列化(Serializable)。
          <br/>
          <span style="color:red;">
            <a href="http://sunajax.javaeye.com/blog/230284#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 00:52:53 +0800</pubDate>
        <link>http://sunajax.javaeye.com/blog/230284</link>
        <guid>http://sunajax.javaeye.com/blog/230284</guid>
      </item>
      <item>
        <title>Zeros2.2.3 初步体验</title>
        <author>corelengine</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://corelengine.javaeye.com">corelengine</a>&nbsp;
          链接：<a href="http://corelengine.javaeye.com/blog/230268" style="color:red;">http://corelengine.javaeye.com/blog/230268</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近因为工作需要试用Zeros2.2.3  ，试用过程做的记录，和大家分享一下。全文已转pdf文件。
          <br/>
          <span style="color:red;">
            <a href="http://corelengine.javaeye.com/blog/230268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 22:51:55 +0800</pubDate>
        <link>http://corelengine.javaeye.com/blog/230268</link>
        <guid>http://corelengine.javaeye.com/blog/230268</guid>
      </item>
      <item>
        <title>java对象持有（学习笔记）</title>
        <author>shho</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shho.javaeye.com">shho</a>&nbsp;
          链接：<a href="http://shho.javaeye.com/blog/230267" style="color:red;">http://shho.javaeye.com/blog/230267</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.ArrayList存储的是对象，因此可以把不同的对象通过add方法加入其中，也是这个原因，在取出来的时候要进行类的指定。如果在ArrayList中操作的是同一个对象，可以在定义的时候在后面加上&lt;对象的类名>，取的时候就不用进行类的指定了。而且该类的子类的对象也可以通过add方法加入其中。
          <br/>
          <span style="color:red;">
            <a href="http://shho.javaeye.com/blog/230267#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 22:43:28 +0800</pubDate>
        <link>http://shho.javaeye.com/blog/230267</link>
        <guid>http://shho.javaeye.com/blog/230267</guid>
      </item>
      <item>
        <title> DOM入门书籍-JavaScript DOM编程艺术</title>
        <author>snowyvalley</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowyvalley.javaeye.com">snowyvalley</a>&nbsp;
          链接：<a href="http://snowyvalley.javaeye.com/blog/230264" style="color:red;">http://snowyvalley.javaeye.com/blog/230264</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="cnt" id="blog_text">
<p>刚刚读完了《JavaScript
DOM编程艺术》一书，该书由人民邮电出版社出版，原作者Jeremy
Keith（英），由杨涛、王建桥、杨晓云等人翻译，该书讲述了JavaScript
DOM编程的入门知识，内容不是很多，短短300页，涵盖了常用的DOM方法和基本的DOM编程技巧和编程原则，始终秉承着预留退路（书中翻译的术语，感
觉很朴实，却又有点不够专业，反正意思倒是一目了然）的设计原则，反复重申：最准确的网页设计思路是把网页分成三个层次，即：结构层（对应xhtml）、
表示层（对应css）和行为层（JavaScript和DOM）。而且书中的例子也按照这种思路进行编写，非常实用小巧和严谨。</p>
<p>书中用了一章内容简单精要地简述了JavaScript，对JavaScript语法和使用过程中的注意问题进行了讲述，对于复习一下
JavaScript，或者快速入门很有帮助。本书讲述的DOM方法并不是很多，都是一些常用的方法，对于需要注意的问题讲述的很清楚，书中还给出了很多
比较实用的方法，一些JavaScript DOM编程的经验技巧，确实对初学者帮助很大。</p>
<p>感觉全书写的非常浅显易懂，尽管在译序中提到这本书由多人合译，但感觉到整体的风格衔接的非常好，感觉像是一个人翻译的（也可能就是一个人译的吧，才300页还要合译？），翻译的非常流畅。反正我在读的时候几乎没有什么障碍，几乎一口气就看完了这本书的前三章。</p>
<p>作者做过培训方面的事情，所以对知识点的组织，讲解的深浅程度，把握的非常准确，网上看到有些人评论该书翻来覆去地讲解，知识也过于浅显，可能本书
的定位是一本入门书籍吧，对DOM的初学者帮助很大，但对有经验的DOM编程者可能不是很适合，它也不是一个面面俱到的参考手册。</p>
<p>反正对于像我这样的DOM初学者，感觉非常有帮助，从作者那里学到了很多不错的想法和技巧。</p>
<p>作者的另外一本Ajax书籍《Bulletproof Ajax》据说也已出版，有机会再去看一下，因为我非常欣赏作者的写作风格。</p>
<p><a href="http://hi.baidu.com/snowyvalley/blog/item/2c057bceefcfe23fb700c877.html">DOM入门书籍-JavaScript DOM编程艺术</a>
</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://snowyvalley.javaeye.com/blog/230264#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 22:12:47 +0800</pubDate>
        <link>http://snowyvalley.javaeye.com/blog/230264</link>
        <guid>http://snowyvalley.javaeye.com/blog/230264</guid>
      </item>
      <item>
        <title>快速构造web_submit_date方法的参数字段</title>
        <author>CharlesCui</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://charlescui.javaeye.com">CharlesCui</a>&nbsp;
          链接：<a href="http://charlescui.javaeye.com/blog/230208" style="color:red;">http://charlescui.javaeye.com/blog/230208</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>HttpWatch得到Post的参数之后，</p>
<p>&nbsp;</p>
<p>通过Copy All Rows得到这些参数和值，</p>
<p>&nbsp;</p>
<p>拷贝到Editplus里面，</p>
<p>&nbsp;</p>
<p>Ctrl+H替换，勾选正则表达式。</p>
<p>&nbsp;</p>
<p>查找，第一行输入</p>
<pre name="code" class="ruby">^(.*)\t(.*)</pre>
<p>&nbsp;第二行输入</p>
<pre name="code" class="ruby">"Name=\1","Value=\2",ENDITEM,</pre>
<p>&nbsp;这就可以很快的得到web_submit_date方法的参数字段了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://charlescui.javaeye.com/blog/230208#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 17:10:11 +0800</pubDate>
        <link>http://charlescui.javaeye.com/blog/230208</link>
        <guid>http://charlescui.javaeye.com/blog/230208</guid>
      </item>
      <item>
        <title>hibernate+oracle中ORA-00942: 表或视图不存在的问题</title>
        <author>blueart</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://blueart.javaeye.com">blueart</a>&nbsp;
          链接：<a href="http://blueart.javaeye.com/blog/230203" style="color:red;">http://blueart.javaeye.com/blog/230203</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天把数据库从oracle 11g移到到oracle 9g向用用户展示的时候，出现了<br /><span style="color: red">2008-08-19 16:18:17,427-[TS] WARN main org.hibernate.util.JDBCExceptionReporter - SQL Error: 942, SQLState: 42000<br />2008-08-19 16:18:17,427-[TS] ERROR main org.hibernate.util.JDBCExceptionReporter - ORA-00942: 表或视图不存在</span><br />这个错误，我的错误原因有2个：<br />     1. 先前在11g上用着似乎也是这个问题，每次都说序列不存在，我用的主键为varchar2(10),在hibernate映射配置文件文件指定对象的主键生成方式为native,就出现了这样的问题。<br />    网上学习了解到是hibernate序列没有在oracle 11g中创建的问题，在pl/sql中输入<br /><span style="color: blue">create sequence hibernate_sequence start with 1 increment by 1</span> 建立序列后就可以了,当然在 increament by 1的后面还可以buffer by 这个选项缓存，这个就看自己实际需要与否了。设置好这些后就可以了，若还有错误就看看原因2了。<br />    关于native和sequece的区别其实在oracle里面是看不到的，mysql就不支持sequence.<br />     2.在做数据库平台移植的事后移动要注意hibernate映射文件中的&lt;class name="qx.bo.QxUserRole" table="QX_USER_ROLE" <strong><span style="color: red">schema="SYSMAN" </span>></strong><br />中的schema是否和当前的数据库对应，迁移到oracle9g后，我的schema应该为SYSTEM.而11g为sysman.直接迁移，尽管creare sequence了。但是在运行的过程中也会出现ORA-00942: 表或视图不存在的错误。关于schema视自己自己具体环境定义名字。我在11g上用sysman登录数据库，在9g上用system登录数据，所以在9g中用system,在11g中sysman.schema需要修改后才能正确读取映射文件和查询数据库。<br />   以上是我的个人错误修改历史及经验，若有什么错误，请大家指出！<br />   近期要做webgis的东西，基于mapxtreme for java，同时也用着struts1.2,hibernate3.2等，希望能够找到交流的朋友，互相学习。<br />   我的第一篇关于技术方面的文章，希望对大家有所帮助。在编程中，很多error都是网上的朋友帮忙解决的，在此谢谢大家！同时，我也会把自己的一些经验开始在这里和大家共享学习。
          <br/>
          <span style="color:red;">
            <a href="http://blueart.javaeye.com/blog/230203#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 16:55:37 +0800</pubDate>
        <link>http://blueart.javaeye.com/blog/230203</link>
        <guid>http://blueart.javaeye.com/blog/230203</guid>
      </item>
      <item>
        <title>NetBeans + Rails 开发最简单的 CRUD</title>
        <author>juzhibest</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://juzhi.javaeye.com">juzhibest</a>&nbsp;
          链接：<a href="http://juzhi.javaeye.com/blog/230194" style="color:red;">http://juzhi.javaeye.com/blog/230194</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>接触ROR不到1周.希望给同样想接触rails的EYE友们一个借鉴.</p>
<p>呵呵rails高手们..就...不用往下看咯...</p>
<p>&nbsp;</p>
<p><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /><img src="../../../images/smiles/icon_biggrin.gif" alt="" /></p>
<p>&nbsp;</p>
<p>NetBeans IDE 开发环境</p>
<div>
<p style="MARGIN: 0px"><strong>产品版本：</strong> NetBeans IDE 6.1 (Build 200805300101) </p>
<p style="MARGIN: 0px"><strong>Java：</strong> 1.6.0_02; Java HotSpot(TM) Client VM 1.6.0_02-b06 </p>
<p style="MARGIN: 0px">可以去Netbeans 中文官方网站下载这款IDE(for RUBY) 很小.</p>
<p style="MARGIN: 0px"><a href="http://zh-cn.netbeans.org/download/6.1/ml/bundles/netbeans-6.1-ml-ruby-windows.exe">http://zh-cn.netbeans.org/download/6.1/ml/bundles/netbeans-6.1-ml-ruby-windows.exe</a></p>
<p style="MARGIN: 0px">&nbsp; 
<table border="0">
<tbody>
<tr>
<td class="name">Ruby version</td>
<td class="value">1.8.6 (i386-mswin32)</td>
</tr>
<tr>
<td class="name">RubyGems version</td>
<td class="value">0.9.4</td>
</tr>
<tr>
<td class="name">Rails version</td>
<td class="value">2.1.0</td>
</tr>
</tbody>
</table>
</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>至于ruby rails mysql 这些安装配置不多罗嗦.</p>
<p>我这里就是想在NetBeans环境下 实现最简单的rails CRUD</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1 安装netbeans之后运行.界面与eclipse有点相似</p>
<p>&nbsp; 右侧为工作区 左侧为文件视图和服务 底部就是console.</p>
<p>2 新建项目</p>
<p>&nbsp;&nbsp; 2.1文件 -&gt;新建项目 -&gt; 选择项目类别Ruby on Rails应用程序 下一步</p>
<p>&nbsp;&nbsp; 2.2项目文件夹,项目名称 随意.ruby平台我的是1.8.6-p111 没用内置的1.1 其他的用默认就可以.下一步</p>
<p>&nbsp;&nbsp; 2.3数据库配置 使用之前安装Mysql数据库名称,用户名,密码.&nbsp;&nbsp;点完成 netbeans将自动生成rails程序的主要...大体框架.最主要的是它也会自动配置数据库连接</p>
<p>&nbsp;</p>
<p>3 测试环境</p>
<p>&nbsp;&nbsp; 3.1 项目建立之后,自动生成rails框架.我们测试一下</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目名称右键选择运行,当然你也可以点IDE上部的运行主项目(有点像eclipse布局服务器)..或者F6快捷键</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webrick 是rails web服务器? 启动会在IDE底部控制台显示启动信息</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; =&gt; Rails 2.1.0 application started on <a href="http://0.0.0.0:3000">http://0.0.0.0:3000</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;=&gt; Ctrl-C to shutdown server; call with --help for options</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示服务成功启动.在浏览器输入<a href="http://localhost:3000/">http://localhost:3000/</a>出现欢迎界面.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;3.2 点击about your application`s environment 显示你的程序环境</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这一步,我经常出的问题是 mysql 没有启动提示数据库连接错误...<img src="../../../images/smiles/icon_wink.gif" alt="" /></p>
<p>4 数据库表</p>
<p>&nbsp;&nbsp; &nbsp;建立项目配置数据库</p>
<p>&nbsp;&nbsp;&nbsp; 建立表 users 字段id&nbsp;(自增主键)&nbsp; name(varchar) password(varchar) age(int)</p>
<p>5 建model</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;前4步环境搭建成功之后 开始在 netbeans IDE 用代码生成器开始我们的写代码吧</p>
<p>&nbsp;&nbsp;&nbsp; 在项目试图,项目名上右键 "生成" -&gt;选择生成类型"model" 参数写 user name:string&nbsp;password:string&nbsp;&nbsp;age:integer</p>
<p>&nbsp;&nbsp;&nbsp; 生成.......model</p>
<p>6 自动生成CRUD </p>
<p>&nbsp;&nbsp; model 建立之后.我们就可以用rails 最简单的自动完成CRUD了.</p>
<p>&nbsp; &nbsp; 还是在项目试图,项目名上右键"生成" -&gt;选择生成类型"scaffold"&nbsp; 模型名称: user 属性对 name:string&nbsp;password:string&nbsp;&nbsp;age:integer</p>
<p>&nbsp;&nbsp;&nbsp; 生成..........scaffold</p>
<p>&nbsp; 哦这一点要注意.----&gt;&gt;&gt;&gt;&gt;&nbsp;数据库表名 = rails mode名的复数....</p>
<p>&nbsp;</p>
<p>-----------OK----------</p>
<p>&nbsp;你可以在你的浏览器&nbsp;&nbsp; <a href="http://localhost:3000/users">http://localhost:3000/users</a>&nbsp; 使用最简单的.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>高手们看看下面&nbsp; 最近很郁闷...本来积分就不多..又被扣了30分..这下好,一分不剩下</p>
<p><span style="color: #ffcc00;">被JavaEye用户民主投票评为差帖，积分-30分。<img src="../../../images/smiles/icon_cry.gif" alt="" /><br />这有可能是因为你的回贴是灌水性回贴，JavaEye严禁灌水性回贴，您在发贴前请仔细阅读 </span><a href="http://www.javaeye.com/post/156572" target="_blank"><span style="color: #ffcc00;">JavaEye版规和提问的智慧</span></a><span style="color: #ffcc00;">，如有异议，可以在</span><a href="http://javaeye-admin.group.javaeye.com/" target="_blank"><span style="color: #ffcc00;">JavaEye站务讨论圈子</span></a><span style="color: #ffcc00;">申诉。<br /><br />这是系统的自动通知，无需回复--&gt;&gt;&gt;<img src="../../../images/smiles/icon_cry.gif" alt="" /></span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://juzhi.javaeye.com/blog/230194#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 16:24:33 +0800</pubDate>
        <link>http://juzhi.javaeye.com/blog/230194</link>
        <guid>http://juzhi.javaeye.com/blog/230194</guid>
      </item>
      <item>
        <title>触摸屏应用相关技术之一——面临的问题</title>
        <author>chen4w</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chen4w.javaeye.com">chen4w</a>&nbsp;
          链接：<a href="http://chen4w.javaeye.com/blog/230184" style="color:red;">http://chen4w.javaeye.com/blog/230184</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><!--     [if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--     [if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:PunctuationKerning/>
  <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:Compatibility>
   <w:SpaceForUL/>
   <w:BalanceSingleByteDoubleByteWidth/>
   <w:DoNotLeaveBackslashAlone/>
   <w:ULTrailSpace/>
   <w:DoNotExpandShiftReturn/>
   <w:AdjustLineHeightInTable/>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--     [if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
 </w:LatentStyles>
</xml><![endif]-->
<!--     [if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:普通表格;
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	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]--><!--     [if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1043"/>
</xml><![endif]--><!--     [if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
</p>
<p> <br />
<br />
通常情况下，触摸屏应用部署于建筑物内，用于向现场访客提供各类资讯，与普通应用最大的区别就是：它的用户不是个人计算机的拥有者本人，而是大众，所以：不要指望他们会小心翼翼地担心机器死机，正好相反，他们常常会没有道理地乱点一气，尤其当程序响应较慢的时候，访客是没有耐心的。因此，应用程序本身必须是非常健壮的，能够经受住考验。例如：清洁工的抹布。<br />
<br />
从咨询提供者而言，他们千方百计希望能够限制访客在授权的范围内使用&mdash;&mdash;将系统桌面暴露给素不相识的人，将会是非常危险的事情，尽管善意的访客常常不过是调出纸牌程序娱乐一下（人们有在陌生环境下寻找熟悉经历的冲动，好象他乡遇见故知），事实上这种情况下，他们拥有将系统格式化的权限。<br />
<br />
触摸屏本身就是限制访客权限的措施，没有了键盘，就不可能象使用自己的个人电脑那样随心所欲了。<br />
<br />
大多数触摸屏应用选择 windows 作为桌面系统，对开发者而言，在 windows 系统上开发应用较容易；而对于多数访客而言，他们也更加熟悉 windows 操作习惯（它已经牢牢地占据了桌面市场）<br />
<br />
在部署方式方式上则选择 B/S 方式，由此带来的内容维护和升级上的方便是显而易见的（比较大型的触摸屏应用需要维护数百台机器的内容）。<br />
<br />
我们下面的讨论也局限于上述选择。<br />
<br />
以下因素常导致触摸屏应用突破访问限制：<br />
<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统启动过程中，桌面暴露给访客。&mdash;&mdash;需要锁定鼠标，在应用全屏打开之前禁止任何操作<br />
<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右键菜单&mdash;&mdash;多数右键菜单并不会考虑触摸屏应用的特殊性，在右键菜单中将诸如&ldquo;打印&rdquo;、&ldquo;在线更新&rdquo;暴露给用户是常有的事，对于个人用户而言，这是方便，对于触摸屏应用而言却是灾难。<br />
<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序被强行关闭， cpu 长时间 100% 占用，访客频繁点击，这时桌面系统可能会给出提示&ldquo;程序无响应，是否强制关闭？&rdquo;&mdash;&mdash;应用需要确保永远不会被异常关闭。<br />
<br />
&nbsp;<br />
<br />
除了上述问题之外，触摸屏应用还需要解决以下问题：<br />
<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统环境的设置<br />
<br />
例如： IE 信任站点的设置、访问策略设置。禁止屏保和省电模式等等。<br />
<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时间同步机制<br />
<br />
在闭馆通知时，相邻的几台触摸屏显示不一样的系统时间，带给访客的只能是困惑。<br />
<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序自动更新机制<br />
<br />
虽然内容采用了 B/S 形式，但是为了解决上述问题，在桌面安装 C/S 程序是不可避免的。而这个 C/S 程序本身也存在版本升级、更新的问题，不能想象人工维护版本升级的场面。<br />
<br />
&nbsp;<br />
<br />
一个自然的解决上述问题的部署策略如下：</p>
<p class="MsoNormal" style="margin-left: 18pt;"><img src="../../../upload/attachment/35385/8de777ed-2237-33b4-b177-e1f0cc87fbf7.jpg" height="310" alt="部署简图" width="464" />
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><!--     [if mso & !supportInlineShapes & supportFields]><span
lang=EN-US><span style="mso-element:field-begin;mso-field-lock:yes" mce_style="mso-element:field-begin;mso-field-lock:yes"></span><span
style='mso-spacerun:yes'>&nbsp;</span>SHAPE<span style="mso-spacerun:yes" mce_style="mso-spacerun:yes">&nbsp;
</span>\* MERGEFORMAT <span style="mso-element:field-separator" mce_style="mso-element:field-separator"></span></span><![endif]--><span lang="EN-US"><!--     [if gte vml 1]><v:group id="_x0000_s1026" editas="canvas"
 style="width:347.4pt;height:171.6pt;mso-position-horizontal-relative:char;
 mso-position-vertical-relative:line" mce_style="width:347.4pt;height:171.6pt;mso-position-horizontal-relative:char;
 mso-position-vertical-relative:line" coordorigin="2304,618" coordsize="6948,3432">
 <o:lock v:ext="edit" aspectratio="t"/>
 <v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75"
  o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
  <v:stroke joinstyle="miter"/>
  <v:formulas>
   <v:f eqn="if lineDrawn pixelLineWidth 0"/>
   <v:f eqn="sum @0 1 0"/>
   <v:f eqn="sum 0 0 @1"/>
   <v:f eqn="prod @2 1 2"/>
   <v:f eqn="prod @3 21600 pixelWidth"/>
   <v:f eqn="prod @3 21600 pixelHeight"/>
   <v:f eqn="sum @0 0 1"/>
   <v:f eqn="prod @6 1 2"/>
   <v:f eqn="prod @7 21600 pixelWidth"/>
   <v:f eqn="sum @8 21600 0"/>
   <v:f eqn="prod @7 21600 pixelHeight"/>
   <v:f eqn="sum @10 21600 0"/>
  </v:formulas>
  <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
  <o:lock v:ext="edit" aspectratio="t"/>
 </v:shapetype><v:shape id="_x0000_s1027" type="#_x0000_t75" style="position:absolute;
  left:2304;top:618;width:6948;height:3432" mce_style="position:absolute;
  left:2304;top:618;width:6948;height:3432" o:preferrelative="f">
  <v:fill o:detectmouseclick="t"/>
  <v:path o:extrusionok="t" o:connecttype="none"/>
  <o:lock v:ext="edit" text="t"/>
 </v:shape><v:rect id="_x0000_s1028" style="position:absolute;left:6732;top:1086;
  width:1439;height:470" mce_style="position:absolute;left:6732;top:1086;
  width:1439;height:470">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
     "Times New Roman"'>内容服务</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1029" style="position:absolute;left:6732;top:2021;
  width:1440;height:469" mce_style="position:absolute;left:6732;top:2021;
  width:1440;height:469">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
     "Times New Roman"'>终端管理</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1030" style="position:absolute;left:3672;top:2021;
  width:1439;height:471" mce_style="position:absolute;left:3672;top:2021;
  width:1439;height:471">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
     "Times New Roman"'>终端监控</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1031" style="position:absolute;left:3672;top:2958;
  width:1439;height:469" mce_style="position:absolute;left:3672;top:2958;
  width:1439;height:469">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
     "Times New Roman"'>程序更新</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1032" style="position:absolute;left:6732;top:2958;
  width:1440;height:469" mce_style="position:absolute;left:6732;top:2958;
  width:1440;height:469">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     lang=EN-US>ftp</span><span style="font-family:宋体;mso-ascii-font-family:
     "Times New Roman";mso-hansi-font-family:"Times New Roman"" mce_style="font-family:宋体;mso-ascii-font-family:
     "Times New Roman";mso-hansi-font-family:"Times New Roman"">服务</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1033" style="position:absolute;left:3672;top:1086;
  width:1439;height:470" mce_style="position:absolute;left:3672;top:1086;
  width:1439;height:470">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
     "Times New Roman"'>定制浏览器</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:line id="_x0000_s1034" style="position:absolute" mce_style="position:absolute" from="5112,1397"
  to="6732,1398">
  <v:stroke endarrow="block"/>
 </v:line><v:line id="_x0000_s1035" style="position:absolute;flip:x" mce_style="position:absolute;flip:x" from="5112,2334"
  to="6732,2334">
  <v:stroke endarrow="block"/>
 </v:line><v:line id="_x0000_s1036" style="position:absolute;flip:y" mce_style="position:absolute;flip:y" from="4392,2490"
  to="4392,2958">
  <v:stroke endarrow="block"/>
 </v:line><v:line id="_x0000_s1037" style="position:absolute" mce_style="position:absolute" from="5112,3270"
  to="6732,3271">
  <v:stroke endarrow="block"/>
 </v:line><v:rect id="_x0000_s1038" style="position:absolute;left:3492;top:930;
  width:1944;height:2964" mce_style="position:absolute;left:3492;top:930;
  width:1944;height:2964" filled="f">
  <v:stroke dashstyle="dash"/>
 </v:rect><v:rect id="_x0000_s1039" style="position:absolute;left:3996;top:3426;
  width:1440;height:469" mce_style="position:absolute;left:3996;top:3426;
  width:1440;height:469" filled="f" stroked="f">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-size:9.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
     mso-hansi-font-family:"Times New Roman"'>桌面程序</span><span lang=EN-US
     style="font-size:9.0pt" mce_style="font-size:9.0pt"><o:p></o:p></span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1040" style="position:absolute;left:5256;top:930;
  width:1440;height:469" mce_style="position:absolute;left:5256;top:930;
  width:1440;height:469" filled="f" stroked="f">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-size:9.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
     mso-hansi-font-family:"Times New Roman"'>请求内容</span><span lang=EN-US
     style="font-size:9.0pt" mce_style="font-size:9.0pt"><o:p></o:p></span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1041" style="position:absolute;left:5256;top:1710;
  width:1440;height:780" mce_style="position:absolute;left:5256;top:1710;
  width:1440;height:780" filled="f" stroked="f">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-size:9.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
     mso-hansi-font-family:"Times New Roman"'>发送命令</span><span lang=EN-US
     style="font-size:9.0pt" mce_style="font-size:9.0pt"><o:p></o:p></span></p>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-size:9.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
     mso-hansi-font-family:"Times New Roman"'>请求状态</span><span lang=EN-US
     style="font-size:9.0pt" mce_style="font-size:9.0pt"><o:p></o:p></span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><v:rect id="_x0000_s1042" style="position:absolute;left:5256;top:2802;
  width:1440;height:469" mce_style="position:absolute;left:5256;top:2802;
  width:1440;height:469" filled="f" stroked="f">
  <v:textbox>
   <![if !mso]>
   
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style="text-align:center;line-height:12.0pt" mce_style="text-align:center;line-height:12.0pt"><span
     style='font-size:9.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
     mso-hansi-font-family:"Times New Roman"'>检查并更新</span><span lang=EN-US
     style="font-size:9.0pt" mce_style="font-size:9.0pt"><o:p></o:p></span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
 </v:rect><w:wrap type="none"/>
 <w:anchorlock/>
</v:group><![endif]--><!--     [if !vml]--><!--     [endif]--></span>
<!--     [if mso & !supportInlineShapes & supportFields]><span
lang=EN-US><v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:347.4pt;
 height:171.6pt" mce_style="width:347.4pt;
 height:171.6pt">
 <v:imagedata croptop="-65520f" cropbottom="65520f"/>
</v:shape><span style="mso-element:field-end" mce_style="mso-element:field-end"></span></span><![endif]--></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: -27pt; text-indent: 27pt;"><span style="font-family: 宋体;">系统由桌面程序和服务两大部分组成，其中桌面程序部署在各个触摸屏终端，包括：</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--     [if !supportLists]--><span lang="EN-US"><span>1.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--     [endif]--><span style="font-family: 宋体;">定制的浏览器</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">采用</span>
<span lang="EN-US">CHtmlView</span>
<span style="font-family: 宋体;">作为</span>
<span lang="EN-US">IE</span>
<span style="font-family: 宋体;">的容器，并按照触摸屏应用的需要对普通的浏览器行为进行定制，包括：</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">全屏显示</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止右键菜单</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止弹出新</span>
<span lang="EN-US">IE</span>
<span style="font-family: 宋体;">窗口</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止页面选中</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止出现滚动条</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止脚本错误对话框</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">禁止</span>
<span lang="EN-US">3d</span>
<span style="font-family: 宋体;">边框</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">定制的浏览器以</span>
<span lang="EN-US">B/S</span>
<span style="font-family: 宋体;">方式向内容服务请求并展示内容，并提供页面形式的交互。</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--     [if !supportLists]--><span lang="EN-US"><span>2.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--     [endif]--><span style="font-family: 宋体;">终端监控</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">控制：封装了</span>
<span lang="EN-US">http</span>
<span style="font-family: 宋体;">服务，允许以</span>
<span lang="EN-US">http</span>
<span style="font-family: 宋体;">方式向终端发送控制命令，例如：应急的内容切换</span>
<span lang="EN-US">/</span>
<span style="font-family: 宋体;">返回，显示滚动消息等。</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">监视：此外，允许以</span>
<span lang="EN-US">http</span>
<span style="font-family: 宋体;">方式请求终端的运行状态，包括：</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US">cpu</span>
<span style="font-family: 宋体;">占用率</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">物理内存</span>
<span lang="EN-US">/</span>
<span style="font-family: 宋体;">虚拟内存占用</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">点击数</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">屏幕快照</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">程序版本等。</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">环境设置：包括</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">鼠标</span>
<span lang="EN-US">/</span>
<span style="font-family: 宋体;">键盘</span>
<span lang="EN-US">hook</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">屏蔽桌面、任务栏</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">关闭屏幕保护</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">关闭省电模式</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">设置</span>
<span lang="EN-US">IE</span>
<span style="font-family: 宋体;">信任站点</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">页面访问策略等等。</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--     [if !supportLists]--><span lang="EN-US"><span>3.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!--     [endif]--><span style="font-family: 宋体;">程序更新</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体;">对本地文件与远程</span>
<span lang="EN-US">ftp</span>
<span style="font-family: 宋体;">目录文件进行时间戳比较，下载。</span>
</p>
<p class="MsoNormal"><span style="font-family: 宋体;">下面将分别叙述各个组成部分的实现要点，希望通过能够给初次接触触摸屏应用开发的朋友些许帮助。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://chen4w.javaeye.com/blog/230184#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 16:13:02 +0800</pubDate>
        <link>http://chen4w.javaeye.com/blog/230184</link>
        <guid>http://chen4w.javaeye.com/blog/230184</guid>
      </item>
      <item>
        <title>JScript的函数声明和函数表达式</title>
        <author>hax</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hax.javaeye.com">hax</a>&nbsp;
          链接：<a href="http://hax.javaeye.com/blog/230182" style="color:red;">http://hax.javaeye.com/blog/230182</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JScript在函数声明和函数表达式方面不合ECMA标准，这已经是一个老生常谈的话题了。最近<a href="http://blog.csdn.net/aimingoo/archive/2008/07/22/2692512.aspx" target="_blank">aimingoo谈到eval问题</a>的时候再一次触及到这个问题。<br /><br />大体就是 eval('(function (){})') 不返回函数对象，但是 eval('(0, function (){})') 却返回函数对象。此外，还有 eval('(function f(){})') 会在当前执行环境中产生 f 指向一个函数（当然，按照标准是不应该有的）。<br /><br />从现象上看，这表示JScript并没有把孤立的“(function (){})”作为function表达式。按照规范，(function(){})就是一个表达式，但是遗憾的是对于JScript来说，括号还不够，一定得有运算符介入或者语句expect一个表达式时，比如简单的逗号运算符、return语句之类的，才会被认为是表达式。<br /><br />此外“(function f(){})”按照规范应该也被认为是一个function表达式，但是JScript的行为却好像是一个函数声明。<br /><br />这里就有有趣的问题了。<br /><br />0,function f1(){}<br /><br />这样一个语句中，究竟是函数表达式还是函数声明呢？<br /><br />答案是：两者皆是。<br /><br />当然这仅是从效果上说，因为本来这样的行为就不符合标准的定义。<br /><br />不过更微妙的问题是，这个表达式返回的函数对象和所声明的f1函数，其实并非同一个函数！<br /><br />对此，你可以在IE浏览器的地址栏里执行：javascript:alert(eval('0,function f1(){}')==f1)，结果是false。<br /><br />也就是说function表达式产生了一个不同于function声明的结果——这里产生了两个不同的函数对象！<br /><br />回想到我以前对于with语句行为的测试，可以确认，JScript 5.0到5.5的时候，对function声明和function表达式的行为做了很大的修订，这可能是上述奇怪表现的源头。不过我手头没有JScript 5.0，所以无法做进一步的确认。<br /><br />另一个例子是：javascript:alert(eval('(function f1(){return arguments.callee==f1})()'));alert(f1())<br />返回结果false和true。<br /><br />注意，这边的不相等，并非COM对象包装所造成的假象（比如两次读取event包装对象不相等，或者跨window/frame所造成的问题），而真的是两个函数，其实际执行效果其实也是不同的（虽然这里这个例子无法表现出来，但是如果加上with语句就会有差别了）。<br /><br />产生这个用于函数表达式的函数，和函数声明所产生的函数一样，是需要CPU资源的。对此，我写了一个测试：<br /><pre name="code" class="JavaScript">
var MAX = 100000

function timer(f) {
	var start = new Date().getTime()
	for (var i = 0; i &lt; MAX; i++) {
		f()
	}
	var end = new Date().getTime()
	if (typeof alert != 'undefined')
		alert(end - start)
	else
		WScript.Echo(end - start)
}

timer(test0)
timer(test1)
timer(test2)
timer(test3)
timer(test4)
timer(test5)
timer(test6)
timer(test7)


function test0 () {
	// do nothing
}

function test1 () {
	// func decl
	function f() {}
}

function test2 () {
	// func decl or exp?
	(function f() {})
}

function test3 () {
	// two functions
	function f1() {}
	(function f2() {})
}

function test4 () {
	// two references point to one function
	var f1, f2
	f1 = f2 = function () {}
}

function test5 () {
	// still one function
	var f1 = f2
	function f2() {}
}

function test6 () {
	// actually two different functions!
	var f2 = function f1() {}
}

function test7 () {
	// two functions
	var f1 = function () {}
	function f2() {}
}
</pre><br /><br />执行结果大体如下：<br /><br />    D:\>cscript test-func-benchmark.js<br />    Microsoft (R) Windows Script Host Version 5.7<br />    Copyright (C) Microsoft Corporation. All rights reserved.<br /><br />    2704<br />    7593<br />    7563<br />    10047<br />    7828<br />    7735<br />    10079<br />    10078<br /><br />这个测试从侧面再一次证明了诸如var x=function f(){}这样的语句，实际会产生两个不同的函数。<br /><br />按照我的猜测，最初的JScript可能是这样处理的：任何函数结构一律按照函数声明提前处理（所以总是产生变量绑定），函数表达式则被替换为函数对象的引用。<br /><br />后来JScript 5.5为了改善对于with的处理而加入了真正的函数表达式实现，本来它可以完全fix这个问题。但是为了向前兼容而保持对于具名函数一律产生变量绑定，并且也保持了其with作用域的行为（就with语句中的function声明而言，按照规范实际应可视为语法错误——不过SpiderMonkey等引擎都按照function表达式等同处理，而JScript则选择忽略with）。最后得到的就是一个语句产生两份函数对象这样微妙的结果。<br /><br />进一步我们可以大胆猜想，JScript 5.5大体上是这样：JScript在解析代码时，如果函数有具名，就会产生一份函数对象绑定到对应该名字的变量上，函数声明和绑定会被提前到当前执行上下文的最前端，因此总是会忽略with语句。而如果是一个函数表达式，则到实际运行到包含函数表达式的语句时，如果这个函数表达式有被用到（如有运算符时），就会产生一份函数对象，这个过程是在运行时的，所以会纳入with语句对于scope的修改。这两个步骤是共存的，所以可能出现一个语句最终产生出两份有微妙差异的函数对象的现象（实际上并不一定是两份，因为函数表达式是每运行到该语句时就产生一个函数对象，所以是n+1份）。<br /><br />最后我们来看单独一句“(function (){})”，它既不是声明语句也不是表达式（严格的说是既没有函数声明的效果，也没有函数表达式的效果），实际上这里什么也没执行，这个代码被 JScript抛弃掉了（或者说这里是一个被优化掉了的函数表达式）。这一点可以通过类似我上面的性能测试证明之（即包含这个语句的函数其执行时间与一个空函数是一样的）。<br /><br />之所以单独的括号不会触发函数表达式，也许是因为括号只是用于产生AST的结构而不像运算符等会产生独立的节点，JScript没有对此作特别处理，所以单独括号和没有括号并无差别。当然这也只是我的臆测而已。
          <br/>
          <span style="color:red;">
            <a href="http://hax.javaeye.com/blog/230182#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 16:11:04 +0800</pubDate>
        <link>http://hax.javaeye.com/blog/230182</link>
        <guid>http://hax.javaeye.com/blog/230182</guid>
      </item>
      <item>
        <title>使 Spring MVC tags 支持多 model</title>
        <author>SSailYang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ssailyang.javaeye.com">SSailYang</a>&nbsp;
          链接：<a href="http://ssailyang.javaeye.com/blog/230163" style="color:red;">http://ssailyang.javaeye.com/blog/230163</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>问题解释：用过 Spring MVC tags 的朋友都知道，要想将 表单元素的 value 与 相应的 bean 属性对应，需要在 &lt;form:form&gt; 里设置 commandName，spring mvc 会根据这个值在 requestContext 或 sessionContext 里面查找相应的 model，但是这样会是每个 &lt;form:form&gt; 表单只能使用一个 model，这降低了使用的灵活性。</p>
<p>&nbsp;</p>
<p>其实导致这一问题的原因是 spring mvc 根据 form tag 中 path 属性查找 bean 及其属性的算法。</p>
<p>&nbsp;</p>
<p>在 spring mvc 的 AbstractDataBoundFormElementTag.java （名字真长）中的 getBindStatus 方法中有这么一句：</p>
<pre name="code" class="java">String pathToUse = (nestedPath != null ? nestedPath + getPath() : getPath());</pre>
<p>&nbsp;其中的 nestedPath 默认为 &quot;command.&quot;，就是默认的 commandName 加上一个点。如果设置了 commandName，nestedPath 的值就是相应的 commandName 加上一个点。而 path 的指就是相应 tag 中的 path 属性（像 input、select 等 tag 都是继承了这个 tag）。所以如果 nestedPath 不为空的话 pathToUse 就是 commandName.path。之后 spring mvc 就会根据 pathToUse 的值将 tag 的 value 和相应的 bean 的属性进行绑定。知道这一点我想你就知道如何是 spring mvc tag 支持多 model 了。</p>
<p>&nbsp;</p>
<p>具体怎么做这里就不说了。懒了，呵呵。</p>
          <br/>
          <span style="color:red;">
            <a href="http://ssailyang.javaeye.com/blog/230163#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 15:30:38 +0800</pubDate>
        <link>http://ssailyang.javaeye.com/blog/230163</link>
        <guid>http://ssailyang.javaeye.com/blog/230163</guid>
      </item>
      <item>
        <title>写给大一新生的生活指南</title>
        <author>天海浪人</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://854535946-qq-com.javaeye.com">天海浪人</a>&nbsp;
          链接：<a href="http://854535946-qq-com.javaeye.com/blog/230152" style="color:red;">http://854535946-qq-com.javaeye.com/blog/230152</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          I think that those of us who are sophomores will never forget our freshman year at college.Some of us may like to forget our freshman year,but generally speaking it was a time  filled with anticipations,<br />some anxiety,and wonderful discoveries.<br /> College is a lot different from high school in many ways.Your freshman experience will definitely make an deep impression on you.You<br />may commute from your home to a local campus.With no doubt,the most dramatic freshman year is living away from home.And i am one of those.<br />My hometown is in SHannxi,but i chose Shandong University.As a result i not only have to live by myself away from my family for the very first time,but also there are many challenges and opportunities waiting for me.What can you expect as you head off into the wonderful world of higher education?<br />   The first thing you'll face is the workload.It will be heavier and more intense than that of high school,especially you are admitted by a national key university like Shandong University.Here the fierce competition among students really astonished me.The major challenges of college work are the large volume of reading,the short deadlines,and the writing,writing,writing.Related effects that can be result in are doubt,frustration,and possibly loneliness.You are away from the comforts and friendships your home provided for you over the previous years.Here coms the problems:how can you manage to handle the stress?My advice is don't panic,just keep calm and face the music.It's quite common to feel stressed,but don't grumble beacuse everyone around you is under the same pressure.So just relax,slowly but carefully and follow your student mentor or professor asks you to do.You will get through it.<br />  On some of those long,seeming endless nights of studying and writing,it will seem only natural for you to long for the good old days.But be patient.Those dark periods will pass.Whatever you do,don't make importent decisions about your major,your courses,or even your roommates during one of these gloomy periods.Things always look better in the moring.<br />  You'll be making many friends.Continue to be yourself.Don't strike a pose or play the role of someone you're not.Select your friends with the same care and patience you have always used.Believe it or not,your college friendships will be among the most satisfying and long-term relationship of your life. It's always exciting to discover how wonderfully diverse college relationships can be.<br />  You'll also be on your own:your own boss more or less 24hours a day.<br />Be careful here.Don't go fiying off the end of the pier.Enjoy your newfound freedom.Stay up until dawn talking about your ideals and ambitions with your dorm's regular bull(session buddies).Sleep in until dawn the afternoon on a light class day.Explore the local downtown or suburbs with one or two of your new friends.<br />  Remember，though，freedom comes with responsibility.Even though your parents won't be around to follow up on your loose ends,you should't let things go completely.Just find your own stytle.<br />  College life is far more fascinating than being a students in high school.There is a great stage waiting for you to shine forth others.Enjoy the various and colorful campus activities completely.Free yourself from books and assignments,walk out of your dorm and integrate yourself into the excitement of campus life.Just don't be bookworms,studying day and night.I am sure you'll love it.College life is not just academic achievements and campus activities.The most important thing is to decide what kind of person you want to be for the rest of your life.The college experience,especially the freshman experience is the crucial period for young person to shape his or her life's goals.In other words,you may begin to seriously contemplate about your future.Look for role models.Perhaps a certain professor or success person is especially inspiring.Perhaps your school is involed in some ground-breaking researches.If a certain area of study attracts you,find out all can about it.It might be the beginning of your self-definition process.Going to college is as much about finding out who you really are as it is about getting a degree.<br />   Finally,whether you are going to experience failure or success,the years at university will be your personal lifetime treasure.So seize  your moment as a college student and enjoy every minute of it to make a difference.
          <br/>
          <span style="color:red;">
            <a href="http://854535946-qq-com.javaeye.com/blog/230152#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 14:37:37 +0800</pubDate>
        <link>http://854535946-qq-com.javaeye.com/blog/230152</link>
        <guid>http://854535946-qq-com.javaeye.com/blog/230152</guid>
      </item>
      <item>
        <title>JavaScript学习（1）</title>
        <author>qmug</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qmug.javaeye.com">qmug</a>&nbsp;
          链接：<a href="http://qmug.javaeye.com/blog/230147" style="color:red;">http://qmug.javaeye.com/blog/230147</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          a．jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" pageEncoding="GBK"%>

&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>


&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
&lt;script type="text/javascript" src="a.js">&lt;/script>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
&lt;title>无标题文档&lt;/title>


&lt;/head>
&lt;body onload="hello()">
&lt;/body>
&lt;/html>
</pre><br /><br />a.js<br /><pre name="code" class="java">
function hello() {
	var helloE = "Hello,welcom to China";
	var helloC = "欢迎来到中国";
	alert(helloE);
	alert(helloC);
}
</pre><br /><br /><br /><br /><br />说明：<br /><br />　a.jsp是HTML文档，其标识格式为标准的HTML格式；<br /><br />　如同HTML标识语言一样， JavaScript程序代码是一些可用字处理软件浏览的文本，它在描述页面的HTML相关区域出现。<br /><br />　JavaScript代码由 &lt;Script Language ="JavaScript">...&lt;/Script>说明。在标识&lt;Script Language ="JavaScript">...&lt;/Script>之间就可加入JavaScript脚本。<br /><br />　alert()是JavaScript的窗口对象方法，其功能是弹出一个具有OK对话框并显示（）中的字符串。<br /><br />　通过&lt;!-- ...//-->标识说明：若不认识JavaScript代码的浏览器，则所有在其中的标识均被忽略；若认识，则执行其结果。使用注释这是一个好的编程习惯，它使其他人可以读懂你的语言。<br /><br />　JavaScript 以 &lt;/Script> 标签结束。
          <br/>
          <span style="color:red;">
            <a href="http://qmug.javaeye.com/blog/230147#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 14:34:55 +0800</pubDate>
        <link>http://qmug.javaeye.com/blog/230147</link>
        <guid>http://qmug.javaeye.com/blog/230147</guid>
      </item>
      <item>
        <title>将gmf图片放在文本之后</title>
        <author>zhaozhongwei</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhongwei.javaeye.com">zhaozhongwei</a>&nbsp;
          链接：<a href="http://zhaozhongwei.javaeye.com/blog/230130" style="color:red;">http://zhaozhongwei.javaeye.com/blog/230130</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前两天一直在看gmf，这两天又看birt，关于gmf的很多东东都忘记了，所以今天又看看想把一些东西写出来，否则以后又得从头开始看了。因为要做一个图形编辑器，里面要有很多图片，而且图片要放在文本后面，比如一个html编辑器就需要有个文本框，而在文本框前面应该有文本信息，比如&ldquo;姓名&rdquo;。而在gmf中通过emf自动生成的都是先显示图片后显示文本，下了很多功夫也没研究出什么好方法，但还是对付实现了。默认情况下与editpart对应的figure是WrappingLabel，看一下它的paintFigure方法：<br />
&nbsp;&nbsp;&nbsp; public void paintFigure(Graphics graphics) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.paintFigure(graphics);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hasIcons()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paintIcons(graphics);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>这里paintIcons方法就是绘制前面小图标的方法，所以这里需要一个类继承WrappingLabel类，重写paintFigure方法，主要就是不让它调用paintIcons方法，因为paintIcons方法是私有的，所以不能重写它，只能重写paintFigure方法，把这个类取名MyWrappingLabel，实现如下：</p>
<p><br />
public class MyWrappingLabel extends WrappingLabel{<br />
<br />
&nbsp;&nbsp;&nbsp; public void paintFigure(Graphics graphics) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (isOpaque())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; graphics.fillRectangle(getBounds());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (getBorder() instanceof AbstractBackground)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ((AbstractBackground) getBorder()).paintBackground(this, graphics, NO_INSETS);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public MyWrappingLabel() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super();<br />
//&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ToolbarLayout tbl = new ToolbarLayout();<br />
//&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tbl.setVertical(false);<br />
//&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setLayoutManager(tbl);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
还需要在editpart里做相应的修改，因为上面只是把文本前面的图标去掉了，我们还要在文本后面加上我们想要的图标，这里我假设与editpart对应的figure类为CodeFigure，则gmf自动生成的代码类似如下：</p>
<p>&nbsp;&nbsp;&nbsp; public class CodeFigure extends RectangleFigure {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @generated<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private WrappingLabel fFigureCodeLabelFigure;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @generated<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public CodeFigure() {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; FlowLayout layoutThis = new FlowLayout();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setStretchMinorAxis(false);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setMajorSpacing(5);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setMinorSpacing(5);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layoutThis.setHorizontal(true);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setLayoutManager(layoutThis);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; createContents();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @generated<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private void createContents() {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fFigureCodeLabelFigure = new WrappingLabel();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fFigureCodeLabelFigure.setText(&quot;&lt;...&gt;&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.add(fFigureCodeLabelFigure);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p>........等这里没有全贴出来，因为只需要在构造函数和createContents方法里做些手脚就可以搞定了<img src="../../images/smiles/icon_biggrin.gif" alt="" />
</p>
<p>&nbsp;&nbsp;&nbsp; public class CodeFigure extends RectangleFigure {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @generated<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private WrappingLabel fFigureCodeLabelFigure;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @<span style="color: #ff0000;">generated not</span>
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public CodeFigure() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GridLayout layout = new GridLayout(2, false);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setLayoutManager(layout);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; createContents();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @<span style="color: #ff0000;">generated not</span>
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private void createContents() {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fFigureCodeLabelFigure = new MyWrappingLabel();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fFigureCodeLabelFigure.setText(&quot;aaaaaaaa&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; add(fFigureCodeLabelFigure, new GridData(SWT.BEGINNING,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SWT.BEGINNING, false, false, 1, 1));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; add(new ImageFigure(getImage()), new GridData(SWT.BEGINNING,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SWT.BEGINNING, false, false, 1, 1));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private Image getImage() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return getImageImage(&quot;<span style="color: #ff0000;">icons/full/obj16/Code.gif</span>
&quot;); //$NON-NLS-1$<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; protected Image getImageImage(String path) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Image image = JFaceResources.getImageRegistry().get(path);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (image == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ImageDescriptor descriptor = AbstractUIPlugin<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .imageDescriptorFromPlugin(&quot;<span style="color: #ff0000;">myemf.edit</span>
&quot;, path); //$NON-NLS-1$<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (descriptor == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; descriptor = ImageDescriptor.getMissingImageDescriptor();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; JFaceResources.getImageRegistry().put(path,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; image = descriptor.createImage());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return image;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p>红色的地方是需要注意的地方，比如<span style="color: #ff0000;">generated not，</span>
比如原来是generated，如果不改动，则在下次从emf生成gmf的时候则会把修改的东西覆盖掉，而<span style="color: #ff0000;">myemf.edit</span>
是你存放图片的插件的名称（确切的说是插件id），而<span style="color: #ff0000;">icons/full/obj16/Code.gif</span>
是图片在相应插件下的相对路径。</p>
<p>好了小功告成！</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhongwei.javaeye.com/blog/230130#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 13:39:32 +0800</pubDate>
        <link>http://zhaozhongwei.javaeye.com/blog/230130</link>
        <guid>http://zhaozhongwei.javaeye.com/blog/230130</guid>
      </item>
      <item>
        <title>网站浏览统计功能的简单实现-- vb2005xu自己动手系列(2)</title>
        <author>vb2005xu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://vb2005xu.javaeye.com">vb2005xu</a>&nbsp;
          链接：<a href="http://vb2005xu.javaeye.com/blog/230128" style="color:red;">http://vb2005xu.javaeye.com/blog/230128</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这个功能应该是很多网站都需要的,这里仅仅实现了一个基于文件的简易版本,数据库的版本请自行参考实现,我这里实现的功能很不完善,比如未过滤是否为同一访客,是否为同一IP等等,这里仅仅是给大家提供一个参考.</p>
<p>使用PHP语言实现,如果你看不明白,请留言.... 相信原理都差不多..</p>
<p>&nbsp;</p>
<p>为什么使用PHP做范例语言?</p>
<p>不外乎两个因素: 1. PHP语法通俗易懂,有一点程序基础的人就可以了解;2.代码量比较少</p>
<p>&nbsp;</p>
<p>本功能实现的代码的目录结构见&nbsp;[ajax实时任务提示功能的实现 -- vb2005xu自己动手系列(1)],这个可以作为它的插件插入,这里也是阐述一种开发思想:在网站开发的过程中,功能是逐步添加的,一开始并不能也不可以做到尽善尽美的设计.建议在刚开始的时候规划好项目的结构,后期好使用插件扩展功能实现.. 本人表达能力不好,哪位好的请留言表述,我将综合大家的东西改进,谢谢!</p>
<p>&nbsp;</p>
<p>个人推荐JAVA web 初级开发者使用三层模型的架构来开发,不管现在是否流行,他始终是一种好的开发规范!</p>
<p>个人推荐PHP web 初级开发者使用MVC模型来开发网站,如果是开发富客户端的系统,则建议将VC两层[其实是一层半]全部分担给客户端也就是浏览器[和用户]来完成. 为什么说是"一层半",V全部给客户端,C的一半给浏览器[功能的连接地址],一半在服务器端执行[代码实现],比如使用EXTJS来开发的时候.....</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>不再闲聊,让我们进入正题吧:还是之前的风格,先给大家看代码,不明白的请留言,我们共同探讨,高手也请留下精彩言论,我好总结,帮助我们这些入门者,谢谢大家.</p>
<p>&nbsp;</p>
<p>再次说明功能基于之前文章&nbsp;[ajax实时任务提示功能的实现 -- vb2005xu自己动手系列(1),这个也可以当成是一个插件],但是功能完全独立出来了,之后的一系列文章也是在此之上进行扩展,当是领着大家实现一个完整的项目,比如后面会讲到用户授权的实现[将采用RBAC,J基于角色的访问控制 来实现],UI层也会使用EXTJS来做,也有站内邮件也就是短信息的实现等等</p>
<p>&nbsp;</p>
<p>为了方便插件的插入和功能的扩展,所以在这里我们要改动代码结构</p>
<p>&nbsp;</p>
<p>第一, 改下[ajax实时任务提示功能的实现]讲到的/ucren/taskofpig/Controller/Default.php,</p>
<p>修改以下位置:</p>
<p>1. 将文件名称由Default.php改为TaskOfPig.php</p>
<p>2. 将里面的类名称由Controller_Default 改为Controller_TaskOfPig</p>
<p>3. 修改这个类的构造函数名称由Controller_Default 改为Controller_TaskOfPig</p>
<p>其他代码不变</p>
<p>&nbsp;</p>
<p>第二,新建一个/ucren/taskofpig/Controller/Default.php文件</p>
<p>里面代码如下,暂时只有这些</p>
<p>&lt;?php</p>
<p>class Controller_Default extends FLEA_Controller_Action<br />{</p>
<p>&nbsp;&nbsp;&nbsp; function actionIndex(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect(url('TaskOfPig'),0); //停顿0秒后,重定向到index.php?ctl=TaskOfPig</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>?&gt;</p>
<p>对于这个文件中使用的连接设置ctl参数见[ajax实时任务提示功能的实现]中的/ucren/taskofpig/appConfig.php</p>
<p>文件的controllerAccessor 设置.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>//各位注意目录使用Serv这是这个它是一个插件,(*^__^*) 嘻嘻&hellip;&hellip;</p>
<p>/ucren/taskofpig/Serv/VisiterService.php</p>
<p>&nbsp;</p>
<p>&lt;?php<br />class Serv_VisiterService<br />{<br />&nbsp;var $log_file ;<br />&nbsp;function Serv_VisiterService($log_file) //必须传递日志文件路径进来<br />&nbsp;{<br />&nbsp;&nbsp;$this-&gt;log_file = $log_file ;&nbsp;<br />&nbsp;}<br />&nbsp;function addVisiter()<br />&nbsp;{<br />&nbsp;&nbsp;$newVisiter = array(<br />&nbsp;&nbsp;&nbsp;'guest_ip' =&gt; $_SERVER["REMOTE_ADDR"] ,<br />&nbsp;&nbsp;&nbsp;'time' =&gt; date('Y-m-d H:i:s') ,<br />&nbsp;&nbsp;&nbsp;'guest_port' =&gt; $_SERVER["REMOTE_PORT"] ,<br />&nbsp;&nbsp;&nbsp;'request_uri' =&gt; $_SERVER["REQUEST_URI"] ,<br />&nbsp;&nbsp;&nbsp;'accept_lang' =&gt; $_SERVER["HTTP_ACCEPT_LANGUAGE"] ,<br />&nbsp;&nbsp;&nbsp;'os_info' =&gt; $_SERVER["HTTP_USER_AGENT"]&nbsp;&nbsp; <br />&nbsp;&nbsp;);<br />&nbsp;&nbsp;//$fp = fopen("{$this-&gt;prj_dir}/_log/visiter.dat","a+b");<br />&nbsp;&nbsp;$fp = fopen($this-&gt;log_file,"a+b");<br />&nbsp;&nbsp;fwrite($fp,serialize($newVisiter));<br />&nbsp;&nbsp;//写入换行符--LINUX是\n windows是 \r\n ,这里要求注意 单引号与双引号的区别<br />&nbsp;&nbsp;fwrite($fp,"\r\n");//单引号不转义<br />&nbsp;&nbsp;fclose($fp);<br />&nbsp;}</p>
<p>&nbsp;function getVisiters()<br />&nbsp;{<br />&nbsp;&nbsp;if (!file_exists($this-&gt;log_file))<br />&nbsp;&nbsp;return null ;<br />&nbsp;&nbsp;$visiterArr_tmp = file($this-&gt;log_file) ;//将文件读入数组中&nbsp;&nbsp;<br />&nbsp;&nbsp;foreach($visiterArr_tmp as $visiter)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;$visiterArr[] = unserialize($visiter) ;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return $visiterArr ;<br />&nbsp;}<br />}<br />?&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这里在上文中新建的/ucren/taskofpig/Controller/Default.php文件中添加如下代码,完整代码如下</p>
<p>&lt;?php</p>
<p>FLEA::loadFile('Serv_VisiterService.php',true) ;//加载访客统计插件代码到程序中</p>
<p>class Controller_Default extends FLEA_Controller_Action<br />{</p>
<p>&nbsp;&nbsp;&nbsp; var $prj_dir ;var $visiters ;var $smarty ;</p>
<p>&nbsp;&nbsp;&nbsp; function actionIndex(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;prj_dir = '.' ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;smarty = $this-&gt;_getView(); //获取smarty模板对象,在/ucren/taskofpig/appConfig.php中配置</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;visiters = new Serv_VisiterService("{$this-&gt;prj_dir}/log/visiter.dat") ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加访客<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$this-&gt;visiters-&gt;addVisiter();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect(url('TaskOfPig'),0); //停顿0秒后,重定向到index.php?ctl=TaskOfPig</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; function actionVisiters() //访客统计列表<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;$this-&gt;smarty-&gt;assign('sitename','任务计划表 -- 生气猪') ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;$this-&gt;smarty-&gt;assign('opname','访客统计') ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $rows = $this-&gt;visiters-&gt;getVisiters();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;smarty-&gt;assign('rowSet',$rows);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;_showPage('taskofpig.visiterlist.html');<br />&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>}</p>
<p>&nbsp;</p>
<p>?&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>/ucren/taskofpig/tpl/taskofpig.visiterlist.html</p>
<p>&nbsp;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />&lt;title&gt;&lt;%$sitename%&gt; -- &lt;%$opname%&gt;&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;hr&gt;<br />&lt;table width="100%" border="1" cellspacing="1" bgcolor="#cfdadc"&gt;<br />&nbsp;&lt;tr bgcolor="#e8edec" align="center"&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;b&gt;访问次序&lt;/b&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;b&gt;IP地址&lt;/b&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;b&gt;日期/时间&lt;/b&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;b&gt;客户机信息&lt;/b&gt;&lt;/td&gt;&nbsp;&nbsp;<br />&nbsp;&lt;/tr&gt;<br />&nbsp;&lt;%section name=rowIndex loop=$rowSet%&gt;<br />&nbsp;&lt;tr align="center"&gt;<br />&nbsp;&nbsp;&lt;%*注意怎么获取rowIndex的语法*%&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;%$smarty.section.rowIndex.index%&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;%$rowSet[rowIndex].guest_ip%&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;%$rowSet[rowIndex].time%&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&lt;td&gt;&lt;%$rowSet[rowIndex].os_info%&gt;&lt;/td&gt;<br />&nbsp;&lt;/tr&gt;<br />&nbsp;&lt;%/section%&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
<p>&nbsp;</p>
<p>这样就可以在浏览器中敲入</p>
<p><a href="http://localhost/ucren/" target="_blank">http://localhost/ucren/</a><span style="color: #000000;">taskofpig&nbsp; 进入,缺省将在后台加入访问者信息,如果你敲入</span></p>
<p><a href="http://localhost/" target="_blank">http://localhost/</a><span style="color: #000000;">ucren/taskofpig/index.php?act=visiters</span></p>
<p>可以进入来访者信息查看页面,例子截图如下</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下一篇文章将对这个例子做一个扩展,怎么导出为PDF格式的访客列表</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://vb2005xu.javaeye.com/blog/230128#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 13:30:05 +0800</pubDate>
        <link>http://vb2005xu.javaeye.com/blog/230128</link>
        <guid>http://vb2005xu.javaeye.com/blog/230128</guid>
      </item>
      <item>
        <title>状哉! 菲尔普斯君</title>
        <author>lcllcl987</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lcllcl987.javaeye.com">lcllcl987</a>&nbsp;
          链接：<a href="http://lcllcl987.javaeye.com/blog/230117" style="color:red;">http://lcllcl987.javaeye.com/blog/230117</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 菲尔普斯君, 蛮夷美利坚国泅水者也. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此君天赋秉异,身八尺长, 两耳垂肩, 双手过膝,&nbsp; 远观若刘使君转世, 陆行无异， 然入水则如蛟龙入海, 大脚如龙之尾鳍, 无人匹敌.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 八月十六日, 蝶泳决赛, 彼时, 已六金在手, 自号泳池水怪, 无出其右者.&nbsp; 是役, 高手云集, 逐鹿北京.然前半程,&nbsp; 菲君落后, 及冲刺, 仍落于某君半首级. 及发榜, 竟中魁首, 众人莫不惊诧也. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 专家解惑曰: 无他, 唯臂长耳!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 明日, 又得一金. 八金在手, 笑傲于水立方, 盖百年奥运唯此一人也!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有好事大嘴韩乔生者, 谏曰: 奥运结束, 当解剖菲君母子, 以解天下之惑. 众惊诧愕然.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今作文记之, 表余内心激动之万一. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 奇哉怪也 , 菲尔普斯君 ! <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 状哉,菲尔普斯君 !</p>
          <br/>
          <span style="color:red;">
            <a href="http://lcllcl987.javaeye.com/blog/230117#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 13:02:22 +0800</pubDate>
        <link>http://lcllcl987.javaeye.com/blog/230117</link>
        <guid>http://lcllcl987.javaeye.com/blog/230117</guid>
      </item>
      <item>
        <title>java.lang.UnsupportedClassVersionError的处理</title>
        <author>zoninge</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zoninge.javaeye.com">zoninge</a>&nbsp;
          链接：<a href="http://zoninge.javaeye.com/blog/230098" style="color:red;">http://zoninge.javaeye.com/blog/230098</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天服务器上的一个工程的类需要重新编译，我将它导入本机的myeclipse6.0中，编译完之后上传到服务器上去，结果出现了java.lang.UnsupportedClassVersionError异常，赶紧远程连接到服务器上一看，原来环境是1.42的版本，而本机JDK是1.5的。于是在MyEclipse中将编译器的版本改为1.4的<br />步骤：项目点右键-->Properties-->Java Compiler-->将Enable project specific settings前的勾去掉-->Compiler compiliance level选择你想要的版本<br />将文件上传上去之后又出现java.lang.NoClassDefFoundError异常，郁闷，原来是用到了StringBuilder这个类，赶紧给改了过来，再上传就没问题了，下次还是得多多注意。。。
          <br/>
          <span style="color:red;">
            <a href="http://zoninge.javaeye.com/blog/230098#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 12:12:27 +0800</pubDate>
        <link>http://zoninge.javaeye.com/blog/230098</link>
        <guid>http://zoninge.javaeye.com/blog/230098</guid>
      </item>
      <item>
        <title>彼岸 </title>
        <author>zuroc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zsp.javaeye.com">zuroc</a>&nbsp;
          链接：<a href="http://zsp.javaeye.com/blog/230097" style="color:red;">http://zsp.javaeye.com/blog/230097</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large">我在河的这头,<br />你在河的那头,<br />相互挥手,<br />却停不住渡河的扁舟.<br /><br />抚育我的故土,<br />亲切得开始厌倦.<br />沉默太久,<br />宝刀也会生锈.<br /><br />是的,<br />我要远游,<br />看看书中的海鸥.<br />加勒比的蓝,<br />还有传说中Siren的歌喉.<br /><br />说走就走,<br />受够了没完没了的等候.<br />背起书包,<br />一个人环球.<br /><br />挥一挥手,<br />毅然回头,<br />从今天开始,<br />到处漂泊,<br />不做停留.<br /><br />又记:<br />墙内秋千墙外道,<br />红杏总盼出来时.<br /><br />再记:<br />千古诗文皆ＹＹ,<br />百无一用是书生.<br /><br /><br />2008年8月19日 凌晨<br /><br /></span>
          <br/>
          <span style="color:red;">
            <a href="http://zsp.javaeye.com/blog/230097#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 12:02:22 +0800</pubDate>
        <link>http://zsp.javaeye.com/blog/230097</link>
        <guid>http://zsp.javaeye.com/blog/230097</guid>
      </item>
      <item>
        <title>myeclipse 编辑jsp死机问题</title>
        <author>bleach0608</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bleach0608.javaeye.com">bleach0608</a>&nbsp;
          链接：<a href="http://bleach0608.javaeye.com/blog/230081" style="color:red;">http://bleach0608.javaeye.com/blog/230081</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这个问题的确很烦人，其实都是MyEclipse的&ldquo;自作聪明&rdquo;和访问网络上的API Doc的结果（它默认用Visual Designer来打开的），进行下列设置即可有效缓解之。 <br /><br />1. 要么右键单击文件，选择 Open With -》 MyEclipse JSP Editor 打开，这样不会采用可视化的打开，耗资源少，自动提示也非常快。 <br /><br />2. 要么采取一劳永逸的方法 Window -》 Preferences -》 General -》 Editors -》 File Associations <br />将默认打*.jsp的editor关联设置为MyEclipse JSP Editor <br /><br />3. 不要使用它默认的去在线访问API Doc的方式，最好下载API的Doc解压到本地，然后改变location来指向本地文档！ <br />看下图的设置。这点是致命的解决方法！！</p>
<p>在项目的build path中,打开J2EE 1.4Libraries</p>
<p>其中activation.jar跟javax.servlet.jar中的Javadoc location: <a href="http://java.sun.com/j2ee/1.4/docs/api/">http://java.sun.com/j2ee/1.4/docs/api/</a></p>
<p>改为X:/xxx/je22ri-1_4-doc-api.zip</p>
<p>&nbsp;</p>
<p>附上je22ri-1_4-doc-api.zip下载</p>
          <br/>
          <span style="color:red;">
            <a href="http://bleach0608.javaeye.com/blog/230081#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 11:19:40 +0800</pubDate>
        <link>http://bleach0608.javaeye.com/blog/230081</link>
        <guid>http://bleach0608.javaeye.com/blog/230081</guid>
      </item>
      <item>
        <title>设计模式-创建者模式(Builder)</title>
        <author>linpyi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://linpyi.javaeye.com">linpyi</a>&nbsp;
          链接：<a href="http://linpyi.javaeye.com/blog/230074" style="color:red;">http://linpyi.javaeye.com/blog/230074</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近看了一些设计模式,感觉短短的代码,能抽象出很多东西,</p>
<p>&nbsp;</p>
<p>原来写代码的时候每整体的考虑,也许只有写了一段时间的代码,才会对设计模式有比较深的体会</p>
<p>&nbsp;</p>
<p>builder创建者,从名字上理解,他主要承担的是构件对象的操作</p>
<p>&nbsp;</p>
<p>书上定义</p>
<p>&nbsp;</p>
<p>builder:将一个复杂对象的构造与它的表示分离,使得同样的构件过程可以创建不同的表示</p>
<p>&nbsp;</p>
<p>builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知</p>
<p>&nbsp;</p>
<p>道内部的具体构建细节.有点类似工厂方法模式和抽象工厂模式,</p>
<p>&nbsp;</p>
<p>从概念上,大家理解都差不多,大概的意思就是简化代码,只要写几行代码就可以创建一个你需要的对象,而且可以从用.从用还</p>
<p>&nbsp;</p>
<p>比较简单.</p>
<p>&nbsp;</p>
<p>贴代码吧</p>
<p>&nbsp;</p>
<p>我这里创建了一个电脑builder</p>
<p>&nbsp;</p>
<p>Computer.java这里实现了一台电脑需要的配件</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.linpyi.mode;

public class Computer {

	private String CPU;
	private String disk;//硬盘
	private String memory;//内存
	private String mainboard;//主板

	public String getCPU() {
		return CPU;
	}

	public void setCPU(String cpu) {
		CPU = cpu;
	}

	public String getDisk() {
		return disk;
	}

	public void setDisk(String disk) {
		this.disk = disk;
	}

	public String getMemory() {
		return memory;
	}

	public void setMemory(String memory) {
		this.memory = memory;
	}

	public String getMainboard() {
		return mainboard;
	}

	public void setMainboard(String mainboard) {
		this.mainboard = mainboard;
	}
}
</pre>
<p>&nbsp;</p>
<p>ComputerBuilder.java 抽象电脑组装类,每个不同产品的电脑都继承这个类,里面实现组装电脑的基本方法</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.linpyi.mode;

/**
 * 建造电脑组装类
 * 
 * @author work
 * 
 */
public abstract class ComputerBuilder {

	public abstract void makeCPU();

	public abstract void makeDisk();

	public abstract void makeMemory();

	public abstract void makeMainboard();
	
	public abstract Computer getComputer();
}
</pre>
<p>&nbsp;</p>
<p>LenvoBuilder.java&nbsp; 联想电脑组装类,</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.linpyi.mode;

public class LenvoBuilder extends ComputerBuilder{

	Computer computer = new Computer();
	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

	@Override
	public void makeCPU() {
		computer.setCPU("Lenvo-AMD");
	}

	@Override
	public void makeDisk() {
		// TODO Auto-generated method stub
		computer.setDisk("Lenvo-seagate");
	}

	@Override
	public void makeMainboard() {
		// TODO Auto-generated method stub
		computer.setMainboard("Lenvo-ausu");
	}

	@Override
	public void makeMemory() {
		// TODO Auto-generated method stub
		computer.setMemory("Lenvo-kingston");
	}

}
</pre>
<p>&nbsp;</p>
<p>ComputerDirector.java 组装类(DIR)自己组装电脑拉</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.linpyi.mode;

/**
 * 电脑组装类
 * @author work
 *
 */
public class ComputerDirector {

	public void makeComputer(ComputerBuilder builder){
		builder.makeCPU();
		builder.makeDisk();
		builder.makeMainboard();
		builder.makeMemory();
	}
}
</pre>
<p>&nbsp;</p>
<p>Client.java 客户操作类</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.linpyi.mode;

/**
 * 操作类
 * @author work
 *
 */
public class Client {

	public static void main(String[] args){
		//实例化一个创建者
		ComputerDirector director = new ComputerDirector();
		//实例化一个lenvo的类
		ComputerBuilder builder = new LenvoBuilder();
		//创建产品,用户不需要知道创建里面的方法
		director.makeComputer(builder);
		//获得产品
		Computer computer = builder.getComputer();
		System.out.println(computer.getCPU());
		System.out.println(computer.getDisk());
		System.out.println(computer.getMainboard());
		System.out.println(computer.getMemory());
	}
}
</pre>
<p>&nbsp;</p>
<p>运行结果</p>
<pre name="code" class="java">Lenvo-AMD
Lenvo-seagate
Lenvo-ausu
Lenvo-kingston</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>以后如果需要增加电脑生产品牌,只要创建一个builder 例如 HPBuilder.java</p>
<p>&nbsp;</p>
<p>貌似一看起来和工厂模式很像很像,我也对比了下,确实有点像</p>
<p>&nbsp;</p>
<p>总感觉他和抽象工厂模式还是有一定差别,比如在创建对象上,但是又写不出来,也许我对这2种模式的理解还不够深刻,代码写</p>
<p>&nbsp;</p>
<p>的不够多</p>
          <br/>
          <span style="color:red;">
            <a href="http://linpyi.javaeye.com/blog/230074#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 11:07:22 +0800</pubDate>
        <link>http://linpyi.javaeye.com/blog/230074</link>
        <guid>http://linpyi.javaeye.com/blog/230074</guid>
      </item>
      <item>
        <title>终于到可以写一些东西的时候了</title>
        <author>cuisk0328@eyou.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mydesignmail-163-com.javaeye.com">cuisk0328@eyou.com</a>&nbsp;
          链接：<a href="http://mydesignmail-163-com.javaeye.com/blog/230039" style="color:red;">http://mydesignmail-163-com.javaeye.com/blog/230039</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          工作已经3年了，在工作期间，javaeye和csdn，以及chinaunix是陪伴我解决问题，学习和开阔思路的好伙伴，以前自己的blog统统是写一些感情阿，经历的事情，而今终于鼓起勇气，申请了javaeye的blog,可以写一些属于自己见解的技术blog,当然自己的经历有限，技术实力有限，希望robbin,fins 等在技术前沿有所见解和独到之处的专家给与帮助和支持。<br /><br />    这三年多，自己主要扑在oa和电子政务项目上，经历了大大小小的项目快10个，尝到了做程序员，项目经理的苦处和艰难，也在其中得到了很多属于自己的见解和想法，中国软件行业的发展潜力是巨大的，随着国家经济的繁荣和国力的增强，信息化水平也会相继的发展和进步，但是中国软件行业存在的问题也很多。技术独创性较差，很多程序员的copy的却很强，这是我比较佩服的，行业很多地方太不规范，属于自己规范性的东西太少，往往都是借鉴。恶性竞争也使中国软件行业导致程序员工资是越来越低。当然软件行业现在还处在高新技术中，并没有到达传统的行业中去。发展潜力还是比较大的。<br />   <br />   最近自己换了一份工作，离开了自己的第一份工作，自己的也由java，转战到了.net，对于任何面向对象的语言来说，这种转变其实也没有什么，理解了面向对象的精髓，其实任何语言都一样。<br /><br />   好了，在工作中写blog，所以先写这么多，以后将陆续写一些这些年的技术上的心得和体会。工作去了。
          <br/>
          <span style="color:red;">
            <a href="http://mydesignmail-163-com.javaeye.com/blog/230039#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 09:53:09 +0800</pubDate>
        <link>http://mydesignmail-163-com.javaeye.com/blog/230039</link>
        <guid>http://mydesignmail-163-com.javaeye.com/blog/230039</guid>
      </item>
      <item>
        <title>关于个人的文档管理－图片和视频文件</title>
        <author>guitarpoet</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guitarpoet.javaeye.com">guitarpoet</a>&nbsp;
          链接：<a href="http://guitarpoet.javaeye.com/blog/230028" style="color:red;">http://guitarpoet.javaeye.com/blog/230028</a>&nbsp;
          发表时间: 2008年08月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天又写了一篇又臭又长的文章。从今天起，篇幅力图达到短小精悍。<br /><br />我不是一个摄影爱好者（所以到现在还没有数码相机），也不是一个很爱拍照的人。我自己拍得最多的就是每周一次用笔记本拍的减肥效果记录。<br /><br />由于电影一般看完就删、很多音乐视频都可以在网上看，而我又不爱看电视节目，所以我的视频简直屈指可数。<br /><br />视频和图片的最大的特点就是它们都是大把吃掉硬盘的怪物。举例来说，一个SRV的Live from Austin Texas就吃掉了我700M的硬盘。我的工作区中所有的文档大小的总和都不及它的一半。<br /><br />我对待视频的策略，仍然是我用的最熟的大抽屉策略：最常看的和马上要看的视频（比如最新的电影），放到Movies文件夹中。其他需要保留的经典，刻盘保存（太大了，装它们移动硬盘吃不消）。<br /><br />由于我再看它们的可能性不是非常的大，所以刻盘保存的风险我可以接受。<br /><br />我使用iPhoto来管理我的图片。用iPhoto来管理相片的体验，和用iTunes管理音乐差不多。只不过播放列表变成了相册。我自定义了一个关键字“减肥日记“（开始是想每天照，可是我实在太懒，呵呵），我每周拍的减肥效果记录都会加上这个关键字。在这个基础上，我建立了一个查询，列出所有关键字为”减肥日记“的相片。这样，我的减肥效果就可以一目了然了。哈哈。<br /><br />总结一下：<br /><br />1、视频由于体积大，收看次数较少。可以考虑采用刻盘归档的方式。但是一定要预留一些空间使用大抽屉原则（常用的东西放到最容易找到的地方）。在使用刻盘保存的时候，一定要考虑为所有的光盘建立可供检索和查询的索引（光盘的编号、光盘的内容、光盘的存档时间）。对于个人而言，这些只要一个Excel表格足矣，不需要什么额外的软件。<br />2、图片的管理方案与音乐异曲同工。因为除了媒介和使用方式有所不同外。二者的根本都是大的二进制文件 ＋ 围绕这个文件的一系列元数据。而且，与音乐一样图片数据的备份和查看也被iPod很好的支持。<br /><br />关于我的图片和视频的管理方式，就到这里吧。下一篇需要讨论的，是对工作非常重要的，电子邮件的管理。由于它太重要了，而且涉及到的技巧也太多了（很多人都有很优秀的经验）。如果一篇写不完，可以考虑多写几篇。:-)
          <br/>
          <span style="color:red;">
            <a href="http://guitarpoet.javaeye.com/blog/230028#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style=