小菜毛毛技术分享

与大家共同成长

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

#

一,抽象类:abstract

    1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类;

    2,抽象类中可以有具体的实现方法;

    3,抽象类中可以没有抽象方法;

    4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为抽象类

    5,抽象类不能被实例化,但可以由抽象父类指向的子类实例来调用抽象父类中的具体实现方法;通常作为一种默认行为;

    6,要使用抽象类中的方法,必须有一个子类继承于这个抽象类,并实现抽象类中的抽象方法,通过子类的实例去调用;

 

二,接口:interface

    1,接口中可以有成员变量,且接口中的成员变量必须定义初始化;

    2,接口中的成员方法只能是方法原型,不能有方法主体;

    3,接口的成员变量和成员方法只能public(或缺省不写),效果一样,都是public

    4,实现接口的类必须全部实现接口中的方法(父类的实现也算,一般有通过基类实现接口中个异性不大的方法来做为适配器的做法)

 

三,关键字:final

   1,可用于修饰:成员变量,非抽象类(不能与abstract同时出现),非抽象的成员方法,以及方法参数

   2,final方法:不能被子类的方法重写,但可以被继承;

   3,final类:表示该类不能被继承,没有子类;final类中的方法也无法被继承.

   4,final变量:表示常量,只能赋值一次,赋值后不能被修改.final变量必须定义初始化;

   5,final不能用于修饰构造方法;

   6,final参数:只能使用该参数,不能修改该参数的值;

 

四,关键字:static

   1,可以修饰成员变量和成员方法,但不能修饰类以及构造方法;

   2,被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享

   3,static变量和static方法一般是通过类名直接访问,但也可以通过类的实例来访问(不推荐这种访问方式)

   4,static变量和static方法同样适应java访问修饰符.用public修饰的static变量和static方法,在任何地方都可以通过类名直接来访问,但用private修饰的static变量和static方法,只能在声明的本类方法及静态块中访问,但不能用this访问,因为this属于非静态变量.

 

 

五,static和final同时使用 

   1,static final用来修饰成员变量和成员方法,可简单理解为“全局常量”! 

   2,对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 

   3,对于方法,表示不可覆盖,并且可以通过类名直接访问。

 

posted @ 2010-03-04 15:27 小菜毛毛 阅读(234) | 评论 (0)编辑 收藏

HTTP 状态代码

如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。

此状态代码提供了有关请求状态的信息,且为 Googlebot 提供了有关您网站和请求的网页的信息。

一些常见的状态代码为:

  • 200 - 服务器成功返回网页
  • 404 - 请求的网页不存在
  • 503 - 服务器暂时不可用

以下提供了 HTTP 状态代码的完整列表。点击链接可了解详细信息。您也可以访问有关 HTTP 状态代码的 W3C 页来了解详细信息

1xx(临时响应)
用于表示临时响应并需要请求者执行操作才能继续的状态代码。

代码 说明
100(继续) 请求者应当继续提出请求。服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余部分。
101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备进行切换。

2xx(成功)

用于表示服务器已成功处理了请求的状态代码。

代码 说明
200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果您的 robots.txt 文件显示为此状态,那么,这表示 Googlebot 已成功检索到该文件。
201(已创建) 请求成功且服务器已创建了新的资源。
202(已接受) 服务器已接受了请求,但尚未对其进行处理。
203(非授权信息) 服务器已成功处理了请求,但返回了可能来自另一来源的信息。
204(无内容) 服务器成功处理了请求,但未返回任何内容。
205(重置内容) 服务器成功处理了请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。
206(部分内容) 服务器成功处理了部分 GET 请求。

3xx(已重定向)
要完成请求,您需要进一步进行操作。通常,这些状态代码是永远重定向的。Google 建议您在每次请求时使用的重定向要少于 5 个。您可以使用网站管理员工具来查看 Googlebot 在抓取您已重定向的网页时是否会遇到问题。诊断下的抓取错误页中列出了 Googlebot 由于重定向错误而无法抓取的网址。

代码 说明
300(多种选择) 服务器根据请求可执行多种操作。服务器可根据请求者 (User agent) 来选择一项操作,或提供操作列表供请求者选择。
301(永久移动) 请求的网页已被永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 Googlebot 某个网页或网站已被永久移动到新位置。
302(临时移动) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 Googlebot 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 Googlebot 某个页面或网站已被移动。
303(查看其他位置) 当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置。
304(未修改)

自从上次请求后,请求的网页未被修改过。服务器返回此响应时,不会返回网页内容。

如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。由于服务器可以告诉 Googlebot 自从上次抓取后网页没有更改过,因此可节省带宽和开销

305(使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。
307(临时重定向) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。但由于 Googlebot 会继续抓取原有位置并将其编入索引,因此您不应使用此代码来通知 Googlebot 某个页面或网站已被移动。

4xx(请求错误)
这些状态代码表示,请求可能出错,已妨碍了服务器对请求的处理。

代码 说明
400(错误请求) 服务器不理解请求的语法。
401(未授权) 请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。
403(已禁止) 服务器拒绝请求。如果在 Googlebot 尝试抓取您网站上的有效网页时显示此状态代码(您可在 Google 网站管理员工具中诊断下的网络抓取页面上看到此状态代码),那么,这可能是您的服务器或主机拒绝 Googlebot 对其进行访问。
404(未找到)

服务器找不到请求的网页。例如,如果请求是针对服务器上不存在的网页进行的,那么,服务器通常会返回此代码。

如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签的 robots.txt 页上发现此状态,那么,这是正确的状态。然而,如果您有 robots.txt 文件而又发现了此状态,那么,这说明您的 robots.txt 文件可能是命名错误或位于错误的位置。(该文件应当位于顶级域名上,且应当名为 robots.txt)。

如果您在 Googlebot 尝试抓取的网址上发现此状态(位于"诊断"标签的 HTTP 错误页上),那么,这表示 Googlebot 所追踪的可能是另一网页中的无效链接(旧链接或输入有误的链接)。

405(方法禁用) 禁用请求中所指定的方法。
406(不接受) 无法使用请求的内容特性来响应请求的网页。
407(需要代理授权) 此状态代码与 401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。
408(请求超时) 服务器等候请求时超时。
409(冲突) 服务器在完成请求时发生冲突。服务器必须包含有关响应中所发生的冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。
410(已删除) 如果请求的资源已被永久删除,那么,服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已被永久删除,那么,您应当使用 301 代码指定该资源的新位置。
411(需要有效长度) 服务器不会接受包含无效内容长度标头字段的请求。
412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,已超出服务器的处理能力。
414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法进行处理。
415(不支持的媒体类型) 请求的格式不受请求页面的支持。
416(请求范围不符合要求) 如果请求是针对网页的无效范围进行的,那么,服务器会返回此状态代码。
417(未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)
这些状态代码表示,服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明
500(服务器内部错误) 服务器遇到错误,无法完成请求。
501(尚未实施) 服务器不具备完成请求的功能。例如,当服务器无法识别请求方法时,服务器可能会返回此代码。
502(错误网关) 服务器作为网关或代理,从上游服务器收到了无效的响应。
503(服务不可用) 目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。
504(网关超时) 服务器作为网关或代理,未及时从上游服务器接收请求。
505(HTTP 版本不受支持) 服务器不支持请求中所使用的 HTTP 协议版本。
posted @ 2010-03-04 15:26 小菜毛毛 阅读(161) | 评论 (0)编辑 收藏

 
java工厂模式
[ 2009-2-6 16:15:00 | By: 孙大峰 ]
 
6

一、引子
话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi后他说"开奥迪车!"你一定说:这人有病!直接说开车不就行了?! 而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是,这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式!!

二、简介
工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:
1.
简单工厂模式(Simple Factory)
2.
工厂方法模式(Factory Method)
3.
抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况:
1.
在编码时不能预见需要创建哪种类的实例。
2.
系统不应依赖于产品类实例如何被创建、组合和表达的细节

 
三、简单工厂模式
顾名思义,这个模式本身很简单,而且使用在业务较简单的情况下。
它由三种角色组成(关系见下面的类图):
1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

那么简单工厂模式怎么用呢?我来举个例子吧,我想这个比讲一大段理论上的文字描述要容易理解的多!下面就来给那个暴发户治病: P
在使用了简单工厂模式后,现在暴发户只需要坐在车里对司机说句:"开车"就可以了。来看看怎么实现的:
//
抽象产品角色
public interface Car{
public void drive();
}

//具体产品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz ");
}
}

public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw ");
}
}
。。。(奥迪我就不写了:P

//工厂类角色
public class Driver{

//工厂方法
//
注意 返回类型为抽象产品角色
public static Car driverCar(String s)throws Exception {

//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz")) return new Benz();
else if(s.equalsIgnoreCase("Bmw"))
return new Bmw();

......
else throw new Exception();
。。。

//欢迎暴发户出场......
public class Magnate{
public static void main(String[] args){
try{
//
告诉司机我今天坐奔驰
Car car = Driver.driverCar("benz");
//
下命令:开车
car.drive();
。。。
如果将所有的类放在一个文件中,请不要忘记只能有一个类被声明为public
程序中类之间的关系如下:
这便是简单工厂模式了。下面是其好处:
首先,使用了简单工厂模式后,我们的程序不在"有病",更加符合现实中的情况;而且客户端免除了直接创建产品对象的责任,而仅仅负责"消费"产品(正如暴发户所为)。
下面我们从开闭原则上来分析下简单工厂模式。当暴发户增加了一辆车的时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。那么对于产品部分来说,它是符合开闭原则的--对扩展开放、对修改关闭;但是工厂部分好像不太理想,因为每增加一辆车,都要在工厂类中增加相应的商业逻辑和判断逻辑,这显自然是违背开闭原则的。
对于这样的工厂类(在我们的例子中是为司机师傅),我们称它为全能类或者上帝类。
我们举的例子是最简单的情况,而在实际应用中,很可能产品是一个多层次的树状结构。由于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝类坏了,进而累坏了我们可爱的程序员:(
正如我前面提到的简单工厂模式适用于业务将简单的情况下。而对于复杂的业务环境可能不太适应阿。这就应该由工厂方法模式来出场了!!

四、工厂方法模式
先来看下它的组成吧:
1、抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2、具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
3、抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4、具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
来用类图来清晰的表示下的它们之间的关系:


我们还是老规矩使用一个完整的例子来看看工厂模式各个角色之间是如何来协调的。话说暴发户生意越做越大,自己的爱车也越来越多。这可苦了那位司机师傅了,什么车它都要记得,维护,都要经过他来使用!于是暴发户同情他说:看你跟我这么多年的份上,以后你不用这么辛苦了,我给你分配几个人手,你只管管好他们就行了!于是,工厂方法模式的管理出现了。代码如下:
//
抽象产品角色,具体产品角色与简单工厂模式类似,只是变得复杂了些,这里略。
//
抽象工厂角色
public interface Driver{
public Car driverCar();
}
public class BenzDriver implements Driver{
public Car driverCar(){
return new Benz();
}
}
public class BmwDriver implements Driver{
public Car driverCar() {
return new Bmw();
}
}
......//
应该和具体产品形成对应关系,这里略...
//
有请暴发户先生
public class Magnate
{
public static void main(String[] args)
{
try{
Driver driver = new BenzDriver();

Car car = driver.driverCar();
car.drive();
}catch(Exception e)
{ }
}
}
工厂方法使用一个抽象工厂角色作为核心来代替在简单工厂模式中使用具体类作为核心。让我们来看看工厂方法模式给我们带来了什么?使用开闭原则来分析下工厂方法模式。当有新的产品(即暴发户的汽车)产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有的代码。看来,工厂方法模式是完全符合开闭原则的!
使用工厂方法模式足以应付我们可能遇到的大部分业务需求。但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的。所以我建议在这种情况下使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。
当然特殊的情况,就要特殊对待了:对于系统中存在不同的产品树,而且产品树上存在产品族,那么这种情况下就可能可以使用抽象工厂模式了。

五、小结
让我们来看看简单工厂模式、工厂方法模式给我们的启迪:
如果不使用工厂模式来实现我们的例子,也许代码会减少很多--只需要实现已有的车,不使用多态。但是在可维护性上,可扩展性上是非常差的(你可以想象一下,添加一辆车后要牵动的类)。因此为了提高扩展性和维护性,多写些代码是值得的。

六、抽象工厂模式
先来认识下什么是产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。如果光看这句话就能清楚的理解这个概念,我不得不佩服你啊。还是让我们用一个例子来形象地说明一下吧。

图中的BmwCarBenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCarBmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCarBenzSportsCar也是一个产品族。
回到抽象产品模式的话题上,可以这么说,它和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。而且使用抽象工厂模式还要满足一下条件:
1.
系统中有多个产品族,而系统一次只可能消费其中一族产品
2.
同属于同一个产品族的产品以其使用。
来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

看过了前两个模式,对这个模式各个角色之间的协调情况应该心里有个数了,我就不举具体的例子了。只是一定要注意满足使用抽象工厂模式的条件哦,不然即使存在了多个产品树,也存在产品族,但是不能使用的。

posted @ 2010-03-04 15:21 小菜毛毛 阅读(302) | 评论 (0)编辑 收藏

围剿 Flash 的不仅有 HTML 5,还有 JavaScript,著名的 JavaScript 框架 jQuery 在运动特效方面已经越来越流畅,有时候你需要点一下右键来确认它不是 Flash。本文介绍了10个非常出色的 jQuery 运动特效,这些效果可以更有效地展示你的内容。

1. 流感导航菜单

下面的导航菜单,当鼠标在上面移动的时候,会很流畅地垂下解释菜单,当你将鼠标在上面快速左右移动的时候,会怀疑这是 Flash。

Fluid  Navigation – How to create an informative menu-bar with jQuery &  CSS

2. 转花灯

Roundabout 是一个 jQuery 插件,可以将一组 HTML 对象转换为旋转花灯的效果。

Move  Elements with Style

3. 拉洋片

拉洋片也许是 jQuery 最拿手的效果了。该效果在遇到 JavaScript 被禁用的场合会自动降级使用。

Automatic Image Slider w/ CSS & jQuery

4. jQuery Quicksand 插件

这个让人赞叹的插件,可以对一组 HTML 对象重新洗牌,效果非常出众。

    jQuery  Quicksand Plugin

    5. 导航滑块

    这种风格的导航已经见于很多站点,鼠标在导航菜单上移动的时候,一个高亮指示条随着鼠标滑动,指示当前的导航位置。

    jQuery  Magic Line Sliding Style Navigation

    6. 文字的移动纹理

    在文字上,显示移动的纹理,效果美轮美奂。原理是,做一个带透明文字的 PNG 图像放在一个容器里,容器的背景放一张图案,用 jQuery 移动容器的背景,很简单,不过,不支持 IE6,因为 IE6 不支持 PNG。

    Text  with Moving Backgrounds

    7. jDiv: jQuery 导航 Tab

    一个可以显示丰富内容的下拉导航菜单(演示要翻墙)。

    jDiv: A  jQuery navigation menu alternative

    8. 基于 CSS3 和 jQuery 的半透明导航系统

    鼠标在导航菜单上移动,显示半透明的指示图标。CSS3 做这个实在太容易了。

    Halftone Navigation Menu With jQuery & CSS3

    9. 云台式拉洋片

    常规的拉洋片效果要么左到右,要么右到左,或者垂直上下,这个 jQuery 效果可以象云台那样扫镜头。

    Animate Panning Slideshow with jQuery

    10. SlideDeck

    SlideDeck 是一种新颖的内容展示方式,有点类似 Outlook 的手风琴菜单,但视觉效果和用户体验更好一些。

    SlideDeck

    本文来源:http://devsnippets.com/article/10-jquery-transition-effects.html

     

    posted @ 2010-03-03 09:11 小菜毛毛 阅读(1202) | 评论 (0)编辑 收藏

    FCKeditor 是个开源的HTML 文本编辑器,可以让web 程序拥有如MS Word 这样强大的编辑功能。等等。但是,它有一个不足之处是只有三个皮肤。而且看起来也都不怎么好看。针对此问题,我们就来探讨一下FCKeditor如何更换与创建皮肤。

    我们找到FCKeditor目录里的fckconfig.js文件,用记事本打开。找到下面这一句

       1. FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;

    这就是默认的皮肤文件设置。可以将后面的default设置成其它的。自带的三套皮肤目录分别是:default、office2003和silver。更改完成后清空一下缓存。再次打开带有编缉器的网页。我们可以发现编缉器的风格已经改变了。
    posted @ 2010-03-02 17:05 小菜毛毛 阅读(893) | 评论 (0)编辑 收藏

    由于FckEditor for java 2.4相对于2.3而言做了许多改变,这些改变使得我们的Fckeditor配置起来更方便。例如:

    基础包名从:com.fredck.FCKeditor 改为 net.fckeditor.

    文件上传SimpleUploaderServle整合到了ConnectorServlet里面,WEB,XML的配置就简单多了,下面通过一个实例说明配置详细步骤

    1、首先登陆www.fckeditor.net/download下载FCKeditor的最新版本,需要下载2个压缩包,一个是基本应用。另一个是在为在jsp下所准备的配置。

    最新版本为:FckEditor2.6.3和FckEditor for java 2.4

    FCKeditor 2.6.3下载地址:sourceforge.net/project/downloading.php     
           具体下载地址:http://easynews.dl.sourceforge.net/sourceforge/fckeditor/FCKeditor_2.6.3.zip
           FCKeditor for Java 下载地址:sourceforge.net/project/downloading.php
         具体下载地址:http://switch.dl.sourceforge.net/sourceforge/fckeditor/fckeditor-java-2.4-bin.zip(发行版,如果需要源码或者demo包请另行下载)

    请下载demo包,否则会出现留言中那位朋友的错误!


    下载之后分别为:FCKeditor_2.6.3.zip 和 fckeditor-java-2.4-bin.zip(fckeditor-java-demo-2.4.war)将它们分别解压。

    2、首先在MyEclipse(或者其他的IDE)下建立一个新项目例如:FckedtiorTest 即http://localhost:8080/FckeditorTest

    现在将解压后的FCKeditor_2.6.3.zip 里面的fckeditor文件夹拷贝到当前的项目文件夹里面。我的demo项目目录结构如下:

             3、配置web.xml。配置文件如下,这就是全部了,其他的不需要再配置,由于SimpleUploaderServle整合到了ConnectorServlet里面,所以文件上传等都不需要再配置。

    <servlet>
       <servlet-name>Connector</servlet-name>
       <servlet-class>
        net.fckeditor.connector.ConnectorServlet
       </servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
       <servlet-name>Connector</servlet-name>
       <url-pattern>
        /fckeditor/editor/filemanager/connectors/*
       </url-pattern>
    </servlet-mapping>

    4、在src目录下面建立fckeditor.properties资源文件,在里面写入这么一行“connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl”

    5、下面写测试页面:

         index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.fckeditor.net" prefix="FCK" %>
    <html>
    <head>   
        <title>FckEditor测试</title>
    </head>
    <body style="text-align: center;">
    <div style="text-align: center;width: 600pt">
    <h2>FckEditor测试</h2>
    <hr>
    <form action="ShowData.jsp" method="post">
         <FCK:editor instanceName="test" height="400pt">
       <jsp:attribute name="value"> 这里是<a href="http://hi.baidu.com/huqiwen">数据测试</a>
       </jsp:attribute>
    </FCK:editor>     
       <input type="submit" value="提交"/>
       <input type="reset" value="重置"/>
       </form>
    </div>
    </body>
    </html>

     

       显示数据的页面:ShowData.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <head>
       <title>FCKeditor - 显示数据</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <%
       request.setCharacterEncoding("UTF-8");
       String data = request.getParameter("test");
    %>
    <body>
       <h1>FCKeditor - 显示数据</h1>  
       <hr/><br />
       <%=data%>
    </body>
    </html>

    6、结果截图

    index.jsp

    ShowData.jsp

    7、给FckEditor瘦身

          删除fckeditor目录下面所有以“_”开头的文件或者文件夹,像"_samples"、"_documentation.html“等

         删除fckeditor目录下面除了,fckconfig.js   fckpackage.xml fckstyles.xml   fcktemplates.xml外的所有文件,当然要保留editor文件夹

         删除fckeditor/editor/lang目录下面除了en.js、 zh-cn.js外的所有文件

         删除fckeditor\editor\filemanager目录下面的connectors文件夹

         删除editor\skins目录下面除了default下面的文件夹,这个里面是皮肤,共有三种,可以在fckconfig.js里面设置。

    PS:demo下载:http://www.namipan.com/d/7218d2c0bf3e33e8aedf972b41d5d09f3efab0d8f53b0900

    再PS:有关中文乱码问题请参考:http://hi.baidu.com/huqiwen/blog/item/c709aa18fa187a0135fa4103.html

    posted @ 2010-03-02 16:28 小菜毛毛 阅读(568) | 评论 (0)编辑 收藏

    http://133.61.8.59:7001/index_zh_CN.jsp 相关文档
    http://localhost:7001/console WEB控制
    posted @ 2010-02-22 16:41 小菜毛毛 阅读(273) | 评论 (0)编辑 收藏

    现在要求您诊断 WebLogic J2EE 应用程序中的性能问题。因为 Java 系统是如此复杂,所以诊断 WebLogic J2EE 应用程序中的性能问题就有点像诊断疑难杂症。
    为了正确地找到问题所在,您需要对症状有全面了解,要做好准备进行大量研究工作,最后您需要制定正确的治疗方案。本文讨论了 J2EE 应用程序性能问题的一些最常见类型和它们产生的原因,以及如何正确地诊断和消除它们的推荐指导原则。


    症状
      WebLogic 应用程序性能问题的症状是什么?您看到的症状可以指导您在所有可能的问题中进行搜索。请准备一个笔记本并开始向人们调查。试着把对问题根本原因的推测和假设与系统行为的实际证据分离。下面是一个常见症状集的列表: 持续缓慢:应用程序一直特别慢。改变环境因素(负载、数据库连接数量)对整体响应时间的改变很小。 随着时间推进越来越慢:系统运行时间越长(负载相对均衡不变的情况下),就变得越慢。有可能是(最后)达到了某个阈值,系统被锁定或者由于大量错误而崩溃。 随着负载增加越来越慢:每增加一个额外用户,应用程序就变得越慢。如果用户离开系统,系统就“冷却下来”,恢复正常。 零星的挂起或者异常错误:偶尔(可能由于负载或某些其它原因),在页面无法完成或者出现追踪到异常和堆栈的错误页时,用户会看到挂起的情况。挂起的数量可能不同,但总是无法完全消除,甚至在强化 (“burn in”) 期间之后也是如此。 可以预见的锁定:首先出现一些挂起或错误,然后加速出现,直到系统完全被锁定。通常这些问题可以通过“重新启动来管理”的方式解决。 突然混乱:系统一直运行正常,相当一段时间里(可能一个小时,也可能是三天)性能都还差强人意,但是“突然某个时候,根本没有任何原因的”,系统开始出现大量错误,或者被锁定。

    为什么问题诊断如此复杂? 软件开发网
      对于 WebLogic 应用程序的某个具体应用模式来说,没有既定的公式可以用来推导出它的性能(在严格的实时工程当中,速度单调分析这类技术确实可以做这项工作,但是在本文里还是让我们忘记它吧)。网络上是否存在另外一个系统正在密集使用一个共享的后端服务,对于实际产生的性能有很大影响。性能也许还取决于 JDBC 驱动程序版本和数据库的正确匹配。也许开发人员三年前写的一些代码恰巧在这个时候才出现特定类型的异常,而您急切需要的解决问题回馈,却恰恰包含在这个异常里。
      从本质上说,典型业务系统的性能是由成千上万交互的变量和决策共同作用的结果。就像人体一样,有太多连锁着的部分和过程,所以很难理解系统的整体。因此我们进行了简化,并求助于拱形模式。

    疾病
      您看到的症状的根本原因是什么?它是初级流行性感冒或者是肺炎的开始吗?是应用程序内部的底层问题还是它所在的 JVM 外部的问题?请参阅表 1 中应用程序性能低下的一些最常见原因。

    http://www.mscto.com

     

    表1

     

    毛病 描述 症状 原因或治法 线性内存泄漏 每单位(每事务、每用户等)泄漏造成内存随着时间或负载线性增长。这会随着时间或负载增长降低系统性能。只有重启才有可能恢复。 随着时间越来越慢
    随着负载越来越慢 虽然可能有多种外部原因,但最典型的是与资源泄漏有关(例如,每单位数据的链表存储,或者没有回收的回收/增长缓冲区)。 指数方式内存泄漏 双倍增长策略的泄漏造成系统内存消耗表现为时间的指数曲线 随着时间越来越慢
    随着负载越来越慢 通常是由于向集合(Vector,HashMap) 中加入永远不删除的元素造成的。 糟糕的编码:无限循环 线程在 while(true) 语句以及类似的语句里阻塞。 可以预见的锁定 您需要对循环进行大刀阔斧的删剪。 资源泄漏 JDBC 语句,CICS 事务网关连接,以及类似的东西被泄漏了,造成对 Java 桥接层和后端系统的影响。 随着时间越来越慢
    可以预见的锁定
    突然混乱 通常情况下,这是由于遗漏了 finally 块,或者更简单点,就是忘记用 close() 关闭代表外部资源的对象所造成的。 外部瓶颈问题 后端或者其他外部系统(如鉴权)越来越慢,同样减缓了 J2EE 应用服务器和应用程序 持续缓慢
    随着负载越来越慢 咨询专家(负责的第三方或者系统管理员),获取解决外部瓶颈问题的方法。 外部系统 J2EE 应用程序通过太大或太多的请求滥用后端系统。 持续缓慢
    随着负载越来越慢 清除冗余的工作请求 ,成批处理相似的工作请求,把大的请求分解成若干个更小的请求,调整工作请求或后端系统(例如,公共查询关键字的索引)等。 糟糕的编码:CPU密集的组件 这是 J2EE 世界中常见的感冒。一些糟糕的代码或大量代码之间一次糟糕的交互,就挂起了 CPU,把吞吐速度减慢到爬行的速度。 持续缓慢
    随着负载越来越慢 典型的解决方案就是数据高速缓存或者性能计数。 中间层问题 实现得很糟糕的桥接层(JDBC 驱动程序,到传统系统的 CORBA 连接),由于对数据和请求不断的排列、解除排列,从而把所有通过它的流量减慢到爬行速度。这个毛病在早期阶段很容易与外部瓶颈混淆。 持续缓慢


    随着负载越来越慢 检查桥接层和外部系统的版本兼容性。如果有可能,评估不同的桥接供应商。如果重新规划架构,有可能完全不需要桥接。 内部资源瓶颈:过度使用或分配不足 内部资源(线程、放入池的对象)变得稀缺。是在正确使用的情况下加大负载时出现过度使用还是因为泄漏? 随着负载越来越慢
    零星的挂起或异常错误 分配不足:根据预期的最大负载提高池的最大尺寸。过度使用:请参阅外部系统的过度使用。 不停止的重试 这包括对失败请求连续的(或者在极端情况下无休止的)重试。 可以预见的锁定
    突然混乱 可能就是后端系统完全宕机。在这里,可用性监控会有帮助,或者就是把尝试与成功分开。 线程:阻塞点 线程在过于积极的同步点上备份,造成交通阻塞。 随着负载越来越慢
    零星的挂起或异常错误
    可以预见的锁定
    突然混乱 可能同步是不必要的(只要重新设计),或者比较外在的锁定策略(例如,读/写锁)也许会有帮助。 线程:死锁/活动锁 最普遍,这是您基本的“获得顺序”的问题。 突然混乱 处理选项包括:主锁,确定的获得顺序,以及银行家算法。

    测量关键的统计指标


      当您负责诊断问题的时候,您应当能够跟踪关于您的 WebLogic 应用程序健康情况的关键统计指标。您能测量什么?有什么工具可以提供帮助呢?

     

    使用的全部内存:在不同级别上 (JVM 堆栈,操作系统),Java 堆栈 profiler 对堆栈的正确使用提供了可见性;像 top ,vmstat 以及 Windows Perfmon 这样的工具在操作系统级别上为内存使用提供可见性。察看 Java 堆栈的一个简单的聚合视图,请打开—verbose:gc 开关(如果在您的 JVM 上可以使用的话)。 CPU 时间:合并(可以通过使用 top 等方式得到)每个组件或每种方法。其中某些指标可以通过 WebLogic 管理控制台得到。也可以通过 Java profile 使用它们。 计时 (a.k.a.“实” 时):每事务,每组件,每方法;可以按统计平均值或单独的数据点查看。Java profiler 可以产生一些这样的数据,但是使用程序监控解决方案可能是您的最佳选择。 内部资源:
    分配的数量,使用的数量,等待的客户数量,获得资源的平均等待时间,使用资源平均消耗的时间,使用资源完成请求工作时使用的平均时间。应用程序服务器通常会给出这些数字的最小可视性。 外部资源:分配的数量,使用的数量,等待的客户数量,平均等待时间,加上对这些外部系统的直接测量(例如查看它能多快完成请求的工作)。不要忘记运行应用程序服务器的操作系统和硬件也是“外部资源”-例如,是否您使用了太多的进程或端口?可以用两种形式测试这些资源—从 JVM 内部测试提供资源的桥接层,用外部资源本身的工具测量外部资源。 网络应用:带宽使用,延迟。虽然操作系统自带的工具(例如 netstat)也有助于做这些工作,但是网络嗅探器设备可以深入了解这些信息。 系统状态:用线程清除,日志和跟踪文件,堆栈跟踪等等。或者在更深层次上,就像调试器中查看的那样使用变量的值。

    实验工作
      有的时候,在一次标杆运行中获得的数据,不足以揭示答案。那么找到答案的机会就在于您还有些有限的预算,可以运行试验或者做实验工作,来完成诊断。您可以运行什么类型的试验呢?您可以修改、观察什么变量呢?

    http://www.mscto.com

     

    尝试观察系统行为在一段时间上的变化。应用一个衡定的负载,并观察您的指标随时间发生的变化。您可能会看到某些趋势,短则一小时就可看到,长则二三天。例如,您可以看到内存使用随着时间而增长。随着使用的内存数量达到上限, JVM 花在搜索垃圾上的时间和操作系统花在分配内存页面上的时间开始减少用户事务的整体响应时间。当抛开 GC 的时候,垃圾搜集的整个过程可能过长,从而造成执行中的事务超时和异常。现在可以开始查找资源泄漏或内存泄漏了。 尝试在系统上改变负载。 采用三到四种工作负载(例如,10个,50个和100个用户),并搜集每个负载的数据。分析一下您对这些负载的测量情况。例如,您可能发现,当您的账户登录 servlet 的响应时间无论如何都会低于 50 毫秒的时候,计算销售税的 EJB 却随着用户数据的增长,速度呈线性下降。如果这个 EJB 性能在负载下的差异能解释整体响应时间性能在负载下的增长,那么现在就是深入分析这个组件的时候了。谨记一定还要把负载恢复原状,并查看系统是否复原。 尝试把系统分成小单元,针对每个单元轮流进行压力测试。 选择一个或多个坐标系对系统进行划分。主要的一个是系统面上的层:负载均衡器、Web 服务器、WebLogic Server,以及后端。其它示例包括用户账户,内部组件,事务类型,以及单独的页面。假设您选择了用户账户。在用户 A 的账户下运行一些负载,然后再在用户 B 的账户(应当非常不同)下运行某些负载;比较两次运行间不同的测量结果。或者,轮流选择您使用的后端系统,分别对使用每个后端系统比较重的应用程序组件进行压力测试。具体要选择哪个坐标进行划分,完全取决于您要证明或者否定哪个假设。下面是一些具体想法:
      - 如果某个用户的登录看起来造成了问题,那么有可能是这个用户账户档案(例如,装入 2,000 个订单的完整采购历史),或者可能是他使用系统的方式(例如,页面访问的顺序,或者他用来查找某个文档的查询字符串的正确性)。
      - 如果您使用的是一个集群系统,请尝试以单台机器为单位划分。尽管尽了最大努力,有的时候还会有一些机器没有安装最新的应用服务器或者操作系统补丁,这就会造成不同的性能特征。而且,还请注意负载均衡器,或者保姆进程,查看它们是否公平地分配了工作并跟踪了进入请求。

    诊断:测试您的推测
      在这个时候,您应当已经有了足够的信息,可以形成关于性能瓶颈原因的推测了(请参阅表 1)。为了验证您的推测是否正确或者在多个备选的推测之间进行筛选,您需要分析更多的信息或者在系统上运行更多的标杆测试。这里是一些可以帮助您的指导意见:
    区分糟糕的编码(或者是应用程序组件或者是桥接层)和瓶颈 (内部的或外部的),请查看整体的 CPU 使用情况。如果它在负载下没变化,但是整体响应时间变化了,那么就是应用程序花费了它的大多数时间来等待。 仅仅是因为好像是外部资源的问题,不代表您就可以立刻把责任推到资源上。 例如,分层或联网的问题,也能造成数据库看起来很慢,虽然实际上它并不慢。或者,更简单一点,您对数据库的请求可能是不合理的(每次用户登录的时候,都要进行三个表之间的 200 万行记录合并)。应当一直把桥接层的响应时间(例如,JDBC 驱动器)和资源提供的时间或者工具提供的时间进行比较(例如,DBA Studio)。 结构化的图表有助于您理解系统内部的整体交互,但是不要忘记地图并不是领地。.编码错误或者对架构意图的误解,有可能使系统的实际行为与期望的行为不同。请相信性能工作提供的实际数据,而不要相信一个声称“每个用户事务将只会发布一个 SQL 语句”这样的文档。 使用 Occam 军刀。 假设您有两个备选推测,一个是:在 200 万行代码里,有一个编码糟糕的组件,直到上周这个组件才集成进来;另一个是 JVM 的即时编译器生成了糟糕的机器码,破坏了这个变量的内存完整性。除非您有具体的数据来证实,否则(我已经看到了第二种情况发生),请更详细地检查第一个假设。J2EE 系统确实容易出错,但是不要让这一点就妨碍您先测试一个更简单的假设。 日志文件中没有错误不代表不存在错误。 有许多原因可以造成不在日志里写下异常;可能是因为程序员认为某件事“永远不会发生”,于是就排除了这个异常;也可能是因为某些组件可以使用故障恢复机制,所以就没有记录第一次故障。

    示例诊断
      让我们来实际研究一个示例。您的 WebLogic 应用程序表现出在负载下越来越慢的症状。您加入的用户越多,系统越慢。一旦消除负载,系统就冷静下来,没有任何后遗症。您对这一主要症状进行测试,发现并得到图 2 所示的以下结果(时间测量针对的是单一典型事务的端到端完成时间)。

    表2

    负载(用户数) 来回用时(毫秒) 10 300 50 471 100 892 150 1067

    应用程序性能在负载下越来越慢

    http://www.mscto.com

     

      您形成了几个假设。也许这里的毛病是一个糟糕编码的组件,也许是后端系统的瓶颈。它可能是一个同步阻塞点。您怎样才能分清它们的不同呢?假设您还测试了应用程序服务器在负载运行期间的CPU整体使用情况,并得到了表 3 所示的结果。

    表3

     

    负载(用户数) 来回用时(毫秒) 整体 CPU 时间(%) 10 300 30 50 471 33 100 892 37 150 1067 41

    问题看起来好像是“等待”瓶颈

     

      现在看起来,系统不是 CPU 密集型的,这就是说它的多数时间都花在等待上了。那么是它的内部(例如,同步交通阻塞)或外部(缓慢的数据库)的问题?好,让我们假设我们还稍微多搜集了一些数据,如表 4 所示。

     

    表4

    负载(用户数) 等待数据库连接的线程数量 JDBC 查询用时(毫秒) 10 2 58 50 3 115 100 3 489 150 4 612


    问题是否出在一个缓慢的 SQL 语句上呢?

    现在看起来并不是内部等待数据库连接的瓶颈,相反,好像是 JDBC 查询本身的问题。JDBC 查询不仅随整体事务时间的不同而不同,而且它糟糕的性能还解释了整体性能糟糕的原因。但是,我们还不能完全确定。您仍然还有三个主要的假设要排序:是否数据库本身慢?应用程序是否对数据库进行了不合理的请求?或者问题是不是出在应用程序和数据库之间的某个层上?您拿出数据库供应商专用的工具,从它的角度查看响应时间。假设您看到如表 5 所示的数字。

    表5

     

    负载(用户数) JDBC 查询计时(毫秒) DB SQL 执行的时间(毫秒) 10 58 43 50 115 97 100 489 418 150 612 589
    实际是数据库中的 SQL 语句慢

      如果您没有看到这条信息,那么您可能要返回 JDBC 驱动程序,期待能够发现其中的某些同步问题(请记住,CPU 没有被抑制)。幸运的是,在这个案例里,您已经把具体问题的范围缩小到数据库查询上。找出查询请求是否足够合理,需要一些相关领域的知识,需要熟悉系统,但是在这个案例里,它也许就是发现查询把非索引字段和外键进行了比较。您和 DBA 协作,它修改索引方案,让查询变得更快,而您则找到了您的药方。

    结束语
      诊断 WebLogic J2EE 应用程序的性能瓶颈是一个艰苦的旅程。请随时保持清醒,把事实与推测分开,总是用实际的证据来确认您的推测。我希望给您带来了思考和实践问题的一些有用的想法的分类。就像调试,这仍然是一项不明确的艺术,但是深思熟虑会带您走出困境。祝您好运!

     

    关于作者
      John Bley 是 Wily Technology 的软件工程师。他有丰富的 Java 编程和架构经验。为了撰写本文,他总结了 Wily 的企业客户的经验,Wily负责管理复杂的 J2EE 环境。(更多)
    原文出处 http://www.sys-con.com/story/?storyid=43024&DE=1

    posted @ 2010-02-05 13:32 小菜毛毛 阅读(940) | 评论 (0)编辑 收藏

    Google近日推出了一款网站性能优化工具:Page Speed(http://code.google.com/speed/page-speed/)。它旨在帮助站长与网站开发者分析网站中存在的性能方面的问题,并有针对性地提出改进意见。Page Speed在功能方面极其类似于Yahoo!的网站性能优化YSlow,不过YSlow要比Page Speed推出早得的多。它们都是基于Firebug的Fireffox插件,使用方法也类似。这里我主要介绍一下Google新推出的Page Speed的使用,对Yslow感兴趣的朋友可以参照我以前的这篇文章《你的网站为什么会慢?——用YSlow为你的网站提速》,同时还有我翻译的Yahoo!的文章Yahoo!网站性能最佳体验的34条黄金守则——内容JavaScript和CSS服务器图片、Coockie与移动应用,相信一定会对你提高网站性能有帮助。

    一、Page Speed的安装及使用

    Page Speed是一款Firefox插件,同时他依附于别款插件Firebug,也就是说你的Firefox浏览器中必须已经安装了Firebug才能安装Page Speed。安装环境为Firefox 3.0.4以上,Fireug 1.3.3以上。

    Page Speed的使用也很简单,在Firefox中点击右下角的Firebug图标启动后,再点击Page Speed选项卡即可。要注意的是,你要对你网站内的某个页面进行性能分析,你必须先把该页面加载完成后才能使用Page Speed,也就是说只有在浏览器左下角出现“Done”或者"完成"之后才可以启用Page Speed进行分析。如果页面中流媒体,可能不会现在“完成”,这种情况要等到流媒体可以播放。

     page speed启动界面

    然后点击“Analyze Performance”(性能分析),这时Page Speed会根据web performance best practices (网页性能最佳实践)进行逐项打分。然后根据重要程序和优先级对每项进行排列。

    Page Speed运行界面

    此外,你还可以点击每条建议前面的“加号”展开查看详细的描述,或者直接点击每条规则相看该规则的具体内容,还可以点击“Show Resource”(查看来源)来查看每条建议是针对页面中哪部分内容提出的。

    对于分析结果中的符号说明一下:

    1. 红色感叹号代表高优先级提示,表示这一项严重影响了你的页面性能,你需要优先对其进行性能优化;
    2. 橙色三角代表此项提示需要引起你的注意,并进行适当改进;
    3. 绿色的对号代表该项规则在你的网站中应用得到,你在修改了前面两部分的提示之后,它们有可能变为绿色的对号;
    4. 蓝色消息符号是为你提供了额外的帮助信息,请稍加留意(需要注意的是,如果你的页面中出现了大量的此类符号,可能是因为你在页面加载完成之前就进行了网站性能分析)。

    二、活动记录

    活动记录是一条页面活动的时间轴,它记录了包括网络事件、JavaScript运行在内的所有浏览器活动。你可以使用它并配合性能分析中的数据进一步对网站性能做出评估。

    • 查看页面运行过程中所耗费的时间,以毫秒计算;
    • 查看浏览器事件,包括页面加载完成后的事件;
    • 区分造成页面响应缓慢的原因,其中包括网络来时、DNS查找、连接建立、JavaScript运行等;
    • 获取在特定时间或者事件下才响应的JavaScript事件列表;
    • 可以对其它标签或者窗口中打开的页面进行分析;
    • 多页面加载时的页面加载顺序;
    • 对根据Page Speed优化前后的表现进行对比。

    Page Speed 页面活动记录

    三、理解Page Speed中的事件

    页面记录选项卡下是通过时间线来记录各种资源加载到页面所有需要的时间。事件的记录时间间隔为10毫秒,如果事件需要的时间少于10毫秒那么它将用较短的色块来表示。时间线中没有任何颜色的表示,在浏览器事件的运行依赖于其它进程,如DOM和CSS渲染、Flash ActionScript、渲染、操作系统事件等。

    网络事件 描述
     
    DNS 浏览器查找DNS所需要的时间
     
    t连接等待 浏览器与网站服务器建立连接(TCP)需要一定的时间。由于浏览器可以打开的连接数目是有限的,如果达到这个限制他必须等其它连接关闭之后才能再重新建立一个新的连接。(更多关于浏览器连接的信息可以参照Parallel downloads across hostnames)。 这个事件显示了浏览器等其它连接完成的时间。
     
    连接 浏览器和web服务器建立连接。这个事件只有打开新连接时出现,已有连接重新打开使用不包含在内。
     
    请求发送 浏览器发送的HTTP请求。只显示GET方式的请求。
     
    已连接 浏览器通过网络等待接收数据。事件随着浏览器TCP连接的结束而结束。
    本地事件 描述
     
    缓存 浏览器成功将内容加入到缓存中。
     
    可用数据 可用于浏览器呈现的数据。由于web服务器发送大量的数据,如果文件很大那么有可能一个资源会出现多个该事件。
     
     获取JS 浏览器获取JavaScript。该事件可能会延缓其它事件,如果此种情况出现,将会在其下一行列出。
     
    运行JS 浏览器执行JavaScript。该事件可能会延缓其它事件,如果此种情况出现,将会在其下一行列出。如果获取JS和运行JS中间有时间间隔,这说明源文件中包括有延时功能的函数。

    此外,Page Speed还包括了对已完成的JavaScript函数的信息搜集功能,当页面中的JS函数一旦运行,PageSpeed就会捕捉到相关信息。不通过对Page Speed进行设置还可以对未触发函数、延时加载函数等进行收集。

    下面的图片显示了7800毫秒时已经加载但还未触发的函数列表:

    Page Speed活动记录——JS收集

    而下面则显示是已经触发运行了的JS函数:

    Page Speed

    此外Pge Speed还有诸如JavaScript函数控制、浏览器User Agent设置等更高级功能。具体使用大家可以与YSlow对比一下。

    相信,用好这两款工具,对于站长和网站开发者来说会有极大的帮助。

    本文网址: http://www.dudo.org/article/NewSoftware/using_google_page_speed.htm
    转载请注意出处

    posted @ 2010-02-05 13:22 小菜毛毛 阅读(488) | 评论 (0)编辑 收藏

    最近在项目中需要用到用到JavaScript开发工具的支持,于是乎找到了曾经了解过但是并没有具体用过的aptana

             Aptana是一个开发Ajax的很好的ide,甚至该公司已经有自己的单独的Ajax Server和框架的支持。而且,至少到目前为止笔者所用过的支持JavaScript的ide中,aptana是最好的一个。且aptana提供了eclpse的插件,用起来几乎很上手而且很简单、方便,没有理由不去爱它。

             但是在MyEclipse下安装aptana总会遇到一些问题,笔者 也一样遇到了许多问题。现在这里就做一个总结,安装aptana遇到的问题:

    1、安装以后必须有Firefox支持。

              因为aptana需要firefox 的JavaScript调试工具做调试,因此如果你安装过了aptana之后系统没有安装firefox,那么,还是推荐你安装一个firefox吧。即使不用这个浏览器也可以安装上,省的出现一些其他的不可预料的问题。

             2、安装过程中出现无法下载或者不兼容的问题。

             这个问题正式困扰我好几天的问题。如果aptana安装不上或者安装之后出现错误,一般都是aptanamyeclipse或者eclipse的版本问题,因此请下载之前认真阅读官方网站的资料以及版本的限制。一般说来,你使用的myeclipse版本越高,那么对应的aptana的版本就需要越高。笔者使用的MyEclipse完整版6.0,配上最新的aptana的eclipse插件。

             3、是自动在线下载安装?还是link方式安装?

             笔者推荐使用后者,也就是手动配置link的方式安装aptana插件。这样可以避免许多问题。笔者前几次安装aptana插件都失败,原因就在于是自动下载安装的,可每次都会出现错误,而改用手动配置link的方式安装后,一切问题迎刃而解了。


             那么,跟着我一起来试试吧。

             1、先去aptana的官方网站下载eclipse的插件

             地址:http://update.aptana.com/update/studio/3.2/ 

             强烈推荐手动下载插件的方式而不是在线升级的方式,尤其你用的不是eclipse而是完整安装版的myeclipse

              2、手动以link方式安装aptana插件

              首先在你的myeclipse目录下打开eclipse文件夹:

     然后将下载后的aptana插件文件解压缩到任何目录(笔者解压缩到了eclipse所在的目录)。再在links文件夹中新建一个文本文件aptana.link,其内容形式为:

             path={aptana插件存放的位置} 

    例如笔者的link文件内容为:

    path=C:\\Program Files\\Eclipse-6.0M1\\eclipse\\Aptana

    然后,重启myeclipse就可以发现可爱的aptana的界面菜单了

     

        (如果安装过程中出现问题,请留言。)

    接下来就可以发现其伟大的特点了。

           Aptana编辑器设置成myeclipse默认的编辑器

    如果我们想把aptana的编辑器设置成myeclipse默认的编辑器的话,那么可以在多做一点事情,这样方便我们今后的开发了。笔者也正式如此。 

     

    在Window菜单中找到Preferences,打开的菜单中左边的树中展开General,找到editor

    点击File Associations,然后在上边选择要设置的文件后缀名,在下边找到aptana相应的编辑器,然后点“default”即可完成默认的设置了。很简单的,试试吧。

     

     

     相关链接:eclipse在线更新地址http://update.aptana.com/update/studio/3.2/ 

    官方相关介绍:http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration

     

     原文地址:http://werr1985.javaeye.com/blog/288777

    如果上述操作还不能安装的话:
    请将aptana插件中的features,plugins的文件复制或者剪切到E:\MyEclipse 6.0\eclipse下面的相应文件夹里面,以后保准能运行
    而且需要再windows-属性-aptana-my aptana/message center
    把use firefox...前面的复选框的狗狗去掉
    即可正常使用啦

    posted @ 2010-02-04 19:38 小菜毛毛 阅读(742) | 评论 (0)编辑 收藏

    仅列出标题
    共17页: First 上一页 6 7 8 9 10 11 12 13 14 下一页 Last