Archive for 01月, 2009
Published by
admin on
01月 20, 2009
1、struts2的Action可以通过ActionContext来访问ServletAPI。下面是ActionContext类中包含的几个常用方法:
- Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法;
- Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例;
- static ActionContext getContext():静态方法,获取系统的ActionContext实例;
- Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法;
- Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例;
- void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名,属性值;
- void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名,属性值
Read the rest of this entry »
Published by
admin on
01月 20, 2009
Struts 2框架有两个核心配置文件:
struts.xml和struts.properties
其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。除此之外,Struts 2框架还包含一个struts.properties文件,该文件定义了Struts 2框架的大量属性,开发者可以通过改变这些属性来满足应用的需求。
struts.properties文件是一个标准的Properties文件,该文件包含了系列的key-value对象,每个key就是一个Struts 2属性,该key对应的value就是一个Struts 2属性值。
struts.properties文件通常放在Web应用的WEB-INF/classes路径下。实际上,只要将该文件放在Web应用的CLASSPATH路径下,Struts 2框架就可以加载该文件。
Read the rest of this entry »
Published by
admin on
01月 14, 2009
一、理解Html DOM、Ext Element及Component
要学习及应用好Ext框架,需要理解Html DOM、Ext Element及Component三者的区别。
Ext是基于Web的富客户端框架,其完全是基于标准W3C技术构建设的,使用到的都是HTML、CSS、DIV等相关技术。Ext最杰出之处,是开发了一系列非常简单易用的控件及组件,我们只需要使用这些组件就能实现各种丰富多彩的UI的开发。
无论组件有多少配置属性、还是事件、方法等等,其最终都会转化为HTML在浏览器上显示出来,而每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM对象,动态改变页面的内容,正是通过使用脚本语言来操作DOM对象实现。
仅仅有DOM是不够的,比如要把页面中的某一个节点移到其它位置,要给某一个节点添加阴影效果,要隐藏或显示某一个节点等,我们都需要通过几句javascript才能完成。因此,Ext在DOM的基础上,创建了Ext Element,可以使用Element来包装任何DOM,Element对象中添加了一系列快捷、简便的实用方法。
对于终端用户来说,仅仅有Element是不够的,比如用户要显示一个表格、要显示一棵树、要显示一个弹出窗口等。因此,除了Element以外,Ext还建立了一系列的客户端界面组件Component,我们在编程时,只要使用这些组件Componet即可实现相关数据展示及交互等,而Component是较高层次的抽象,每一个组件在渲染render的时候,都会依次通过Element、DOM来生成最终的页面效果。
在使用Ext开发的应用程序中,组件Component是最高层次的抽象,是直接给用户使用的,Ext Element是Ext的底层API,主要是由Ext或自定义组件调用的,而DOM是W3C标准定义的原始API,Ext的Element通过操作DOM来实现页面的效果显示。
在Ext中,组件渲染以后可以通过访问组件的el属性来得到组件对应的Element,通过访问Element的dom属性可以得到其下面的DOM对象。另外,我们可以通过通过Ext类的快捷方法getCmp、get、getDom等方法来得组件Component、Ext元素Element及DOM节点。比如:
Read the rest of this entry »
Published by
admin on
01月 14, 2009
窗口第一次打开时form显示正常反复打开几次后就显示不出来了,如附件图片中的样子。

Read the rest of this entry »
Published by
admin on
01月 9, 2009
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
<HEAD>
<script language=”javascript”>…
function moveImage()…{
if(window.event.button!=1)…{
return;
}
with(window.event.srcElement.style)…{
//重新设置图像在浏览器中的位置
pixelLeft=window.event.x-236/2-document.all.ImageDiv.offsetLeft;
pixelTop=window.event.y-118/2-document.all.ImageDiv.offsetTop;
}
window.event.returnValue=false;//取消系统拖动事件
}
</script>
</HEAD>
<BODY>
<div style=”position:relative” id=”ImageDiv”>
<img id=”image2″ style=”container:positioned;position:absolute;top:60px;left:250px;width:236px;height:108px;” src=”11.jpg”>
<img id=”image2″ style=”container:positioned;position:absolute;top:60px;left:60px;width:236px;height:108px;” src=”22.jpg” onmouseMove=moveImage()>
</div>
</BODY>
</HTML>
Published by
admin on
01月 9, 2009
介绍两个关键的css
<style media=”print”>
.Noprint { DISPLAY: none }
.PageNext{ PAGE-BREAK-AFTER: always }
</style>第一个在不需要打印的标签上添加(子标签也将不被打印),第二个在需要换行的标签处添加(该标签所表示的内容将在当前打印的一页内)
接下来通过调用最基本的js语句
window.print()就可实现页面局部打印了,很easy吧!
Published by
admin on
01月 9, 2009
// 处理命令
this.exeCmd = function(cmd) {
cmd = cmd.trim();
var cmdParts = cmd.split(/\s+/g);
var cmdName;
var cmdArg;
if (cmdParts.length == 1) {
cmdName = cmd;
} else {
cmdName = cmdParts[0];
cmdArg = cmdParts[1];
}
switch (cmdName) {
case “bp”:
if (cmdArg == undefined) {
return “error: bp command requires an argument.\n”;
} else {
return bp(cmdArg);
}
break;
case “bl”:
return bl();
break;
case “bc”:
if (cmdArg == undefined) {
return “error: bc command requires an argument \”number of breakpoint\”.\n”;
} else {
return bc(cmdArg);
}
break;
case “help”:
return help();
break;
default: return “error: command \”" + cmdName + “\” not found, you can get information by \”help\” command.\n”;
break;
}
}
}
Read the rest of this entry »
Published by
admin on
01月 9, 2009
四、最后
由于国内很少有见文章提及这个东西,所以才草成这篇,希望能够抛砖引玉。由于本人水平有限,难免有错误或者疏漏之处请谅解,没有说清楚的地方,欢迎和我交流。
还有就是一些不得不感谢的人,感谢剑心一直以来毫无保留的交流,感谢黑锅多次鼓励我把自己的心得体会写成文字,感谢幻影所有的朋友们、B.C.T的朋友们以及群里那帮经常一起扯淡的朋友们。
五、附录
[1] 简易的javascript inline debugger代码
<!–test.htm–>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head><title>Javascript Inline Debugger</title></head>
<body>
<script language=”javascript” type=”text/javascript” src=”js_inline_debugger.js”></script>
<input type=”button” value=”hahaha” onclick=”javascript: alert(this.value);” style=”margin-left: 300px;” />
</body>
</html>
/*
FileName: js_inline_debugger.js
Author: luoluo
Contact: luoluonet_at_yahoo.cn
Date: 2007-6-27
Version: 0.1
Usage:
Read the rest of this entry »
Published by
admin on
01月 7, 2009
一、概述
javascript函数劫持,也就是老外提到的javascript hijacking技术。最早还是和剑心同学讨论问题时偶然看到的一段代码,大概这样写的:
window.alert = function(s) {};
觉得这种用法很巧妙新颖,和API Hook异曲同工,索性称之为javascript function hook,也就是函数劫持。通过替换js函数的实现来达到劫持这个函数调用的目的,一个完整的hook alert函数例子如下:
<!–1.htm–>
<script type=”text/javascript”>
<!–
var _alert = alert;
window.alert = function(s) {
if (confirm(”是否要弹框框,内容是\”" + s + “\”?”)) {
_alert(s);
}
}
//–>
</script>
<html>
<body>
<input type=”button” onclick=”javascript: alert(’Hello World!’)” value=”test” />
</body>
</html>
搞过API Hook的同学们看到这个代码一定会心的一笑,先保存原函数实现,然后替换为我们自己的函数实现,添加我们自己的处理逻辑后最终再调用原来的函数实现,这样这个alert函数就被我们劫持了。原理非常简单,下面举些典型的应用来看看我们能利用它来做些什么。
二、应用举例
1. 实现一个简易的javascript debugger,这里说是debugger比较标题党,其实只是有点类似于debugger的功能,主要利用js函数劫持来实现函数的break point,来看看个简单的例子:
Read the rest of this entry »
Published by
admin on
01月 7, 2009
javascript功能强大,但一个问题是它不能包含其它的js文件,而其它非脚本语言却基本都是有这个功能的,不得不觉得有点遗憾。穷则思变,越来越发现不动态导入文件会严重加大加载页面的时间,经过实验,发现了一个办法,利用xhtml来实现这个功能,下面的函数就可以动态导入javascript文件和css样式文件:
function $import(path,type,title)…{
var s,i;
if(type==”js”)…{
var ss=document.getElementsByTagName(”script”);
for(i=0;i<ss.length;i++)…{
if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
}
s=document.createElement(”script”);
s.type=”text/javascript”;
s.src=path;
}else if(type==”css”)…{
var ls=document.getElementsByTagName(”link”);
for(i=0;i<ls.length;i++)…{
if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
}
s=document.createElement(”link”);
s.rel=”alternate stylesheet”;
s.type=”text/css”;
s.href=path;
s.title=title;
s.disabled=false;
}
else return;
var head=document.getElementsByTagName(”head”)[0];
head.appendChild(s);
}
对于样式文件,默认导入后是立即生效的,这有可能会导致和前面一种选定样式效果重叠,造成混乱。所以可以使用下面的函数来实现样式的切换功能:
Read the rest of this entry »