2009年1月17日星期六

Ear、Jar、War文件

 在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式。但是它们的使用目的有所区别:

  Jar文件(扩展名为. Jar)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等

  War文件(扩展名为.War)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。

  Ear文件(扩展名为.Ear)包含全部企业应用程序。在这种情形下,一个企业应用程序被定义为多个jar文件、资源、类和Web应用程序的集合。

  每一种文件(.jar, .war, .ear)只能由应用服务器(application servers)、小型服务程序容器(servlet containers)、EJB容器(EJB containers)等进行处理。]

所有的包都是用jar打的,只不过目标文件的扩展名不一样。

ear包:企业级应用,通常是EJB打成ear包。 ear是J2ee的应用文件的扩展名
是Enterprise Application Achiever,
是打包了的企业应用程序,里面可包含war(web Application archiever),ejb等
ear包:企业级应用,通常是EJB打成ear包。


war包:是做好一个web应用后,通常是网站,打成包部署到容器中。

jar包:通常是开发时要引用通用类,打成包便于存放管理。

2009年1月16日星期五

实例:JQuery读取XML文件数据并显示(转)

摘自:http://www.code52.net/page/JS/js200809_22_20.html

快速导读

今天向大家演示如何通过JQuery框架为空白HTML文档加载从XML文件读取的数据并显示出来。我们将会主要用到JQuery自带过程 $.get

查看演示:点此查看

准备工作

在开始之前我们需要做如下准备工作:

1.创建一个名为DEMO.html空白html文件;(推荐使用Editplus创建)

2.熟悉JQuery框架的基本语法;(不熟悉没关系,后面我会注释得很详细)

3.创建一个名为data.xml的XML文件用来存储数据,XML的结构下面会涉及到,你也可以下载我打包好的文件查看;

4.一个loading.gif图片,这个图片用于在将XML读取出来的等待时间里面显示在空白html文档中

正式开始

Step 1:首先让我们看看这个data.xml的简单结构,我这里演示的数据是"Saturn为您推荐的几本书",故为书籍信息,那么xml就包括书籍的名称,缩略图和书籍描述信息;

以下为XML文件代码:

<?xml version="1.0" encoding="utf-8" ?>  
<books>  
    <book title="藏地密码" imageurl="images/Tibet_Code.jpg">  
        <description>  
   这里是概况(www.code52.net)   
        </description>  
    </book>  
  
 <book title="剑桥雅思6" imageurl="images/ielts.jpg">  
        <description>  
   这里是概况(www.code52.net)    
    </description>  
    </book>  
  
    <book title="Professional ASP.NET" imageurl="images/asp.jpg">  
        <description>  
             这里是概况(www.code52.net)          
         </description>  
    </book>  
</books> 

 其次,让我们看看加载在空白HTML文档里面的JavaScript代码:

  1. $(document).ready(function()       
  2.      {       
  3.        $.get('myData.xml'function(d){       
  4.        $('body').append('<h1> Saturn给你推荐几本书: </h1>');       
  5.        $('body').append('<dl />');       
  6.       
  7.        $(d).find('book').each(function(){       
  8.       
  9.            var $book = $(this);        
  10.            var title = $book.attr("title");       
  11.            var description = $book.find('description').text();       
  12.            var imageurl = $book.attr('imageurl');       
  13.       
  14.            var html = '<dt> <img class="bookImage" alt="" src="' + imageurl + '" /> </dt>';       
  15.            html += '<dd> <span class="loadingPic" alt="Loading" />';       
  16.            html += '<p class="title">' + title + '</p>';       
  17.            html += '<p> ' + description + '</p>' ;       
  18.            html += '</dd>';       
  19.       
  20.            $('dl').append($(html));       
  21.                   
  22.            $('.loadingPic').fadeOut(2000);       
  23.        });       
  24.    });       
  25. });     

 

Step 2:这里,我只讲下JavaScript代码原理与运行流程,不过分讨论语法,如果你对语法有任何疑问,请给我留言或者查看JQuery相关文档。

行1:当HTML文档准备完毕之后(即html和JavaScript都下载完毕),会自动触发JQuery的 $(document).ready方法及里面的过程。显然,这里首先执行的是$.get方法。
行 3:$.get的第一个参数是XML文件的相对路径(注意路径要填写正确,这里我们把XML和网页文件放在同一文件夹)。第二个参数是一个 Callback函数,即回调函数。就是说通过get方法来请求这个XML文件的内容,然后通过这个callback回调函数来操作里面的数据。而 callback的参数d表示从XML回调过来的所有数据,有了这个参数d,我们就好进行下面的内容了。
行4:通过JavaScript在文档的BODY中动态添加一个标签<h1>,这个是页面的总标题,无关紧要;
行5:同样在BODY中动态添加一个标签<dl>,用来作为包含循环下面的内容容器。(行20会用到)
行 7:这一行很重要,因为我们已经说过,回调函数的参数d表示从XML回调的所有数据,现在我们就需要对这些数据进行处理(筛选)和格式化;请注意:这里通 过搜寻book标签(tag),然后循环执行each后面的函数,直到xml里面数据的条目完全循环完毕;(有点像PHP里面的foreach函数的功 能)
行9:$(this)实际上就创建一个对象,目的是将d的当前一条书籍信息对象实例化,方便进行操作,这就是$book;
行10--行12:分别获取当前对象$book的书籍名称,描述和缩略图;(注意取属性值和取节点值的语法不同)
行14-行18:格式化书籍信息,以便输出;
行20:将格式化后的信息以HTML输出方式输出到文档中。
行22:为了告诉用户我们当前的信息正在从XML中读取,2000毫秒(2秒)后,图片逐渐消失。

Step 3:至此,大功告成。欢迎大家给我留言,共同讨论JQuery的开发和你所碰到的问题,请不吝赐教。另外,请将下载后的文件夹放在WEB环境下运行(IIS或虚拟主机),请不要直接点开运行。

此演示的压缩包下载:点此下载

Javascript的匿名函数和匿名类,以及原生类(转)

摘自:http://www.cnblogs.com/yongzhi/articles/1187177.html

1.关于匿名类

    var  class1={p1:value1,p2:value2};

    这个也可以写成

    var class1={};

     class1.p1=value1;

     class1.p2=value2;

首先所有的匿名类都是继承与Object核心对象的,var class1={} 意味着实例化了一个Object对象,它拥有Object对象的原生属性和原生方法。

但是你不能为匿名类添加原生方法,例如这样写是错误的:

class1.prototype.func1=function(){};

你也不能尝试用new() 方法来构造一个新的与class1有相同的属性的新对象,因为它已经实例化了。以下写法也是错的:

var classB=new classA();

这是无法构造的,

准确的说,匿名类实际上是继承与Object的某一个半实例,相当于C#中的静态类。你可以为他添加方法和属性

例如:

class1.func1=function(){}

调用的时候就这样:

class1.func1();  酷似C#中的静态类

但是你可以为Object添加原生函数,这样你的匿名类(实际上是所有的类)都有这个方法

例如:

var class1={};

class1.p1=value1;

class1.p2=value2;

Object.prototype.func1=function(){  alert("1")  };

class1.func1();

是没有问题的,但是这样一来,所有的实例化对象都有了func1()方法。实际应用中应该避免给Object类添加原生方法。

2.关于匿名函数

先说说关于Javascript的函数:

可以这样说,JavaScript中一切皆是对象,function自然不例外,function可以作为函数,类,也可以当成一个被函数对象返回

看下面的例子:

function a()
{

  alert("Hello Febird!");

   this.aa="aa";
  this.show=function ()
  {
        alert(this.aa);
  };

   this.sayHello=function()

  {

      return function()   {alert("hello"); }   ;

  };
}

var aaa=new a();
aaa.show();

aaa.sayHello();

其中最外面的一个function是定义了一个类 a ,他有属性aa,方法show(),sayHello();这两个都是匿名函数,而sayHello中的function便是函数作为一个返回值的例子。

实际上可以这样想,匿名函数就是一块没有命名的代码块,当你把他赋值给别的变量的时候,那么那个变量就是一个函数,准确的说那是一个函数指针^_^。

在Javasript中,匿名函数是很有特点的东西了,也是非常有用,也是有些难以理解的。

比如在写Ajax引用的时候,如果不依靠别的JSF,自己写一个通用的Ajax话,一般这样写:

var xhr=new XMLHttpRequest(); //已经封装,可以适应不同的浏览器;

function DoAjax ()

{

xhr.onreadystatechange=processFunction;

xhr.open("GET",url,true);

xhr.send(null);

}

function processFunction()

{

   //do something with XMLHttpRequest;

   if(xhr.readState!=4||xhr.status!=200) return false;

    alert(xhr.responseText);

}

在一般的Ajax引用中,也许只要一个XMLHttpRequest对象,而且onreadystatechange的处理函数必须没有参数,有参数就出错,

所以,一般经常会写一个全局变量XMLHttpRequest,再在processFunction中用到这个全局变量,但是如果我要建立几个

XMLHttpRequest的并发连接怎么办呢?这个就不能用全局变量了,但是处理函数又不能有参数,怎么搞,可以这样:

function DoAjax ()

{

var xhr=new XMLHttpRequest();

xhr.onreadystatechange=processFunction(xhr);

xhr.open("GET",url,true);

xhr.send(null);

}

function processFunction(_xhr)

{

   return function()

  {

   //do something with XMLHttpRequest;

    if(_xhr.readState!=4||_xhr.status!=200) return false;

    alert(_xhr.responseText);

  };

}

怎么理解?虽然processFunction函数有参数,但是它返回的函数没有参数!而这两个函数之间是怎么进行的值传递呢?

这里不妨引用一句话:

"为了函数能够正确的执行,需要被函数使用的,词法作用域中的,非全局数据,
存在于函数的闭包之中。"

可以这样理解:

当我们把processFunction()返回的函数,在processFunction之外使用的时候,依然要记得自己被定义时的上级作用域中的各种变量的值。这些需
要被记住的值,就是"闭包"。

3.关于原生对象

原生,即prototype,他提供我们了扩展、改造原有对象的方法。例如我们可以为已知对象,包括JavaScript的核心对象Array,Number,Math,Object,Boolean等和自定义类添加方法或者属性。

例如:

Number.prototype.toHexString = function () {

return this.toString(16);

};

var num=10

alert(num.toHexString());

输出A;

你可以为Object对象添加方法,这样,以后任意一个对象都有这个方法,因为其它对象都是从Object继承而来的。

你也可以再造现有函数

Function.prototype.toString = function () {

return "Function Locked";

};

4.关于This

在JavaScript中,并没有严格的面向对象概念,自然也没有类的构造函数这样的概念。var o=new Obj();这样的语法,看起来似乎和Java/C++相当类似,但是他背后的执行过程是不同的。首先,解释器会new一个空的Object对象。然后将 这个空的Object,作
为隐藏的参数传递给function Obj()。在Obj函数中访问到的this,其实就是这个传入的空的Object 对象。所以,如果这个Object,

并非为空,这就是所谓:"this关键字关联于执行时的作用域"的含义。

如果你想把一个函数作为"构造函数",那么就不要在函数的最后加上return语句。因为如果没有return语句,new算符返回的就是

那个被操作过以后的this。一旦你通过return返回了别的东西,这个this就被废弃掉了。对于函数的调用者来说,就会相当的困惑。

2009年1月15日星期四

HTML转义字符表

特殊字符

字符

十进制

转义字符

"

&#34;

&quot;

&

&#38;

&amp;

<

&#60;

&lt;

>

&#62;

&gt;

不断开空格(non-breaking space)

&#160;

&nbsp;

其他字符

字符

十进制

转义字符

字符

十进制

转义字符

字符

十进制

转义字符

?

&#161;

&iexcl;

Á

&#193;

&Aacute;

á

&#225;

&aacute;

&#162;

&cent;

Â

&#194;

&circ;

â

&#226

&acirc;

&#163;

&pound;

Ã

&#195;

&Atilde;

ã

&#227;

&atilde;

¤

&#164;

&curren;

Ä

&#196;

&Auml

ä

&#228;

&auml;

&#165;

&yen;

Å

&#197;

&ring;

å

&#229;

&aring;

|

&#166;

&brvbar;

Æ

&#198;

&AElig;

æ

&#230;

&aelig;

§

&#167;

&sect;

Ç

&#199;

&Ccedil;

ç

&#231;

&ccedil;

¨

&#168;

&uml;

È

&#200;

&Egrave;

è

&#232;

&egrave;

©

&#169;

&copy;

É

&#201;

&Eacute;

é

&#233;

&eacute;

a

&#170;

&ordf;

Ê

&#202;

&Ecirc;

ê

&#234;

&ecirc;

?

&#171;

&laquo;

Ë

&#203;

&Euml;

ë

&#235;

&euml;

?

&#172;

&not;

Ì

&#204;

&Igrave;

ì

&#236;

&igrave;

\x7f

&#173;

&shy;

Í

&#205;

&Iacute;

í

&#237;

&iacute;

®

&#174;

&reg;

Î

&#206;

&Icirc;

î

&#238;

&icirc;

ˉ

&#175;

&macr;

Ï

&#207;

&Iuml;

ï

&#239;

&iuml;

°

&#176;

&deg;

Ð

&#208;

&ETH;

ð

&#240;

&ieth;

±

&#177;

&plusmn;

Ñ

&#209;

&Ntilde;

ñ

&#241;

&ntilde;

2

&#178;

&sup2;

Ò

&#210;

&Ograve;

ò

&#242;

&ograve;

3

&#179;

&sup3;

Ó

&#211;

&Oacute;

ó

&#243;

&oacute;

&#180;

&acute;

Ô

&#212;

&Ocirc;

ô

&#244;

&ocirc;

μ

&#181;

&micro;

Õ

&#213;

&Otilde;

õ

&#245;

&otilde;

?

&#182;

&para;

Ö

&#214;

&Ouml;

ö

&#246;

&ouml;

·

&#183;

&middot;

&times;

&#215;

&times;

÷

&#247;

&divide;

?

&#184;

&cedil;

Ø

&#216;

&Oslash;

ø

&#248;

&oslash;

1

&#185;

&sup1;

Ù

&#217;

&Ugrave;

ù

&#249;

&ugrave;

o

&#186;

&ordm;

Ú

&#218;

&Uacute;

ú

&#250;

&uacute;

?

&#187;

&raquo;

Û

&#219;

&Ucirc;

û

&#251;

&ucirc;

?

&#188;

&frac14;

Ü

&#220;

&Uuml;

ü

&#252;

&uuml;

?

&#189;

&frac12;

Ý

&#221;

&Yacute;

ý

&#253;

&yacute;

?

&#190;

&frac34;

Þ

&#222;

&THORN;

þ

&#254;

&thorn;

?

&#191;

&iquest;

ß

&#223;

&szlig;

ÿ

&#255;

&yuml;

À

&#192;

&Agrave;

à

&#224;

&agrave;

   

2009年1月14日星期三

SQL中,如何判断某个字段是否包含中文(简体和繁体)

这两条可用于 sql server
select [来自国家] from [01-办公文具] where ascii([来自国家])>160

select * from [01-办公文具] where [来自国家] like '%[^0-9a-z-/]%'


》》》
这条可用于oracle,
select [来自国家] from [01-办公文具] where ascii(str([来自国家])) like '%\%'

2009年1月13日星期二

apache设置虚拟目录

摘自:http://www.xqs.cn/index.php?load=read&id=166

#DocumentRoot /var/www/html
DocumentRoot /backup
Alias /html/ /var/www/html #定义html虚拟目录
Alias /zhoz /zhoz #定义zhoz虚拟目录

<Directory /zhoz> #定义相应虚拟目录的配置
Options Indexes FollowSymLinks
# Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

http://ip/htmlhttp://ip/zhoz即可访问上面两个指定的虚拟目录了。

--------------------------------------------------------------------------

设置虚拟目录

在配置文件中找下面这行:

在这行下面添加如下内容:
Alias /vdir/ "c:/comexe/"

<Directory "c:/comexe/">

Options MultiViews
AllowOverride None
Order allow,deny
Allow from all

</Directory>

这样,通过访问 http://ip/vdir/,就可以访问到c:\comexe\目录下的内容。
Apache默认开设了两个虚拟目录:"/icons/"和"/manual/"。这两个虚拟目录没有用,可以在配置文件中删除。

--------------------------------------------------------

安装Apache虚拟目录设置方法
在Apache的配置文件httpd.conf下
搜索Alias /manual
这时你会看到:
Alias /manual "D:/Apache Group/Apache2/manual"
<Directory "D:/Apache Group/Apache2/manual">
Options Indexes FollowSymLinks MultiViews IncludesNoExec
AddOutputFilter Includes html
AllowOverride None
order allow,deny
Allow from all
</Directory>
上面就是Apache自己建立的一个虚拟目录,Apache自带两个虚拟目录,还有一个就是icons,所以仿照上面的例子我们在其下面也可以建立虚拟目录。例如在要建立一个phpadmin的虚拟目录,这个目录在电脑中的实际位置为D:\wwwroot\phpmyadmin,我们就可以写这样的代码:
引用内容
Alias /phpadmin "D:/wwwroot/phpmyadmin"
<Directory "D:/wwwroot/phpmyadmin">
Options Indexes MultiViews
AllowOverride None
order allow,deny
Allow from all
</Directory>
我测试通过了,大家测试时只要注意“/”和“\”的区别就行了

2009年1月12日星期一

35岁前程序员要规划好的四件事,健康居首位 (转帖)


摘自:http://www.javaeye.com/wiki/life/1339-35-year-old-former-programmer-to-plan-a-good-four-and-ranks-first-in-health

原创作者: eimhee    
论坛里经常可以看到关于 35 岁程序员的生涯询问, 他们之中有些人写了十年代码, 有些人则是因为对编程发生了兴趣, 中途转行, 以下四点是给那些 30 - 35 岁程序员的建议:

* 照顾自己健康

以前, 我认为 "钱" 是很重要的, 俗话说的好: "钱不是万能, 但没有钱万万不能", 所以过去我的焦点都是放在收入, 但后来我发现有比钱更重要的东西, 那是 "家", 在你没有结婚前, 这个家的概念是指你和父母的和谐关系, 而在结婚后, 家的概念是指如何维系一个家庭, 包括和太太还有孩子的关系。

在 IT 这个行业里, 很多人跟自己父母的想法是有差距的, 认为上一代保守, 食古不化, 讲到很多东西没法沟通, 另外, 我的很多朋友事业做很大, 但最后却离婚了, 没有孩子还好, 有孩子的要想更多, 只有家, 你才有奋斗的目标, 才有精神的支持, 否则就像电视里讲的那一句, 失去了你, 得到江山又如何?

但这个家的信念自从张国荣事件后, 又改变了我的看法, 那就是有比家更重要的东西, 那是你的 "健康", 这个健康包括生理和心理上的健康, 想想看你拥有了一个家, 但是因为没有健康, 全家人都被拖下去了, 每天看着你痛苦的吊瓶子, 更严重的直接轻生, 这样遗留给珍爱你的人只是更大的痛苦, 你会 C, C++, C#, Java... 又怎样? 那时候你会认为这些通通都是屁, 做人做到能够 "吃得下饭、睡得着觉、笑得出来" 就已经是莫大的幸福。

35 岁会困惑的人多半是因为二十几岁的时候就没有做好准备, 过去的已经不可追, 现在要想的应该是 45 岁怎么办? 有人说年轻比的是学问, 中年比的是财富, 老年比的是健康, 如果你现在不注意自己健康, 那么很快更大的困扰就会上门了, 人生每个阶段都有扮演的角色, 要学会未雨绸缪, 否则不用到 50 岁, 可能 40 岁就会开始后悔了, 健康要从饮食和运动着手, 多涉猎这方面的常识, 比搞那些过几年就要淘汰的技术有意义多了。

* 学会投资理财

很多人认为投资理财需要很多的钱, 这是不正确的, 会理财的人, 小钱可以积累到大, 不会理财的人, 大钱也会消耗到光, 投资理财首重的是风险管理, 没有风险管理就像在刀口舔血一样, 投资理财应该要趁早磨练, 不要等到 40 岁的时候才去冒险, 因为那时候你已经没有本钱跌倒, 投资理财的方法有很多, 并不是只有房地产, 股票这些东西, 从节约, 储蓄, 定存... 每一步都是学习, 关键是你要从投资的过程里去发现自己, 并且了解如何正确对待甚至对付自己, 这样你才有机会早一日达到经济自由, 不会提心吊胆这个那个。

投资理财要量力而为, 不要做超过你能力所能负荷的事情, 我给程序员最好的建议是关注经济, 不要浮躁, 错把投机当投资, 这样还不如定存来得可靠安全。

* 经营你的人脉

我觉得程序员除了普遍不善理财外, 另外人际沟通也多有问题, 很多人在离开公司的�那, 整个人感觉也都被掏空了, 而且会有一种担忧, 以前别人跟我说话那是因为我是某某公司的员工, 现在不是了, 可能就没有什么人会再鸟我了, 这就是典型的人脉经营危机。

人脉的经营不是看你有没有朋友, 而是有没有能帮助你同时又有实力的朋友。有些人朋友很多, 但真正遇到困难, 只能精神上支持一下, 除此外, 帮不上任何忙, 这代表人脉还是太单薄, 不要总问别人能给你什么? 也要问问你能给别人什么? 懂得去欣赏别人, 而不要像患了红眼病一样, 漠视别人背后的辛劳的付出, 只知道妒忌表面的风头, 这样, 只会将自己的路越走越窄。

经营自己的人脉是有秘诀的, 首先你要了解自己存在的价值, 如果没有存在的价值, 那么经营的人脉是空的, 这跟有存在价值却不知道怎样经营人脉, 基本上差不多, 经营人脉并不等于趋炎附势, 而是指在得势的时候, 就要想到落难的时刻, 待人宽厚真诚, 花无百日好, 人无千日红, 多欣赏别人, 择友深交, 别把时间浪费在小屁孩身上。

* 培养广泛兴趣

一个程序员如果除了 IT 以外, 一点其它的兴趣也没有, 那真的是很危险的事情, 像我现在年龄已经超过 35 岁了, 很快就要 40, 但我现在还是每天写代码, 做项目已经不是为了维生, 而是纯粹兴趣了, 我想我会一直写下去, 同时开始加强自己经营管理或财务方面的知识。你说郭安定以后玩不了电脑怎么办? 他就去写书, 万一双手废了怎么办? 那就去配音, 万一声音也哑了怎么办? 那就重回金融市场, 让徒子徒孙帮忙着下单, 眼球看左就买, 看右就卖, 就这么一直玩下去...

所以人生不是只有一条路, 你得为自己想好方方面面, 而广泛的兴趣可以帮助你跳脱现况, 看到更多。

以上四点不仅是 35 岁的人要注意的, 很多甚至二十几岁的人也要开始关注, 说真的, 很多程序员看上去每个体型都不错, 但体格都马马虎虎, 很多人熬个两天夜就不行了, 不知该说什么... 一起加油吧。