因为专注,所以专业

我的Java Blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 30 文章 :: 6 评论 :: 0 Trackbacks

2008年6月11日 #

在缺省配置的情况下,tomcat使用了三个端口:

shutdown端口: <Server port="8005" shutdown="SHUTDOWN">
http端口:<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
AJP端口:<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 这样,不仅两个tomcat里的应用不会互相影响,而且两个tomcat程序也可以分别升级。
posted @ 2011-04-02 17:54 kevin.zhan 阅读(247) | 评论 (0)编辑 收藏

1.恢复出厂默认, *#7780#.默认密码:12345或00000

上网设置:步骤如下:设置—→配置设置—→个人配置设置—→操作—→新增—→网络   接下来对网络进行配置:   帐号名称:默认(我的网),可换成自己喜欢的名字   主页:http://wap.monternet.com   用户名:(空) 密码:(空) 使用首选接入点:取消   接入点设置: 代理:启动 代理地址: 10.0.0.172   代理端口: 80   传输方式:分组数据 传输方式设置:   分组数据接入点: cmwap   网络类型: Ipv4   鉴权类型:普通   用户名:(空)   密码:(空) 这样, GPRS 就设置好了 接下来设置彩信 首先要新增 步骤如下:设置—→配置设置—→个人配置设置—→操作—→新增—→彩信   接下来对彩信进行配置: 帐号名称:默认(彩信),可换成自己喜欢的名字 服务器地:http://mmsc.monternet.com  (注意:从http的h开始,要不然设置就白费了) 使用首选接入点:取消   接入点设置: 代理:启动 代理地址: 10.0.0.172   代理端口: 80   传输方式:分组数据 传输方式设置: 分组数据接入点: cmwap   网络类型: Ipv4 鉴权类型:普通 用户名:(空) 密码:(空) OK ,彩信也设置好了   然后回到:设置—→配置设置—→预设配置设置,选择:个人配置   设置—→配置设置—→为全部应用软件启动预设(有提示出现,选择:确认)   经过以上的工作,收、发彩信及通过手机自带的浏览器上网都没有问题了,但是,不少机友发现,想通过 ucweb 或者 QQ上网却不行。接下来,我们再对像 ucweb 或者 QQ 之类的 JAVA 程序配置一个接入点,把最后的障碍清除掉: 新增接入点: 步骤如下: 设置—→配置设置—→个人配置设置—→操作—→新增—→接入点 对接入点进行设置: 帐号名称:默认(我的接入点) 接入点设置: 传输方式:分组数据   传输方式设置: 分组数据接入点: cmwap (默认是 internet ,一定要改过来哦 ` !)   网络类型: Ipv4 鉴权类型:普通 用户名:(空) 密码:(空) OK ,接入点也设置好了 然后回到:设置—→配置设置—→首选接入点,这个时候就可以看到你刚刚设置好的接入点点了,选择它,搞定了! 最后 进入设置---数据连通---分组数据 分组数据连接---当需要时 分组数据设置---已选接入---移动CMNET(如果不是这个就进入修改接入点) 修改接入点---接入点别名---移动CMNET 分组数据接入点---CMNET

posted @ 2011-03-25 08:50 kevin.zhan| 编辑 收藏

JS代码,片段一:
{
        // 片段1
    fieldLabel : '机构名称',
    name : 'org.name',
    hiddenName: 'org.name',
    width : 
250,
    allowBlank : 
false,
    blankText : '机构名称不能为空',
    maxLength : 
20,
    maxLengthText : '最大长度不能超过20个字符
!',
    validator : UserCfg.checkOrgName,
    invalidText: '已经存在的名称'
}
// 片段二
var IsExsit=false;//此变量一定要在方法外面定义
UserCfg.checkOrgName = function(){
 
var orgName = Ext.get('org.name').dom.value;
 Ext.Ajax.request(
{
    url : ORG_OPERATE_URL 
+ "?action=checkOrgName",
    params : 
{
     random : Math.random(),
     orgName : orgName
    }
,
    callback : 
function(opt, success, response) {
     
var obj = Ext.util.JSON.decode(response.responseText);
     
if (obj.success) {
      ReturnValue(
true);
     }
 else {
      ReturnValue(
false);
     }

    }

   }
);
 
function ReturnValue(ok) {// 此方法必须放CheckUserName里面。
  IsExsit = ok;
 }

 
return IsExsit;
}


在后台代码实现方法省略,不过返回一定要JSON格式,且有 success属性,如果用户存在,返回true, 否则返回false
posted @ 2010-08-12 11:57 kevin.zhan 阅读(464) | 评论 (0)编辑 收藏

     摘要: (转载自 http://callan.javaeye.com/blog/158392 ) JAAS是对JCE安全框架的重要补充,通过提供认证用户和确定用户授权来增强JAVA解决方案的动态安全性,使得资源能够得到很好得到保护和控制(JAAS使用动态的安全策略来定义权限,而不是将其静态的嵌入到代码中)。 JAAS采用的是插件的运行方式,一开始就被设计成可插拔的(Pluggable),根据应用...  阅读全文
posted @ 2010-06-22 09:10 kevin.zhan 阅读(290) | 评论 (0)编辑 收藏

移动心机,就是垃圾,一按到功能键就上网,这样每个月都不知道要扣多少GPRS流量费。
好了,不多说,上解决方法:
1、菜单----设置----Internet配置文件----选择----新增-----
2、标题“关闭上网”(随便一个名称都行)----使用代理“关”----接入点“DM APN”----完成
3、移动梦网----设置----模式----选择“新增”
4、标题“关闭上网”----主页“输入一个无效网址”----互联网配置文件(选择)“步骤2中的‘关闭上网’”----完成----激活。
5、设置完成后,在“桌面”状态下按到“梦网上网键”,则会出现“未发现请求的主机”的提示,按“确定”即刻返回“桌面”。
posted @ 2010-06-11 22:33 kevin.zhan 阅读(301) | 评论 (0)编辑 收藏

1. Session和事务范围(transaction scope)
   SessionFactory
对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建。

Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的 工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象 才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。

此外我们还要考虑数据库事务。数据库事务应该尽可能的短,降低数据库中的锁争用。 数据库长事务会阻止你的应用程序扩展到高的并发负载。因此,假若在用户思考期间让数据库事务开着,直到整个工作单元完成才关闭这个事务,这绝不是一个好的设计。

一个操作单元(Unit of work)的范围是多大?单个的Hibernate Session能跨越多个 数据库事务吗?还是一个Session的作用范围对应一个数据库事务的范围?应该何时打开 Session,何时关闭Session?,你又如何划分数据库事务的边界呢?
1.1 操作单元(Unit of work)

         首先,别用session-per-operation这种反模式了,也就是说,在单个线程中, 不要因为一次简单的数据库调用,就打开和关闭一次Session!数据库事务也是如此。 应用程序中的数据库调用是按照计划好的次序,分组为原子的操作单元。(注意,这也意味着,应用程 序中,在单个的SQL语句发送之后,自动事务提交(auto-commit)模式失效了。这种模式专门为SQL控制台操作设计的。 Hibernate禁止立即自动事务提交模式,或者期望应用服务器禁止立即自动事务提交模式。)数据库事务绝不是可有可无的,任何与数据库之间的通讯都必须在某个事务中进行,不管你是在读还是在写数据。对读数据而言,应该避免auto-commit行为,因为很多小的事务比一个清晰定义的工作单元性能差。后者也更容易维护和扩展。

在多用户的client/server应用程序中,最常用的模式是 每个请求一个会话(session-per-request)。 在这种模式下,来自客户端的请求被发送到服务器端(即Hibernate持久化层运行的地方),一 个新的Hibernate Session被打开,并且执行这个操作单元中所有的数据库操作。 一旦操作完成(同时对客户端的响应也准备就绪),session被同步,然后关闭。你也可以使用单 个数据库事务来处理客户端请求,在你打开Session之后启动事务,在你关闭 Session之前提交事务。会话和请求之间的关系是一对一的关系,这种模式对 于大多数应用程序来说是很棒的。

实现才是真正的挑战。Hibernate内置了对"当前session(current session)" 的管理,用于简化此模式。你要做的一切就是在服务器端要处理请求的时候,开启事务,在响应发送给客户之前结束事务。你可以用任何方式来完成这一操作,通常的方案有ServletFilter,在service方法中进行pointcut的AOP拦截器,或者proxy/interception容器。EJB容器是实现横切诸如EJB session bean上的事务分界,用CMT对事务进行声明等方面的标准手段。假若你决定使用编程式的事务分界,请参考本章后面讲到的Hibernate Transaction API,这对易用性和代码可移植性都有好处。

在任何时间,任何地方,你的应用代码可以通过简单的调用sessionFactory.getCurrentSession()来访问"当前session",用于处理请求。你总是会得到当前数据库事务范围内的Session。在使用本地资源或JTA环境时,必须配置它,请参见第 2.5 节 “上下文相关的(Contextual)Session”

有时,将Session和数据库事务的边界延伸到"展示层被渲染后"会带来便利。有些serlvet应用程序在对请求进行处理后,有个单独的渲染期,这种延伸对这种程序特别有用。假若你实现你自己的拦截器,把事务边界延伸到展示层渲染结束后非常容易。然而,假若你依赖有容器管理事务的EJB,这就不太容易了,因为事务会在EJB方法返回后结束,而那是在任何展示层渲染开始之前。请访问Hibernate网站和论坛,你可以找到Open Session in View这一模式的提示和示例。
1.1 长对话

         

session-per-request模式不仅仅是一个可以用来设计操作单元的有用概念。很多业务处理都需 要一系列完整的与用户之间的交互,而这些用户是指对数据库有交叉访问的用户。在基于web的应用和企业 应用中,跨用户交互的数据库事务是无法接受的。考虑下面的例子:

  • 在界面的第一屏,打开对话框,用户所看到的数据是被一个特定的 Session 和数据 库事务载入(load)的。用户可以随意修改对话框中的数据对象。

  • 5分钟后,用户点击“保存”,期望所做出的修改被持久化;同时他也期望自己是唯一修改这个信息的人,不会出现 修改冲突。

从用户的角度来看,我们把这个操作单元称为长时间运行的对话(conversation),或者(or 应用事务,application transaction)。 在你的应用程序中,可以有很多种方法来实现它。

头一个幼稚的做法是,在用户思考的过程中,保持Session和数据库事务是打开的, 保持数据库锁定,以阻止并发修改,从而保证数据库事务隔离级别和原子操作。这种方式当然是一个反模式, 因为锁争用会导致应用程序无法扩展并发用户的数目。

很明显,我们必须使用多个数据库事务来实现这个对话。在这个例子中,维护业务处理的 事务隔离变成了应用程序层的部分责任。一个对话通常跨越多个数据库事务。如果仅仅只有一 个数据库事务(最后的那个事务)保存更新过的数据,而所有其他事务只是单纯的读取数据(例如在一 个跨越多个请求/响应周期的向导风格的对话框中),那么应用程序事务将保证其原子性。这种方式比听 起来还要容易实现,特别是当你使用了Hibernate的下述特性的时候:

  • 自动版本化 - Hibernate能够自动进行乐观并发控制 ,如果在用户思考 的过程中发生并发修改,Hibernate能够自动检测到。一般我们只在对话结束时才检查。

  • 脱管对象(Detached Objects)- 如果你决定采用前面已经讨论过的 session-per-request模式,所有载入的实例在用户思考的过程 中都处于与Session脱离的状态。Hibernate允许你把与Session脱离的对象重新关联到Session 上,并且对修改进行持久化,这种模式被称为 session-per-request-with-detached-objects。自动版本化被用来隔离并发修改。

  • Extended (or Long) Session - Hibernate 的Session 可以在数据库事务提交之后和底层的JDBC连接断开,当一个新的客户端请求到来的时候,它又重新连接上底层的 JDBC连接。这种模式被称之为session-per-conversation,这种情况可 能会造成不必要的Session和JDBC连接的重新关联。自动版本化被用来隔离并发修改, Session通常不允许自动flush,而是明确flush。

session-per-request-with-detached-objectssession-per-conversation 各有优缺点,我们在本章后面乐观并发 控制那部分再进行讨论。


posted @ 2010-05-20 00:04 kevin.zhan 阅读(193) | 评论 (0)编辑 收藏

在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean
Spring IoC:IoC容器负责容纳此前所描述的bean,并对bean进行管理。
    职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
posted @ 2010-05-19 23:58 kevin.zhan 阅读(168) | 评论 (0)编辑 收藏


===================常用========================
Ctrl+J : 列出成员 智能感知
Ctrl+F: 查找
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Ctrl+Shift+L: 删除当前行
Ctrl+E,D     ----格式化全部代码   
Ctrl+E,F     ----格式化选中的代码  
Ctrl+W,P: 属性窗口

Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容


===================全部========================
Ctrl+m+Crtr+o折叠所有大纲
Ctrl+M+Crtr+P: 停止大纲显示
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容
Ctrl+J : 列出成员 智能感知
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态

Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
代码快捷键

Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息
Ctrl+K,I: 快速信息
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容
Ctrl+K,M: 生成方法存根
Ctrl+K,X: 插入代码段
Ctrl+K,S: 插入外侧代码
F12: 转到所调用过程或变量的定义
窗口快捷键
Ctrl+W,W: 浏览器窗口
Ctrl+W,S: 解决方案管理器
Ctrl+W,C: 类视图
Ctrl+W,E: 错误列表
Ctrl+W,O: 输出视图
trl+W,P: 属性窗口
Ctrl+W,T: 任务列表
Ctrl+W,X: 工具箱
Ctrl+W,B: 书签窗口
Ctrl+W,U: 文档大纲
Ctrl+D,B: 断点窗口
Ctrl+D,I: 即时窗口
Ctrl+Tab: 活动窗体切换
Ctrl+Shift+N: 新建项目
Ctrl+Shift+O: 打开项目
Ctrl+Shift+S: 全部保存
Shift+Alt+C: 新建类
Ctrl+Shift+A: 新建项
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
Ctrl+M,P: 停止大纲显示
Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写

posted @ 2010-01-12 15:53 kevin.zhan 阅读(204) | 评论 (0)编辑 收藏

appwiz.cpl------------添加删除程序    
control userpasswords2--------用户帐户设置    
cleanmgr-------垃圾整理    
CMD--------------命令提示符可以当作是 Windows 的一个附件,Ping,Convert 这些不能在图形环境下 使用的功能要借助它来完成。    
cmd------jview察看Java虚拟机版本。
command.com------调用的则是系统内置的 NTVDM,一个 DOS虚拟机。它完全是一个类似 Virtual PC 的 虚拟环境,和系统本身联系不大。当我们在命令提示符下运行 DOS 程序时,实际上也 是自动转移到 NTVDM虚拟机下,和 CMD 本身没什么关系。
calc-----------启动计算器    
chkdsk.exe-----Chkdsk磁盘检查    
compmgmt.msc---计算机管理    
conf-----------启动 netmeeting    
control userpasswords2-----User Account 权限设置    
devmgmt.msc--- 设备管理器    
diskmgmt.msc---磁盘管理实用程序    
dfrg.msc-------磁盘碎片整理程序    
drwtsn32------ 系统医生    
dvdplay--------启动Media Player    
dxdiag-----------DirectX Diagnostic Tool    
gpedit.msc-------组策略编辑器    
gpupdate /target:computer /force 强制刷新组策略    
eventvwr.exe-----事件查看器    
explorer-------打开资源管理器    
logoff---------注销命令    
lusrmgr.msc----本机用户和组    
msinfo32---------系统信息    
msconfig---------系统配置实用程序    
net start (servicename)----启动该服务   
net stop (servicename)-----停止该服务    
notepad--------打开记事本    
nusrmgr.cpl-------同control userpasswords,打开用户帐户控制面板    
Nslookup-------IP地址侦测器    
oobe/msoobe /a----检查XP是否激活    
perfmon.msc----计算机性能监测程序    
progman--------程序管理器    
regedit----------注册表编辑器    
regedt32-------注册表编辑器    
regsvr32 /u *.dll----停止dll文件运行    
route print------查看路由表     
rononce -p ----15秒关机    
rsop.msc-------组策略结果集    
rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen----启动一个空白的Windows 图片和传真查看器    
secpol.msc--------本地安全策略    
services.msc---本地服务设置    
sfc /scannow-----启动系统文件检查器    
sndrec32-------录音机    
taskmgr-----任务管理器(适用于2000/xp/2003)    
tsshutdn-------60秒倒计时关机命令    
winchat--------XP自带局域网聊天
winmsd---------系统信息    
winver-----显示About Windows 窗口    
wupdmgr-----------Windows Update    
winver---------检查Windows版本    
wmimgmt.msc----打开windows管理体系结构(WMI)     
wupdmgr--------windows更新程序     
wscript--------windows脚本宿主设置     
write----------写字板     
winmsd---------系统信息     
wiaacmgr-------扫描仪和照相机向导     
winchat--------XP自带局域网聊天     
mem.exe--------显示内存使用情况     
Msconfig.exe---系统配置实用程序     
mplayer2-------简易widnows media player     
mspaint--------画图板     
mstsc----------远程桌面连接     
mplayer2-------媒体播放机     
magnify--------放大镜实用程序    
mmc------------打开控制台     
mobsync--------同步命令     
dxdiag---------检查DirectX信息    
drwtsn32------ 系统医生     
devmgmt.msc--- 设备管理器     
dfrg.msc-------磁盘碎片整理程序     
diskmgmt.msc---磁盘管理实用程序     
dcomcnfg-------打开系统组件服务     
ddeshare-------打开DDE共享设置     
dvdplay--------DVD播放器     
net stop messenger-----停止信使服务     
net start messenger----开始信使服务     
notepad--------打开记事本     
nslookup-------网络管理的工具向导    
ntbackup-------系统备份和还原     
narrator-------屏幕“讲述人”     
ntmsmgr.msc----移动存储管理器     
ntmsoprq.msc---移动存储管理员操作请求     
netstat -an----(TC)命令检查接口     
syncapp--------创建一个公文包     
sysedit--------系统配置编辑器     
sigverif-------文件签名验证程序     
sndrec32-------录音机     
shrpubw--------创建共享文件夹 
secpol.msc-----本地安全策略     
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码     
services.msc---本地服务设置     
Sndvol32-------音量控制程序 
sfc.exe--------系统文件检查器     
sfc /scannow---windows文件保护     
tsshutdn-------60秒倒计时关机命令     
tourstart------xp简介(安装完成后出现的漫游xp程序)     
taskmgr--------任务管理器      
eventvwr-------事件查看器      
eudcedit-------造字程序      
explorer-------打开资源管理器      
packager-------对象包装程序      
perfmon.msc----计算机性能监测程序      
progman--------程序管理器      
regedit.exe----注册表      
rsop.msc-------组策略结果集      
regedt32-------注册表编辑器      
rononce -p ----15秒关机      
regsvr32 /u *.dll----停止dll文件运行      
regsvr32 /u zipfldr.dll------取消ZIP支持      
cmd.exe--------CMD命令提示符      
chkdsk.exe-----Chkdsk磁盘检查      
certmgr.msc----证书管理实用程序      
calc-----------启动计算器      
charmap--------启动字符映射表      
cliconfg-------SQL SERVER 客户端网络实用程序      
Clipbrd--------剪贴板查看器      
conf-----------启动netmeeting  
compmgmt.msc---计算机管理      
cleanmgr-------垃圾整理  
ciadv.msc------索引服务程序      
osk------------打开屏幕键盘      
odbcad32-------ODBC数据源管理器      
oobe/msoobe /a----检查XP是否激活      
lusrmgr.msc----本机用户和组      
logoff---------注销命令      
iexpress-------木马捆绑工具,系统自带      
Nslookup-------IP地址侦测器      
fsmgmt.msc-----共享文件夹管理器  
utilman--------辅助工具管理器  
gpedit.msc-----组策略
posted @ 2009-09-08 15:34 kevin.zhan 阅读(300) | 评论 (0)编辑 收藏

B/S要如何实现数据的实时更新,如股票的数据更新,K 线图。答案就是Comet.
你可以打开两个页面
http://kerphi.zeitoun.net/articles/comet_and_php/comet-ajax/
http://kerphi.zeitoun.net/articles/comet_and_php/comet-ajax/
发个信息试试。呵呵。奇怪吧?看看它的原理 。
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

实践指南:http://www.ibm.com/developerworks/cn/web/wa-lo-w2fpak-comet/

posted @ 2009-04-30 00:14 kevin.zhan 阅读(241) | 评论 (0)编辑 收藏

使用Ajax可以开发出基于浏览器的具有高用户交互性和几乎不易觉察到延迟的web应用。实时的动态数据比如新闻标题、证券报价和拍卖行情都需要尽快地发送给用户。然而,AJAX仍然受限于web请求/响应架构的弱点,使得服务器不能推送实时动态的web数据。

Delft科技大学的EnginBozdag、AliMesbah和ArievanDeursen一起讨论了下面这些可以实现基于web的实时事件通知的方法:

1.HTTP拉取方式:在这种传统的方法中,客户端以用户可定义的时间间隔去检查服务器上的最新数据。这种拉取方式的频率要足够高才能保证很高的数据精确度,但高频率可能会导致多余的检查,从而导致较高的网络流量。而另一方面,低频率则会导致错过更新的数据。理想地,拉取的时间间隔应该等于服务器状态改变的速度。

2.HTTP流:这种方法由存在于不间断的HTTP连接响应中或某个XMLHttpRequest连接中的服务器数据流所组成。

3.反转AJAX:服务流应用到AJAX,就是所谓的反转AJAX或者COMET。它使得服务器在某事件发生时可以发送消息给客户端,而不需要客户端显式的请求。目标在于达到状态变化的实时更新。COMET使用了HTTP/1.1中的持续连接的特性。通过HTTP/1.1,除非另作说明,服务器和浏览器之间的TCP连接会一直保持连接状态,直到其中一方发送了一条明显的“关闭连接”的消息,或者有超时以及网络错误发生。

4.长时间轮询:也就是所谓的异步轮询,这种方式是纯服务器端推送方式和客户端拉取方式的混合。它是基于BAYEUX协议的。这个协议遵循基于主题的发布——订阅机制。在订阅了某个频道后,客户端和服务器间的连接会保持打开状态,并保持一段事先定义好的时间。如果服务器端没有事件发生,而发生了超时,服务器端就会请求客户端进行异步重新连接。如果有事件发生,服务器端会发送数据到客户端,然后客户端重新连接。
posted @ 2009-04-25 13:13 kevin.zhan 阅读(255) | 评论 (0)编辑 收藏

获取一组radio被选中项的值
var item = $('input[@name=items][@checked]').val();
获取select被选中项的文本
var item = $("select[@name=items] option[@selected]").text();
select下拉框的第二个元素为当前选中值
$('#select_id')[0].selectedIndex = 1;
radio单选组的第二个元素为当前选中值
$('input[@name=items]').get(1).checked = true;

获取值:

文本框,文本区域:$("#txt").attr("value");
多选框checkbox:$("#checkbox_id").attr("value");
单选组radio:   $("input[@type=radio][@checked]").val();
下拉框select: $('#sel').val();

控制表单元素:
文本框,文本区域:$("#txt").attr("value",'');//清空内容
                 $("#txt").attr("value",'11');//填充内容

多选框checkbox: $("#chk1").attr("checked",'');//不打勾
                 $("#chk2").attr("checked",true);//打勾
                 if($("#chk1").attr('checked')==undefined) //判断是否已经打勾

单选组radio:    $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项
下拉框select:   $("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项
                $("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option
                $("#sel").empty();//清空下拉框

posted @ 2009-04-22 11:38 kevin.zhan 阅读(871) | 评论 (0)编辑 收藏

1.安装apache的问题
2.安装PHP的问题

3.安装sugarcrm时的问题
  在安装向导的第三步,输入数据库的名字和密码时遇到ERROR 1251的错误。这是因为用户权限不足导致的,解决办法是:
mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

mysql> FLUSH PRIVILEGES;

posted @ 2009-03-26 01:01 kevin.zhan 阅读(253) | 评论 (0)编辑 收藏

Code:
Ext.onReady(function() {
    
var data = [
        ['
001', '张三', 'zhangsan', '男', 24],
        ['
002', '李四', 'lisi', '男', 23],
        ['
003', '刘秀', 'liusiu', '女', 20]
    ];
    
var store = new Ext.data.SimpleStore ({
       fields: [
               {name: 'id'},
               {name: 'chineseName'},
               {name: 'englishName'},
               {name: 'sex'},
               {name: 'age', type: '
int'}
          ]
    });
    store.loadData(data);
    
    
var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
            {header: 'ID号', width: 
80, sortable: true, dataIndex: 'id'},
            {header: '中文名', width: 
100, sortable: true, dataIndex: 'chineseName'},
            {header: '英文名', width: 
100, sortable: true, dataIndex: 'englishName'},
            {header: '性别', width: 
100, sortable: true, dataIndex: 'sex'},
            {header: '年龄', width: 
100, sortable: true, dataIndex: 'age'}
        ],
        stripeRows: 
true,
        autoExpandColumn: 'id',
        height:
150,
        width:
480,
        title:'用户列表'
    });
    grid.render('div_grid');
    grid.getSelectionModel().selectFirstRow();
});

我在Ext.grid.GridPanel里加了autoExpandColumn属性,但是又没有设置id给它,如:
{header: 'ID号', width: 80, sortable: true, dataIndex: 'id'}
应该改成为:
{id: 'id', header: 'ID号', width: 80, sortable: true, dataIndex: 'id'},
这样就可以解决问题了。

posted @ 2008-11-18 23:12 kevin.zhan 阅读(158) | 评论 (0)编辑 收藏

<s:if test="citys.size() > 0">
    <s:select list="citys" name="cityId" listKey="id" listValue="name"></s:select>
</s:if>
可见,在struts的标签里可以直接使用request的变量。
其中citys是在Action定义的变量。

posted @ 2008-09-16 17:29 kevin.zhan 阅读(57) | 评论 (0)编辑 收藏

成功的前提:机遇+准备(例子:史泰龙遭遇1375次挫折。)

设定目标:
1.我要成为什么样的人?
2.我要得到什么?
3.我想要得到什么结果。

posted @ 2008-09-08 23:37 kevin.zhan 阅读(100) | 评论 (0)编辑 收藏

遇到一个不知道如何解决的问题。我写的一个发送邮件的程序,单元测试通过了,接收方能正常收到发送的邮件,可是我在页面调用的时候,接收方只是收到邮件,但是主题和正文都是空的。说明一下,我在服务方法那加了断点,查看到值已经传过去了,也设进Message了。下面是我的代码。
public void sendMail(String[] mailDetail) {
        username 
= email.split("@")[0];//email是成员变量,可以把它的值当作test@test.com
        properties 
= System.getProperties();
        String mailServerName 
= email.split("@")[1].split("\\.")[0];
        setGmailProperties();//暂时只是让它以gmail为服务器
        Session session 
= Session.getDefaultInstance(properties,
                
new Authenticator() {
                    
protected PasswordAuthentication getPasswordAuthentication() {
                        
return new PasswordAuthentication(username, password);
                    }
                });
        message 
= new MimeMessage(session);

        
try {
            message.setFrom(
new InternetAddress(email));
            message.setRecipient(Message.RecipientType.TO, 
new InternetAddress(
                    mailDetail[
0]));
            message.setSubject(mailDetail[
1]);
            message.setText(mailDetail[
2]);
            message.setSentDate(
new Date());

            Transport.send(message);//在这里我加了断点,查看了所有的变量都有值。
        } 
catch (AddressException e) {
            e.printStackTrace();
        } 
catch (MessagingException e) {
            e.printStackTrace();
        }
        System.out.println(
"邮件发送成功");
    }
    private void setGmailProperties() {
        properties.setProperty("mail.smtp.host", "smtp.gmail.com");
        properties.setProperty("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        properties.setProperty("mail.smtp.socketFactory.fallback", "false");
        properties.setProperty("mail.smtp.port", "465");
        properties.setProperty("mail.smtp.socketFactory.port", "465");
        properties.setProperty("mail.smtp.auth", "true");
    }


posted @ 2008-07-11 10:50 kevin.zhan 阅读(406) | 评论 (0)编辑 收藏

 用过structs2 checkboxlist标签的同志一定知道,它默认的布局方式都是横排的.但是如果我们想要每n个checkbox后要换一行,这就有问题了.当然解决的办法是有的,只要改变checkboxblist.ftl就好了.像这样,你要让它每输出四个checkbox之后换行,那么你可以这样改:
 1 <#assign itemCount = 0/>
 2 <#if parameters.list?exists>
 3     <@s.iterator value="parameters.list">
 4         <#assign itemCount = itemCount + 1/>
 5         <#if parameters.listKey?exists>
 6             <#assign itemKey = stack.findValue(parameters.listKey)/>
 7         <#else>
 8             <#assign itemKey = stack.findValue('top')/>
 9         </#if>
10         <#if parameters.listValue?exists>
11             <#assign itemValue = stack.findString(parameters.listValue)/>
12         <#else>
13             <#assign itemValue = stack.findString('top')/>
14         </#if>
15 <#assign itemKeyStr=itemKey.toString() />
16 <#if itemCount%5 == 0>
17 <tr>
18 </#if>
19 <td>
20 <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
21         <#if tag.contains(parameters.nameValue, itemKey)>
22  checked="checked"<#rt/>
23         </#if>
24         <#if parameters.disabled?default(false)>
25  disabled="disabled"<#rt/>
26         </#if>
27         <#if parameters.title?exists>
28  title="${parameters.title?html}"<#rt/>
29         </#if>
30         <#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
31         <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
32 />
33 <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
34 </td>
35 <#if itemCount%4 == 0>
36 </tr>
37 </#if>
38     </@s.iterator>

..小提示..checkboxlist会根据value属性而确定哪个checkbox被选中,但前提是listKey的类型和value的类型要一致.
比如说<s:checkboxlist listKey="id" listValue="desc" name="multiCheck" value="checkedIndex"/>
符合的组合:
id: long
checkedIndex: long[]

    id:String
    checkedIndex:String[]

posted @ 2008-06-11 15:43 kevin.zhan 阅读(1503) | 评论 (2)编辑 收藏