http://lqw.iteye.com/blog/538238
posted @
2011-04-20 16:04 wawlian 阅读(241) |
评论 (0) |
编辑 收藏
我自己在学习Flex的时候碰到了这个问题,上网找了一些觉得都很麻烦。因为我是使用RemoteObject和Java
结合,后台还集成了spring。在jsp中要获取客户端IP地址最简单的办法就是拿到request对象,但是我是获取的spring中的bean,通过spring好像不行,但是我在查看springfactroy代码的时候有个非常发现:
就是flex.messaging.FlexContext这个类有个静态方法:flex.messaging.FlexContext.getHttpRequest()
取到HttpRequest后面在拿getRemoteAddr就不用多说了:
flex.messaging.FlexContext.getHttpRequest().getRemoteAddr()就这么简单.呵呵。
我的环境是Java+spring+blazeds+flex+RemoteObject实现。
posted @
2011-04-20 15:57 wawlian 阅读(1056) |
评论 (0) |
编辑 收藏
http://wawlian.javaeye.com/blog/975029
posted @
2011-03-25 11:25 wawlian 阅读(184) |
评论 (0) |
编辑 收藏
1.云计算基础
1.1云计算概述
1.1.1 解惑——什么是云计算
实质上,云计算是一种构造,它允许访问实际驻留在你的计算机以外的某个位置或者其他Internet连接的设备上的应用程序。通常,它是远程数据中心。
云计算的优点是:另一家公司托管你的应用程序,这意味着他们处理服务器费用,管理软件更新,而你为服务支付相对较少的费用。
云计算缺点:弱连接(网络故障、出于安全的考量);集成问题(如果应用程序在地理上是分散的,那么很难管理他们)
1.1.2 云组件
从简单的拓扑方面来说,云计算解决方案由以下几部分组成:客户、数据中心、分布式服务器。
1.客户:与普通局域网的客户一样
2.数据中心:用于存放你预定的应用程序的服务器集合。
3.分布式服务器:服务器不必全都安在一个位置。通常,服务器在地理上是分散的。但是对于你(云用户)来说,这些服务器工作时,就好像它们是彼此相邻的。
1.1.3 基础设施
1.网格计算
人们通常把网格计算和云计算弄混淆,实际上它们区别非常大。网格计算在同一时间针对单个问题把网络中的众多计算机资源应用于工作。
网格计算需要使用某种软件,他可以划分程序段,然后把他们发送给数千台计算机。可以在组织的所有计算机上完成这个任务,或者以公共协作的形式完成它。
由于以下原因,网格计算变得非常吸引人:
(1)它是一种使用给定数量的计算机资源的经济的方式
(2)它可以解决需要很高计算性能的问题
(3)可以协作式共享很多计算机的资源,而无需一台计算机管理其他计算机。
2.完全虚拟化
完全虚拟化是使完全安装的一台机器在另一台机器上运行的技术。结果会得到一种系统,其中,在服务器上运行的所有软件都位于虚拟机内。
这种方式不仅允许运行独特的应用程序,而且允许运行不同的操作系统。虚拟化与云计算相关,因为它是访问云上服务的方式之一。也就是说,远程数据中心可能以完全虚拟化的方式提供服务。
为了实现完全虚拟化,必须借助特定的硬件组合。知道2005年,AMD-Virtualization(AMD-V)和Intel Virtualization Technology(IVT)扩展的引入才使得完全虚拟化成为可能。
完全虚拟化优点:
(1)在多个用户中共享计算机系统
(2)把用户之间隔开以及把用户和控制程序之间隔开
(3)仿真另一台计算机的硬件。
3.半虚拟化
半虚拟化通过高效的使用系统资源,允许同时在单个硬件设备上运行多个操作系统。
在完全虚拟化中,将仿真整个系统,但是在半虚拟化中,管理模块与虚拟机中的系统协同工作。在半虚拟化系统中,可以同时运行许多不同的操作系统。
半虚拟化在以下方面表现的最佳:
(1)灾难恢复:发生灾难,可以将Guest系统移植别的硬件
(2)迁移:方便迁移
(3)容量管理:虚拟化环境中会更加容易添加更多处理能力或硬盘。
posted @
2011-03-22 11:14 wawlian 阅读(336) |
评论 (0) |
编辑 收藏
XMLHttpRequest的readyState:
0:未初始化——创建
1:初始化——open
2:发送请求——send
3:开始接受结果
4:接收结果完毕
状态每改变一次,调用一次回调函数。方法调用5次,但是前两次的readyState==1
onreadystatechange = callback
绑定回调函数,不加()。
XMLHttpRequest的status:
200 OK
404 Not Found
500 Serevr Error
1 var xmlHttpRequest;
2
3 //创建XMLHttpRequest对象
4 function createXmlHttpRequest() {
5 var xmlHttp;
6 if(window.ActiveXObject) {
7 try {
8 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
9 } catch (e) {
10 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
11 }
12 }else if(window.XMLHttpRequest) {
13 xmlHttp = new XMLHttpRequest()
14 }
15
16 return xmlHttp;
17 }
18
19
20 function checkExist() {
21 xmlHttpRequest = createXmlHttpRequest();
22 xmlHttpRequest.onreadystatechange = callBack;
23
24 var url = "http://localhost:8080/Ajax/CheckUser?uname="+document.getElementById("userName").value;
25
26 xmlHttpRequest.open("GET", url, true);
27 xmlHttpRequest.send(null);
28 }
29
30 function callBack() {
31 if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200) {
32 var result = xmlHttpRequest.responseText;
33 //
34 }
35 }
posted @
2011-03-14 15:36 wawlian 阅读(212) |
评论 (0) |
编辑 收藏
Ajax中请求被缓存的问题
在Ajax开发中,会遇到浏览器缓存内容的问题,比如,某个元素注册了鼠标事件(onmouseover),事件触发后会通过
xmlhttprequest到服务器获取内容,在不刷新页面的情况下,浏览器会缓存第一次请求的内容,服务端更新后浏览器仍然显示第一次的内容。
通常,这种请求都是xmlhttprequest发起的GET请求。根据 HTTP 规范,GET
用于信息获取,而且应该是幂等的。也就是说,当使用相同的URL重复GET请求会返回预期的相同结果时,GET方法才是适用的。当对一个请求有副作用的时候(例如,提交数据注册新用户时),应该使用POST请求而不是GET。所以浏览器会对GET请求做缓存处理。
解决办法:
一. GET请求URL后附加字串,让服务器认为不是相同的请求。
例
"http://www.example.com/index.php?class=aitcle&page=5&_t=" + new
Date().getTime()
二. 在ajax发送请求前加上
xmlHttpRequest.setRequestHeader("If-Modified-Since","0")
三. 在ajax发送请求前加上
xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
四.
服务端响应请求时加 header("Cache-Control: no-cache, must-revalidate"); (PHP)
五.
使用POST代替GET,浏览器不会对POST做缓存
转自 http://yanglei008.javaeye.com/blog/222401
posted @
2011-03-14 15:34 wawlian 阅读(387) |
评论 (0) |
编辑 收藏
唯一约束
唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束。不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所以一般建议创建唯一约束而不是只创建唯一索引。
在PD中创建唯一约束的操作,以教室表来说,RoomID是主键,必然是唯一的,RoomName如果我们也要去必须是唯一的,那么具体操作如下:
在PD的模型设计面板中,双击“教室”表,打开属性窗口,切换到"”Keys”选项卡,可以看到里面有一行数据PK_ClassRoom,这是主键约束。添加一行数据,命名为UQ_RoomName,不能将右边的“P”列选上,然后单击工具栏的“属性”按钮,弹出UQ_RoomName的属性窗口,切换到列选项卡,单击增加列按钮,选择将RoomName列添加到其中,然后单击确定即可完成唯一约束的添加。
这样系统就会自动创建唯一约束。
CHECK约束
CHECK分为列约束和表约束,列约束是只对表中的某一个列进行的约束,可以在列的属性中进行设置,而表约束是对多个列进行的约束,需要在表的属性中进行设置(其实列约束也可以在表约束中设置)。
1.标准CHECK约束
对于一些常用的CHECK约束,可以直接通过设置界面来完成。以班级表为例,ClassName每个学校有自己的命名规则,假设这里规定ClassName必须以2开头,那么需要在ClassName列上定义CHECK约束,使得其满足命名规范。具体操作是在PD中双击Class表,打开Class的属性窗口,切换到列选项卡,选择ClassName列,单击工具栏的“属性”按钮,弹出ClassName的属性窗口,切换到StandardChecks选项卡如图:
在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下:
参数 说明
Minimum 属性可接受的最小数
Maximum 属性可接受的最大数
Default 属性不赋值时,系统提供的默认值
Unit 单位,如公里、吨、元
Format 属性的数据显示格式
Lowercase 属性的赋值全部变为小写字母
Uppercase 属性的赋值全部变为大写字母
Cannot modify 该属性一旦赋值不能再修改
List Of Values 属性赋值列表,除列表中的值,不能有其他的值
Label 属性列表值的标签
2.直接编写SQL语句的CHECK约束
在前面弹出ClassName属性窗口中,单击左下角的“More”按钮,系统将弹出更多的选项卡,切换到“Additional Checks”选项卡,可以设置约束名和具体的约束内容,如图所示:
表级的CHECK约束与列级的CHECK约束设置类似,单击表属性窗口左下角的“More”按钮,切换到Check选项卡,设置CHECK约束的命名和SQL语句内容。
3.使用Rule创建约束
同样以班级名必须以2开头为例,通过Rule创建CHECK约束。首先需要创建一个Rule,双击Class表,打开表的属性窗口,切换到Rules选项卡,单击“Create a Object”按钮,系统将打开一个业务规则属性窗口,修改规则名,并将规则的类型修改为Constraint,如图所示:
然后切换到Expression选项卡,设置规则的内容为“ClassName LIKE '2%'”,单击确定按钮即可完成Rule的设置。切换到表属性的Check选项卡,默认约束内容中的“%RULES%”就是用来表示Rule中设置的内容,如果我们还有一些其他的CHECK约束内容,不希望在Rule中设置,而是在Check选项卡中设置,那么只需要删除%RULES%将CHECK约束内容添加进去,也可以保留%RULES%,然后在与%RULES%之间添加一个and即可。比如规定ClassID必须小于10000,那么我们可以将Check内容设置如下:
生成的脚本如下:
create table Class (
ClassID int not null,
ClassName varchar(20) not null,
constraint PK_CLASS primary key nonclustered (ClassID),
constraint CKT_CLASS check (ClassID<10000),
constraint ClassNameRule check (ClassName LIKE '2%')
)
go
可以看到,根据Rule生成的CHECK约束与在Check选项卡中设置的约束将分别创建一个约束,相互并不影响。
默认约束
默认约束是用户在没有输入值的情况下,系统给出默认的值。最常用的是CreateTime字段,设置默认值为getdate(),在用户创建一行数据时记录下创建时间。例如对于选课表,需要记录下选课的时间,则可以设置ApplyTime的默认值为getdate()函数。
设置默认值约束的操作如下:双击选课表,打开表属性窗口,选择ApplyTime字段,单击工具栏的属性按钮,打开列的属性窗口,切换到Standard Checks选项卡,在Default下拉列表框中选择getdate()即可。
至此我们所有的约束在PD中的设置都介绍完了,下一篇将介绍视图、存储过程等数据库对象。
from: http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html
posted @
2011-02-14 20:32 wawlian 阅读(1675) |
评论 (0) |
编辑 收藏
通过jQuery选择器获取到的永远是一个对象,几十页面上根本没有该元素。因此,如果要使用jQuery检查元素再给某个页面上是否存在的时候,不能使用以下代码:
1if ($("#tt")) {
2 //do sth.
3}
而应该通过获取到的元素的长度来判断,代码如下:
1if ($("#tt").lenght > 0) {
2 //do sth
3}
或者通过转换成JavaScript对象的方式来进行处理:
1if ($("#tt")[0]) {
2 //do sth
3}
posted @
2011-01-10 10:55 wawlian 阅读(7637) |
评论 (1) |
编辑 收藏
选择器
|
语法
|
描述
|
实例
|
标签选择器
|
E{
CSS规则
}
|
以文档元素作为选择符
|
td{
font-size:14px
width:120px
}
|
ID选择器
|
#ID{
CSS规则
}
|
以文档元素的唯一标识ID作为选择符
|
#note {
font-size:14px
width:120px
}
|
类选择器
|
E.classname {
CSS规则
}
|
以文档元素的class作为选择符
|
.dream {
font-size:14px
}
|
群组选择器
|
E1,E2,E3 {
CSS规则
}
|
多个选择符应用同样的样式
|
td,p,div.a {
font-size:14px
}
|
后代选择器
|
E F {
CSS规则
}
|
元素E的任意后代元素F
|
#links a {
font-size:14px
}
|
通配选择器
|
* {
CSS规则
}
|
以文档的所有元素作为选择符
|
*{
font-size:14px
}
|
posted @
2011-01-10 10:49 wawlian 阅读(154) |
评论 (0) |
编辑 收藏
见代码和注释
1import java.text.SimpleDateFormat;
2import java.util.Calendar;
3import java.util.Date;
4import java.util.GregorianCalendar;
5public class DateTesting {
6/** *//**
7* @param args
8*/
9public static void main(String[] args) {
10 // TODO Auto-generated method stub
11
12
13 //1、如何根据给定的年月日构造日期对象
14 //需要构造2008-3-15
15 //用GregorianCalendar类描述日期时,由于月份是从0开始计数的,所以实际的月份值总是比计数值大1.
16 GregorianCalendar calendar=new GregorianCalendar(2008,2,15);
17 Date tempDate=calendar.getTime();
18 System.out.println(tempDate.toLocaleString());
19
20 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
21 System.out.println(sdf.format(tempDate));
22
23
24 //2、如何根据给定的日期对象分解年、月、日
25 //获取系统当前时间
26 Date currentDate=new Date();
27 System.out.println(currentDate.getTime());
28 GregorianCalendar ca=new GregorianCalendar();
29 ca.setTime(currentDate);
30 int year=ca.get(Calendar.YEAR);
31 int month=ca.get(Calendar.MONTH)+1;
32 int day=ca.get(Calendar.DAY_OF_MONTH);
33
34 System.out.println("年份的值: "+year);
35 System.out.println("月份的值: "+month);
36 System.out.println("一个月中某天的值: "+day);
37
38
39 //3、给定两个日期: 2008-8-10 2008-8-16 日 ,需要计算这两个日期之间相差的天数
40 //在JAVA语言系统中,所有的时间都是以1970年1月1日,00时00分00秒000毫秒为时间的开始点计算的。
41
42 GregorianCalendar firstCa=new GregorianCalendar(2008,7,10);
43 Date firstDate=firstCa.getTime();
44
45
46 GregorianCalendar secondCa=new GregorianCalendar(2008,7,16);
47 Date seconDate=secondCa.getTime();
48
49 long distance=seconDate.getTime()-firstDate.getTime();
50 int result=(int)(distance/86400/1000);
51 System.out.println("间隔的天数: "+result);
52
53
54 //4、给定一个日期,例如:2008-4-21, 如何计算15天以后的时间日期???
55
56 GregorianCalendar tpCalendar=new GregorianCalendar(2008,3,20);
57 Date tpDate=tpCalendar.getTime();
58
59 long tp=tpDate.getTime();
60 tp=tp+8*86400*1000;
61 tpDate.setTime(tp);
62 System.out.println(sdf.format(tpDate));
63
64}
65}
66
posted @
2011-01-03 21:08 wawlian 阅读(171) |
评论 (0) |
编辑 收藏