http://lqw.iteye.com/blog/538238
posted @
2011-04-20 16:04 wawlian 閱讀(245) |
評論 (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 閱讀(1064) |
評論 (0) |
編輯 收藏
http://wawlian.javaeye.com/blog/975029
posted @
2011-03-25 11:25 wawlian 閱讀(188) |
評論 (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 閱讀(345) |
評論 (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 閱讀(216) |
評論 (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 閱讀(395) |
評論 (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 閱讀(1685) |
評論 (0) |
編輯 收藏
通過jQuery選擇器獲取到的永遠是一個對象,幾十頁面上根本沒有該元素。因此,如果要使用jQuery檢查元素再給某個頁面上是否存在的時候,不能使用以下代碼:
1
if ($("#tt"))
{
2
//do sth.
3
}
而應該通過獲取到的元素的長度來判斷,代碼如下:
1
if ($("#tt").lenght > 0)
{
2
//do sth
3
}
或者通過轉換成JavaScript對象的方式來進行處理:
1
if ($("#tt")[0])
{
2
//do sth
3
}
posted @
2011-01-10 10:55 wawlian 閱讀(7641) |
評論 (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 閱讀(156) |
評論 (0) |
編輯 收藏
見代碼和注釋
1
import java.text.SimpleDateFormat;
2
import java.util.Calendar;
3
import java.util.Date;
4
import java.util.GregorianCalendar;
5
public class DateTesting
{
6
/** *//**
7
* @param args
8
*/
9
public 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 閱讀(173) |
評論 (0) |
編輯 收藏