Ajax的原理及例子

构建一个Ajax应用的步骤: 

1、创建XMLHTTPRequest对象。 

2、向Ajax引擎发送请求。 

3、Ajax向服务器发送请求,服务器返回Ajax引擎。 

4、Ajax向客户端返回信息。 

Ajax的原理即是在客户端与服务器端加入了Ajax中间层,从而通过XMLHTTPRequest对象来与服务器交互,客户端与服务端即可以实现异步了。 

下面是一个简单的判断用户代码是否重复的Ajax例子: 

1、给input添加触发事件onblur()。添加一个span用来显示ajax返回的信息(responseText) 

<input name="userId" type="text" id="userId"
        size="10" maxlength="10" onkeypress="userIdonKeyPress()" value="<%=userId %>" onblur="validate(this)">
       <span id="spanUserId"><span>

2、js代码 

 

 function validate(field){
  if(trim(field.value).length!=0){
   //创建Ajax核心对象XMLHTTPRequest 
   var xmlHttp;
   //表示当前浏览器不是ie,如ns,firefox
   if(window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
   } else if (window.ActiveXObject) {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
   } 

   //考虑到浏览器缓冲问题,加上时间戳。
   var url="user_validate.jsp?userId="+trim(field.value)+"&time="+new Date().getTime();
   //设置请求方式为GET,设置请求的URL,设置为异步请求
   xmlHttp.open("get",url,true);
   
   //将方法地址复制给onreadystatechange属性
   xmlHttp.onreadystatechange=function(){
    //alert(xmlHttp.readyState);
    //Ajax引擎状态成功
    if(xmlHttp.readyState==4){
     //Http协议状态成功
     if(xmlHttp.status==200){
      //alert(xmlHttp.responseText);
      if(xmlHttp.responseText!=""){
       document.getElementById("spanUserId").innerHTML="<font color='red'>"+xmlHttp.responseText+"</font>";
      }else{
       document.getElementById("spanUserId").innerHTML="";
      }
     }else{
      alert("请求失败,错误码="+xmlHttp.status);
     }
    }
   };
   
   //请设置信息发送到Ajax引擎
   xmlHttp.send(null);
  }
  else{
   document.getElementById("spanUserId").innerHTML="";
  }
 } 

3、服务端代码,user_validate.jsp 

<%
 //延长停滞时间,测试异步效果:Thread.currentThread().sleep(5000);
 String userId=request.getParameter("userId");
 if(UserManager.getInstance().findUserById(userId)!=null){
  out.println("用户代码已经存在");
 }
%>

Ajax的原理就是这样,像其他的一些js框架,如Jquery,Extjs,dwr,底层的代码也就是这些。所以,了解原理很重要。

采用单例模式解析xml文件

在解析xml文件要来填充配置信息的时候,xml文件通常只需要读取一次,不然在性能上面会有一些损失。这种情况下,会想到用单例模式(singleton),对象只实例化一次。下面是代码,其中对xml解析用到了第三方组件dom4j和xpath方法。 


private static XmlConfigReader instance=null;
 
 private JdbcConfig jdbcConfig=new JdbcConfig();
 
 private XmlConfigReader(){
  SAXReader reader=new SAXReader();
  InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
  try {
   Document doc=reader.read(is);
   Element driverNameElt=(Element)doc.selectObject("/config/db-info/driver-name");
   Element urlElt=(Element)doc.selectObject("/config/db-info/url");
   Element usernameElt=(Element)doc.selectObject("/config/db-info/user-name");
   Element passwordElt=(Element)doc.selectObject("/config/db-info/password");
   
   jdbcConfig.setDriverName(driverNameElt.getStringValue());
   jdbcConfig.setUrl(urlElt.getStringValue());
   jdbcConfig.setUsername(usernameElt.getStringValue());
   jdbcConfig.setPassword(passwordElt.getStringValue());
  
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public static synchronized XmlConfigReader getInstance(){
  if(instance==null){
   instance=new XmlConfigReader();
  }
  return instance;
 }
 
 //返回jdbc的相关配置
 public JdbcConfig getJdbcConfig(){
  return jdbcConfig;
 }

建立单独模式的步骤:
1、私有的静态的成员变量;
2、私有的构造方法,不允许new实例化;
3、公共静态入口方法,在这个方法头里,要加“synchronized”,它是一个锁,避免有多个线程同时实例化。 

注意到上面的代码中用到了利用线程来加载资源文件的做法,文件必须放到class文件夹中。 

 

InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); 

追求卓越,成功就离你不远。

这几天一直很累。

每天朝九晚五的工作,一直坐在电脑旁,感觉颈椎隐隐作痛。一北京朋友上一周由于轻度腰椎盘突出而送进了医院。他也是跟我一样从事软件开发工作的,受到这个暗示,我也始终感觉颈椎和腰椎有些不自然的样子。

我想更多的可能是由于心累。年轻气盛,来到广州,总以为几天半个月自己就能创造什么奇迹;总以为只要是工作了,技术就一定会有提高,而且会很快。现实是,每天只是枯燥地自我学习,没有人带你,你没有项目可做,做的只有Demo,好像永远都是学习,Demo,学习,Demo。

一直想让自己进步,非常想。乃至于忘记了学习的目的,在于享受学习;工作的目的,在于享受这份工作。如果努力的方向和动力不是由于真正喜欢,可想而知这个过程会有多么辛苦。

过来广州之后,我先后接触了Java,Extjs,Jquery,Dwr,SqlServer,数据仓库,财务,软件实施……但是没有一样是学而有成的。以前我分析是由于缺乏恒心,现在我知道是由于太注重学习的结果,而忽视了学习的目的,不会由于学习了技术而兴奋了。

我总是怪公司没有项目让我们锻炼,没有前辈指导我们。现在想来,更多的是自我麻木。如果真的喜欢技术,研究技术,那么有很多东西可以看,有很多人可以去问。由于先进得好像已经看到了自己的终点,认为只有结果才是最重要的,才忘记了去享受这个过程。

昨晚很累,宝贝说昨天是鬼节,应该早回家。听她的话,没有在公司太久逗留。这段时间总是重视自己的工作,心情,而忽视了很多她的感受。她很辛苦,压力也大,我却总是她整天无事可做。我想我也逐渐忘了怎样去享受恋爱的过程,看到的是爱情的结果。

一部印度电影,似乎让我如梦初醒。做自己喜欢并擅长的事情;不唯唯诺诺;享受过程;最求卓越;凡事乐观;重视情谊……这部电影告诉了我很多以前都忽视的东西。片名叫做《三傻大闹宝莱坞》,影片中的情节跟片名没有丝毫关系,我想更应该叫做《一切顺利》。影片不断告诉我们,做自己喜欢做的事情,追求卓越,碰到困难,用手拍着自己的胸脯说“一切顺利”!

命令行开启关闭SqlServer服务

继上一篇《命令行开启关闭Oracle服务》之后呢,举一反三,如果你的机子上安装了sqlserver的一大推服务的话。建立bat文件可能会更加方便一些。

Sql_start.bat
NET start MSSQLFDLauncher
net start MSSQLSERVER
net start MSSQLServerOLAPService
net start ReportServer
net start SQLWriter

Sql_STOP.bat
NET STOP MSSQLFDLauncher
net stop MSSQLSERVER
net stop MSSQLServerOLAPService
net stop ReportServer
net stop SQLWriter

命令行开启关闭Oracle服务

在本机安装Oracle,即使平常不用,但是其服务消耗的内存很大,搞得机子速度很慢。

平常如果放着不用,内存消耗都是最大的。

其实只要关闭一下服务即可。

设置服务启动方式为“手动”,用bat保存命令行,可以实现一键式开启和关闭。
Oracle-Start.bat

net start OracleServiceORCL
net start OracleOraDb10g_home1TNSListener
net start OracleOraDb10g_home1iSQL*Plus
net start OracleDBConsoleorcl

Oracle-Stop.bat

net stop  OracleServiceORCL
net stop  OracleOraDb10g_home1TNSListener
net stop  OracleOraDb10g_home1iSQL*Plus
net stop  OracleDBConsoleorcl

Oracle sqlplus常用命令

1、创建用户:create user xxx identified by password

2、查询用户状态:desc dba_users

3、查询出所有的用户名字和缺省表空间:
select username,default_tablespace from dba_users

4、创建表空间:
create tablespace xxx datafile ‘D:\xxx\xxx\xxx.dbf’ size 100m

5、修改用户的缺省表空间:
alter user user-xxx default tablespace ts-xxx.

6、给用户授权:
grant create session,create table,create view,create sequence,unlimited tablespace to user-xxx

7、切换用户:conn user-xxx/password

8、导入sql脚本:@’D:\xxx\xxx\xxx.sql’

数据库设计基础知识:3NF

今天看书看到数据库设计的3NF这一基础知识,发现自己把这3范式给忘了。顺便看了看,就记下来吧。

1:有主键,具有原子型,列不可再分。

2:完全依赖,没有部分依赖。
第二范式决定数据库中不允许出现组合关键字字段决定非关键字字段。一般主键是组合主键,就要考虑是否符合第二范式。
假定选课关系为selectCourse(学号,姓名,年龄,课程名称,成绩,学分),主键为组合主键(学号,课程名称)。但是学号->(姓名,年龄),课程名称->学分,这里存在部分依赖。符合第二范式的设计是:
Student(学号,姓名,年龄)
Course(课程名称,学分)
SelectCourse(学号,课程名称,成绩)
即做成一个三张表的多对多关系。

3:没有传递依赖。
满足第三范式的数据库表应该不存在如下依赖关系:主键字段->非关键字段x->非关键字段y。传递依赖一个显著的问题是会造成数据冗余。

The Father of Data Warehousing:Bill Inmon

Infomation from the www.inmoncif.com.

数据仓库之父:Bill Inmon

President and Chief Technology Officer, Forest Rim™ Technology LLC
Best known as “The Father of Data Warehousing.”
Monthly Columnist, Business Intelligence Network and EIM Institute, World Renowned Speaker, Author and Instructor.
如此多的头衔。

Best known as the “Father of Data Warehousing”, Bill Inmon has become the most prolific and well-known author worldwide in the data warehousing and business intelligence arena. In addition to authoring more than 50 books and 650 articles, Bill has been a monthly columnist with the Business Intelligence Network, EIM Institute and Data Management Review. In 2007, Bill was named by Computerworld as one of the “Ten IT People Who Mattered in the Last 40 Years” of the computer profession.

Having 35 years of experience in database technology and data warehouse design, he is known globally for his seminars on developing data warehouses and information architectures. Bill has been a keynote speaker in demand for numerous computing associations, industry conferences and trade shows.

35年的数据库技术和数据仓库设计经验,数据仓库的定义者:数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。 Read more…

SWOT,公司战略规划和个人职业生涯都能用到的工具。

  在现在的战略规划报告里,SWOT分析应该算是一个众所周知的工具。来自于麦肯锡咨询公司的SWOT分析,包括分析企业的优势(Strength)、劣势(Weakness)、机会(Opportunity)和威胁(Threats)。因此,SWOT分析实际上是将对企业内外部条件各方面内容进行综合和概括,进而分析组织的优劣势、面临的机会和威胁的一种方法。

      优劣势分析主要是着眼于企业自身的实力及其与竞争对手的比较,而机会和威胁分析将注意力放在外部环境的变化及对企业的可能影响上 。在分析时,应把所有的内部因素(即优劣势)集中在一起,然后用外部的力量来对这些因素进行评估。

      在适应性分析过程中,企业高层管理人员应在确定内外部各种变量的基础上,采用杠杆效应、抑制性、脆弱性和问题性四个基本概念进行这一模式的分析。
  1.杠杆效应(优势+机会)。杠杆效应产生于内部优势与外部机会相互一致和适应时。在这种情形下,企业可以用自身内部优势撬起外部机会,使机会与优势充分结合发挥出来。然而,机会往往是稍瞬即逝的,因此企业必须敏锐地捕捉机会,把握时机,以寻求更大的发展。
  2.抑制性(机会+劣势)。抑制性意味着妨碍、阻止、影响与控制。当环境提供的机会与企业内部资源优势不相适合,或者不能相互重叠时,企业的优势再大也将得不到发挥。在这种情形下,企业就需要提供和追加某种资源,以促进内部资源劣势向优势方面转化,从而迎合或适应外部机会。
  3.脆弱性(优势+威胁)。脆弱性意味着优势的程度或强度的降低、减少。当环境状况对公司优势构成威胁时,优势得不到充分发挥,出现优势不优的脆弱局面。在这种情形下,企业必须克服威胁,以发挥优势。
  4.问题性(劣势+威胁)。当企业内部劣势与企业外部威胁相遇时,企业就面临着严峻挑战,如果处理不当,可能直接威胁到企业的生死存亡。

某公司员工满意度SWOT分析

  优势S
认同并遵守公司制度
热爱学习,力求上进
员工心地无私
劣势W
薪酬待遇在行业中偏低
加班较多,导致员工疲惫
企业文化建设薄弱
机会O
组织结构正在调整
股份制改造和上市机会
SO战略
成立人力资源部,强化人力资源管理
后备干部的选拔、培养
WO战略
聘请管理顾问,大力推进企业文化建设
建立科学合理的绩效考核与薪酬制度
威胁T
技术人才和熟练工流失
人员素质低
ST战略
成立培训部,通过持续的培训提升员
工素质;引入高素质人才
WT战略
高薪挽留部分人才

该公司决定确立三个改进弱项,由新成立的人力资源部和培训部开展弱项改进:
 第一,改变公司目前使用的工资制度,建立科学合理的绩效考核与薪酬制度;
 第二,建立内部培训制度,进行全员素质教育;
 第三,大力推进企业文化建设.

个人职业生涯规划SWOT分析

  优势S
爱好技术,关注互联网
工作有干劲,学习能力较强
在学校担任学生干部,有管理和会议主持经验
劣势W
做事缺少恒心,常常一曝十寒
环境因素使自己缺少一个符合实际的个人发展计划
英语水品低,英文沟通成问题
机会O
成为技术管理人员
集团公司技术和学习氛围很好
SO战略
对公司要用的技术深入扩展,熟悉这方面的技术和业务
不局限于本公司,多跟集团公司人员交流
WO战略
坚持一门技术的学习,坚持写博,改正一曝十寒的坏毛病
坚持学习英语,在工作中不养成坏习惯
积极参与集团公司的活动
威胁T
时间和机会成本较大
很难有更高的发展,比如出国
ST战略
制定学习计划,持续学习
WT战略
英语是以后跳跃发展的重中之重

改进决策:
 第一,学习Java,用好Java,深入理解Java的开发原理,掌握其相关的技术和原理;
 第二,不要局限于公司之内,积极参与集团活动,利用集团公司的资源多进行自我学习(经济与管理);
 第三,制定学习计划,坚持写博,坚持学习英语.

自定义FusionMap地图

FusionMaps官方提供了世界各地的地图,关于中国地图却只有几幅:中国(含台湾)、中国(不含台湾)、香港、澳门、台湾、西藏。如要要添加一幅地图,则要支付FusionMaps至少499美元的费用。而如果要获取FusionMaps所有源文件(.as和.fla),则要购买价值1999美元的企业版本。通过FusionMaps免费提供的Flash Demo(.fla),结合开发版本才提供的.as源文件,根据地图原型,制作了自定义地图。下图为自定义FusionMap湖南省地图。

custom-fusionmap-hunan

制作过程:

1、下载地图原型。
2、导入地图原型,绘制区域实体。
3、修改WorldMap.as文件,添加区域实体。
4、制作XML文档,在Flash中指定文档并编译生成。
注:过程较为复杂,具体看视频演示

联系admin@zuiai.org获取视频演示。