存档

2008年10月 的存档

ServletContextListener在服务器启动和关闭时创建和关闭缓存

2008年10月30日 admin 评论已被关闭

ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web缓存—-把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。

ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。

在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。

我们使用缓存的思路大概是:

  1. 服务器启动时,ServletContextListener 的 contextInitialized()方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute()方法将缓存类保存在 ServletContext 的实例中。
  2. 程序使用 ServletContext.getAttribute()读取缓存。如果是 JSP,使用a pplication.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存发生变化(如访问计数),你可以同时更改缓存和文件/数据库。或者你等 变化积累到一定程序再保存,也可以在下一步保存。
  3. 服务器将要关闭时,ServletContextListener 的 contextDestroyed()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
import User; //my own class
import DatabaseManager; // my own class
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;

public class MyContextListener

	implements ServletContextListener {
	private ServletContext context = null;

	public void contextInitialized(ServletContextEvent event) {
		context = event.getServletContext();
		User user = DatabaseManager.getUserById(1);
		context.setAttribute("user1", user);
	}

	public void contextDestroyed(ServletContextEvent event) {
		User user = (User)context.getAttribute("user1");
		DatabaseManager.updateUserData(user);
		this.context = null;
	}
}

布署 ServletContextListener

你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加

<listener>
	<listener-class>MyServletContextListener</listener-class>
</listener>

Popularity: 18% [?]

parseInt函数

2008年10月27日 admin 1 条评论

今天遇到了一个问题,parseInt(010) 结果等于 8,郁闷。

在网上搜了一下,原来 parseInt函数 还有个参数,用来分辨进制的,

parseInt(’010′,10) 结果为:10 意思为 把 “010”转换为10进制数,哈哈。

Popularity: 22% [?]

Visual Studio 2008注册码

2008年10月27日 admin 没有评论

Visual Studio 2008注册码 经测试可以使用,我现在就在用,嘿嘿

PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

使用方法:

开始–>控制面板–>添加删除程序–>点击VisualStudio2008 更改/删除 –>下一步 –>输入注册码–>升级–>完成

Popularity: 31% [?]

Visual Studio 2010

2008年10月21日 admin 评论已被关闭
10112fce 微软的更新真是快啊,哈哈。。。
早在10月初,微软就公布了下一代开发工具和平台“Visual Studio Team System 2010”以及“.NET Framework 4.0”,并透露他们将在2009年底-2010年正式发布.
下载地址:点击下载
http://www.microsoft.com/downloads/details.aspx?familyid=922b4655-93d0-4476-bda4-94cf5f8d4814&displaylang=en&tm
VSTS 2010开发代号“Rosario”,将致力于引领下一代平台发展、提高开发人员的工作效率和热情、创建突破性应用程序、推动云计算等新兴趋势、合理化应 用程序生命周期管理(ALM).VSTS 2010将支持统一建模语言(UML)和特定域语言(DSL),可为各类开发人员提供合适的工具,而这也是微软更大模型平台的一部分,“Oslo”技术也 是它的一部分.cnBeta的微软内线今天带来了尚未发布的产品截图,由于尚未发布,因此具体改进了什么我们也无从得知.

.Net Framework的LOGO

Popularity: 26% [?]

JavaScript自定义对象

2008年10月20日 admin 没有评论

JavaScript自定义对象,收集于互联网,供大家学习。

一,概述

在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类、Hashtable类等等。

目前在Javascript中,已经存在一些标准的类,例如Date、Array、RegExp、String、Math、Number等等,这为我们编程提供了许多方便。但对于复杂的客户端程序而言,这些还远远不够。

与Java不同,Java2提供给我们的标准类很多,基本上满足了我们的编程需求,但是Javascript提供的标准类很少,许多编程需求需要我们自己去实现,例如Javascript没有哈西表Hashtable,这样的话在处理键值方面就很不方便。

因此,我个人认为一个完整的Javascript对象视图应该如下:

二,基本概念

1,自定义对象。
根据JS的对象扩展机制,用户可以自定义JS对象,这与Java语言有类似的地方。
与自定义对象相对应的是JS标准对象,例如Date、Array、Math等等。
2,原型(prototype)
在JS中,这是一种创建对象属性和方法的方式,通过prototype可以为对象添加新的属性和方法。
通过prototype我们可以为JS标准对象添加新的属性和方法,例如对于String对象,我们可以为其添加一个新的方法trim()。
与严格的编程语言(例如Java)不同,我们可以在运行期间为JS对象动态添加新的属性。

三,语法规则

1,对象创建方式

1)对象初始化器方式

格式:objectName = {property1:value1, property2:value2,…, propertyN:valueN}
property是对象的属性
value则是对象的值,值可以是字符串、数字或对象三者之一
例如: var user={name:“user1”,age:18};
var user={name:“user1”,job:{salary:3000,title:programmer}
以这种方式也可以初始化对象的方法,例如:
var user={name:“user1”,age:18,getName:function(){
return this.name;
}
}
后面将以构造函数方式为重点进行讲解,包括属性和方法的定义等等,也针对构造函数的方式进行讲解。

2)构造函数方式

编写一个构造函数,并通过new方式来创建对象,构造函数本可以带有构造参数
例如:
function User(name,age){
this.name=name;
this.age=age;
this.canFly=false;
}
var use=new User();

2,定义对象属性

1)JS中可以为对象定义三种类型的属性:私有属性、实例属性和类属性,与Java类似,私有属性只能在对象内部使用,实例属性必须通过对象的实例进行引用,而类属性可以直接通过类名进行引用。

2)私有属性定义
私有属性只能在构造函数内部定义与使用。
语法格式:var propertyName=value;
例如:
function User(age){
this.age=age;
var isChild=age<12;
this.isLittleChild=isChild;
}
var user=new User(15);
alert(user.isLittleChild);//正确的方式
alert(user.isChild);//报错:对象不支持此属性或方法

3)实例属性定义,也存在两种方式:
prototype方式,语法格式:functionName.prototype.propertyName=value
this方式,语法格式:this.propertyName=value,注意后面例子中this使用的位置
上面中value可以是字符创、数字和对象。
例如:
function User(){ }
User.prototype.name=“user1”;
User.prototype.age=18;
var user=new User();
alert(user.age);
—————————————–
function User(name,age,job){
this.name=“user1”;
this.age=18;
this.job=job;
}
alert(user.age);

3)类属性定义
语法格式:functionName.propertyName=value
例如:
function User(){ }
User.MAX_AGE=200;
User.MIN_AGE=0;
alert(User.MAX_AGE);
参考JS标准对象的类属性:
Number.MAX_VALUE //最大数值 Math.PI //圆周率

4)对于属性的定义,除了上面较为正规的方式外,还有一种非常特别的定义方式,语法格式: obj[index]=value
例子:
function User(name){
this.name=name;
this.age=18;
this[1]=“ok”;
this[200]=“year”;
}
var user=new User(“user1”);
alert(user[1]);
在上面例子中,要注意:不同通过this[1]来获取age属性,也不能通过this[0]来获取name属性,即通过index方式定义的必须使用index方式来引用,而没有通过index方式定义的,必须以正常方式引用

3,定义对象方法

1)JS中可以为对象定义三种类型的方法:私有方法、实例方法和类方法,与Java类似:
私有方法只能在对象内部使用
实例方法必须在对象实例化后才能使用
类方法可以直接通过类名去使用
注意:方法的定义不能通过前面所说的index方式进行。
2)定义私有方法
私有方法必须在构造函数体内定义,而且只能在构造函数体内使用。
语法格式:function methodName(arg1,…,argN){ }
例如:
function User(name){
this.name=name;
function getNameLength(nameStr){
return nameStr.length;
}
this.nameLength=getNameLength(this.name);
}
3)定义实例方法,目前也可以使用两种方式:
prototype方式,在构造函数外使用,语法格式:
functionName.prototype.methodName=method;
或者
functionName.prototype.methodName=function(arg1,…,argN){};
this方式,在构造函数内部使用,语法格式:
this.methodName=method;
或者
this.methodName=function(arg1,…,argN){};
上面的语法描述中,method是外部已经存在的一个方法,methodName要定义的对象的方法,意思就是将外部的一个方法直接赋给对象的某个方法。
以function(arg1,…,argN){}的方式定义对象方法是开发人员应该掌握的。

定义实例方法的一些例子:例子1
function User(name){
this.name=name;
this.getName=getUserName;
this.setName=setUserName;
}
function getUserName(){
return this.name;
}
Function setUserName(name){
this.name=name;
}

定义实例方法的一些例子:例子2
function User(name){
this.name=name;
this.getName=function(){
return this.name;
};
this.setName=function(newName){
this.name=newName;
};
}

定义实例方法的一些例子:例子3
function User(name){
this.name=name;
}
User.prototype.getName=getUserName;
User.prototype.setName=setUserName();
function getUserName(){
return this.name;
}
Function setUserName(name){
this.name=name;
}

定义实例方法的一些例子:例子4
function User(name){
this.name=name;
}
User.prototype.getName=function(){
return this.name;
};
User.prototype.setName=function(newName){
this.name=newName;
};

4)定义类方法
类方法需要在构造函数外面定义,可以直接通过构造函数名对其进行引用。
语法格式:
functionName.methodName=method;
或者
functionName.methodName=function(arg1,…,argN){};
例子:
function User(name){
this.name=name;
}
User.getMaxAge=getUserMaxAge;
function getUserMaxAge(){
return 200;
}
或者
User.getMaxAge=function(){return 200;};
alert(User.getMaxAge());

4,属性与方法的引用

1)从可见性上说:
私有属性与方法,只能在对象内部引用。
实例属性与方法,可以在任何地方使用,但必须通过对象来引用。
类属性与方法,可以在任何地方使用,但不能通过对象的实例来引用(这与Java不同,在Java中静态成员可以通过实例来访问)。
2)从对象层次上说:
与Java bean的引用类似,可以进行深层次的引用。
几种方式:
简单属性:obj.propertyName
对象属性:obj.innerObj.propertyName
索引属性:obj.propertyName[index]
对于更深层次的引用与上面类似。
3)从定义方式上说:
通过index方式定义的属性,必须通过index方式才能引用。
通过非index方式定义的属性,必须通过正常的方式才能引用。
另外注意:对象的方法不能通过index方式来定义。

5,属性与方法的动态增加和删除
1)对于已经实例化的对象,我们可以动态增加和删除它的属性与方法,语法如下(假定对象实例为obj):
动态增加对象属性
obj.newPropertyName=value;
动态增加对象方法
obj.newMethodName=method或者=function(arg1,…,argN){}
动态删除对象属性
delete obj.propertyName
动态删除对象方法
delete obj.methodName

2)例子:
function User(name){
this.name=name;
this.age=18;
}
var user=new User(“user1”);
user.sister=“susan”;
alert(user.sister);//运行通过
delete user.sister;
alert(user.sister);//报错:对象不支持该属性

user.getMotherName=function(){return “mary”;}
alert(user.getMotherName());//运行通过
delete user.getMotherName;
alert(user.getMotherName());//报错:对象不支持该方法

四,总结

1,自定义对象机制,是JS最为吸引人的机制之一,对于C++和Java程序员而言,这简直太棒了!
2,对象创建存在两种方式:对象初始化器和构造函数。
3,对象属性和方法,具有可见性的约束,不同可见性的属性和方法,其定义方式也不一样。

五,应用案例

下面将采用一个应用案例:网上购物商城
应用案例的实现步骤:
1,场景设计

1)登录场景

2)购物场景

3)结算场景

2,界面设计

1)登录页面

2)购物页面

3)结算页面

3,类图设计

4,代码实现

1)Product类

2)ShoppingCart类


3)ShoppingSession类

4)ShoppingCartParser类

Popularity: 22% [?]

mysql数据库实现远程访问

2008年10月13日 admin 没有评论

我在本机装了MYSQL客户端管理工具,在链接mysql数据库时老是无法链接到远程mysql数据库服务器,原来默认情况下mysql安装中为了安全因素,没有赋予root用户远程访问权限,必须为mysql手动创建一个远程访问用户,然后通过次用户的参数实现opencms远程链接mysql .
首先,以root进入mysql,创建远程访问用户remote,这个用户除了有远程访问权限外,还据有于root相同的其他权限.
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 67 to server version: 4.0.18
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql>
mysql> GRANT ALL ON *.* TO dxj@’%’ IDENTIFIED BY ‘passd’ WITH GRANT OPTION;
Query OK, 0 rows affected (0.04 sec)

以上就分配了一个dxj远程访问MYSQL服务器用户,密码为”passd”

‘%’表示DXJ用户在任何一台客户端机器下都可以访问远程MYSQL服务器。

Popularity: 19% [?]

奇虎公司董事长周鸿祎做客和讯谈互联网发展前景

2008年10月12日 admin 没有评论

奇虎董事长周鸿祎简介:

2006年3月 投资奇虎公司,出任奇虎董事长;

2006年2月 成立天使投资基金,希望帮助更多的创新企业获得发展的机会; 2005年8月 IDGVC投资合伙人,希望藉多年来在中国本土市场摸爬滚打的经验,帮助国内众多的中小企业获得快速发展的机会,从而推动整个行业的发展;

2004年3月 雅虎中国区总裁,全面负责雅虎中国以及3721公司发展战略的制定及具体执行计划的管理;

1998年10月 创办3721公司,之前供职方正集团。

学历:西安交大管理学院系统工程系硕士学位。

Popularity: 11% [?]

Eclipse3.5发布

2008年10月8日 admin 没有评论

现在软件升级真快啊,Eclipse3.5这么快就发布了

这一新版的Java开发环境包括了不少新特性并对以前版本做出了改进。  新特性包括:

平台及UI

  • Solaris x86已经加入支持行列
  • Install New Software向导中的“Work with:”下拉框现在支持自动补全
  • 增加了一个新的介绍主题,叫做“Slate”
  • 打开的编辑器及多编辑器页面间的切换更加容易(快捷键:Ctrl+PageDown/Ctrl+PageUp,Alt+PageDown/Alt+PageUp)
  • 为了快速关闭,现在可以安全地跳过清楚历史这一步骤
  • 至于编辑器的常规提示框和对话框,或当前工作台窗口、表单现在可以在Mac Cocoa上使用
  • 应用程序在打印过程中或打开打印对话框时,可以选择portrait或landscape模式
  • Eclipse富客户端平台现在包含了一个OSGi声明式服务(Declarative Services——DS)的实现
  • 你现在可以针对给定选项“钉住”属性视图
  • 一个新偏好页,可以管理用于选择工作区的启动提示框
  • About对话框现在提供一种机制,让plug-in可以给平台about对话框提供安装页面
  • Install New Software向导现在无需等待连接任何更新服务器就可以立即打开
  • 双击垂直折叠线(vertical folding line)可以折起折叠区域
  • 比较编辑器有几处增强
  • 你现在可以在Debug视图中快速切换挂起线程
  • 支持Cocoa和Cocoa上的OpenGL
  • 增加对FileTransfer类的支持,使得可以在Explorer和Nautilus文件管理器之间进行copy/paste操作
  • 对项目浏览器作出几项改进
  • 文本编辑器现在支持块选择模式(也就是按列选择或矩形块选择)
  • 你现在可以直接在Synchronize视图中应用一个补丁
  • 在Eclipse中比较Word文档变化,现在使用该Word比较功能支持把变化显示为修订

Equinox

  • 增强Equinox DebugOptions API,以支持选项设置的动态变化
  • 增加一个新的debug跟踪API——org.eclipse.osgi.service.debug.DebugTrace,以增强并简化编写debug跟踪信息
  • OSGi R4.2核心规范给核心框架增加了一些小API
  • 新的Equinox并发API

Plug-in开发环境

  • 有一个新的Target Platform State(目标平台状态)视图
  • 你现在可以创建并共享一个由软件站点的软件组成的目标定义
  • 新的Category Definition编辑器可以在输出时用于给特性归类
  • 你现在可以查看API相对于API基线的变化
  • 通过在菜单introspection mode里调用plug-in Spy来查看关于菜单的信息
  • 增强OSGi Declarative Services (DS),以支持最新版的DS规范
  • 你现在可以从OSGi启动配置中初始化产品定义
  • 有一个新的目标平台偏好页面
  • PPlug-in export现在支持创建source bundles
  • Declarative Services现在支持最新版的OSGi declarative services规范(1.1)更新
  • PDE中的JAR signing支持扩展包含了对keypass的支持
  • 增强目标编辑器,以支持目标定义中的新特性
  • API工具现在可以分析系统类库的使用情况及代码访问运行时不存在的成员时所产生的问题
  • 你现可以在非UI线程中启动Junit Plug-in测试
  • Eclipse应用程序启动配置现在支持启动级别(start level)及自动启动设置
  • Plug-in Registry视图现在支持浏览OSGi服务
  • 给PDE/Build增加了一个新的扩展,可以使用户从p2库中获取制品
  • API工具现在支持在接口上的两个约束:@noimplement 和 @noextend。这就使得在不想直接实现一个接口的时候可以扩展它
  • 即使你已经增大了plug-in的主版本号,仍会被提示破坏API的改变
  • PDE增强了bundle及特性(feature)输出,以把输出的bundles/feature安装到当前正在运行的工作台
  • 输出特性、plug-in及产品时可以选择binary cycles
  • PDE增加了declarative services工具,以帮助作者提供组件定义

Java开发工具

  • NLS string hover现在有一个Open in Properties File动作
  • 在Caller模式下,调用层级(Call Hierarchy)现在有一个在上下文菜单中有一个Expand With Constructors动作
  • 当你在编辑器中输入的时候,Java比较编辑器会更新其结构
  • 有一个新的toString()产生器
  • 为可覆盖方法增加了一个Open Implementation链接,可以直接打开其实现
  • 编辑器与执行环境一致
  • Debug视图现在提供了breadcrumb(面包屑),显示了当前活动的debug上下文
  • 可运行的JAR文件输出向导还可以把所需的类库打包进一个要输出的可运行JAR文件,或打包进与紧挨着该JAR的一个目录中
  • 当在写一个分配表达式(allocation expression)时发生补全操作,内容助手现在可以提示一个类的可用构造方法
  • 如果检测到无用代码,编译器现在可以发出警告
  • 类库、变量或容器入口的路径现在可以是与项目相关的任何位置
  • 在Jovadoc hover的头部及Javadoc视图中,现在都提供了引用其他类型和成员的链接
  • 随该Eclipse发行的JUnit4版本更新为4.5
  • Javadoc视图及hovers现在都支持{@inheritDoc}标签并给覆盖方法增加链接
  • 同一值的比较现在由编译器检测,默认情况下会发出警告

其他方面还在SWT、Equinox、JDT、PDE等方法有改进,详细的更新信息请看这里

新版本下载地址:http://download.eclipse.org/eclipse/downloads/drops/S-3.5M2-200809180100/index.php

下载地址:
http://www.eclipse.org/downloads/packages/release/galileo/

  

  对应的Eclipse SDK 3.5正式版下载地址:

 http://download.eclipse.org/eclipse/downloads/index.php

  对应的语言包(Eclipse Babel Project)下载:

http://www.eclipse.org/babel/downloads.php

  或直接http://download.eclipse.org/technology/babel/babel_language_packs/galileo.php

  

Popularity: 75% [?]

安装Windows Server 2003 SP2可能会影响SQL Server性能

2008年10月7日 admin 1 条评论

安装Windows Server 2003 SP2可能会影响SQL Server性能,大家快打补丁吧 (*^__^*)

Scalable Networking Pack (常见问题 详细描述)在Server 2003安装SP2后会默认被打开,打开此功能可以把对网络数据包的处理从CPU分担一部分到网卡上,但这可能会引起SQL Server性能问题,详情可以看下面的KB:

http://support.microsoft.com/kb/942861

http://support.microsoft.com/kb/918483

另外发现SNP会使SQL Server对事务的吞吐量变小以及使不同查询语句之间的执行间隔变长,比如,有一个事务包含多个查询语句,并且每个语句的执行时间很短,那么他们执行的时间总和应该也会比较短,比如下面的Profiler追踪(注意语句的执行间隔):

image

当SNP开启后,你可以看到下面的Profiler数据,注意其中不同语句的执行间隔,基本都在500ms左右:

image

这种执行间隔明显会影响到并发性,下表显示了SNP启用和禁用后相同工作负荷的执行时间:

Implicit Transaction Summary SNP Enabled

spid TransactionID TranStart TranEnd TranDuration sum_batch_duration batch_count delta
——- ————– ————- ———— ————- ——————– ————– ——–
57 916972 09:40:24.450 09:41:17.623 53173 601 516 52572
57 896243 09:39:31.620 09:40:01.840 30220 322 301 29898
57 877227 09:39:12.120 09:39:15.293 3173 306 161 2867
57 876313 09:38:58.590 09:38:58.603 13 0 1 13
57 895388 09:39:18.510 09:39:18.527 16 16 4 0
57 915675 09:40:02.653 09:40:02.670 16 16 4 0

Implicit Transaction Summary SNP Disabled

spid TransactionID TranStart TranEnd TranDuration sum_batch_duration batch_count delta
——- ————– ———— ———— ————- ——————– ————– ——–
54 127910 11:13:47.287 11:13:52.490 5203 4060 516 1143
54 107344 11:13:23.380 11:13:24.427 1046 382 301 664
51 87187 11:12:50.067 11:12:50.550 483 0 1 483
54 88182 11:13:03.987 11:13:07.237 3250 2878 161 372
51 106432 11:13:10.487 11:13:10.487 0 0 1 0
54 126550 11:13:25.490 11:13:26.007 516 516 4 0

Server 2008 的SNP默认是关闭的,已经装上SP2的Server 2003用户可以通过下面的补丁关闭SNP:http://support.microsoft.com/default.aspx?scid=kb;EN-US;948496 或者使用下面的方法手工关闭:

1. Locate the following registry subkey:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

2. Double-click the EnableTCPChimney registry entry.

3. In the Edit DWORD Value dialog box, type 0 in the Value data box, and then click OK.

4. Double-click the EnableRSS registry entry.

5. In the Edit DWORD Value dialog box, type 0 in the Value data box, and then click OK.

6. Double-click the EnableTCPA registry entry.

7. In the Edit DWORD Value dialog box, type 0 in the Value data box, and then click OK.

8. Restart the server.

Popularity: 25% [?]

PLSQL破解文件

2008年10月6日 admin 1 条评论

今天打开PLSQL发现要输入注册码,晕了,到网上找了半天 都没找到。

最好找到了一个破解文件,只要把这个文件放在PLSQL的安装目录 就可以了,再也没有提示输入注册码了,哈哈。

破解文件下载

Popularity: 23% [?]