Spring最初是Rod Johnson在2002年由其著作Expert One-on-One: J2EE Design and Development中提出的,另外一本書Expert One-on-One J2EE Development without EJB更進一步闡述了在不使用EJB(Enterprise JavaBean)開發J2EE企業級應用的一些設計思想和具體的作法(題外話:EJB是sun的伺服器端元件Model,最大的用處是部署分散式應用程式,類似微軟的.com技術。Sun在2006年5月2日發布了JSR 220定義,也就是EJB3.0,企圖減輕EJB以往開發過於複雜以及不必要的負擔。參見-
伺服器端元件Model-EJB3.0(Enterprise JavaBean 3.0)論述)。
Spring在2004年初發佈1.0版本,到2006年10月3日發佈了2.0版本,基本上維持著每半年就會有一次大的更新,可到http://www.springsource.org/下載最新版本的Spring。
Spring是一個應用於J2EE領域的輕量應用程式框架,其核心是一個IoC(Inversion of Control)以及AOP(Aspect-oriented programming)。在核心上面的一個主要部份是資料存取DAO框架,包括一個自己的JDBC資料存取封裝以及對眾多ORM框架的工具集支持。Spring內置了一個功能強大、靈活的Web MVC框架Spring MVC框架,以提供快速的Java Web應用程式開發,在程式開發中,程式開發者可以直接使用Spring框架內建的Spring MVC框架。除此之外,對於現在比較流行的各種層面上的框架(如Hibernate、JSF、Struts等),Spring也提供了與它們相互整合的方案。
Spring框架系統架構如圖,從圖中看出Spring提供了很多J2EE應用的基礎設施及解決方案,便於開發J2EE應用。
其中Core是框架的最基礎部分,提供IoC(Inversion of Control,控制反轉)和DI(Dependency Injection,依賴注入)特性。所謂的控制反轉是指控制權由程式改到Spring Container(容器),控制權的移轉,是所謂的反轉;或可說是依賴注入,將原先程式間的耦合降到最低,改由Spring容器注入程式間的關連。使用IoC通常會使得程式碼非常清晰,更為重要的是,IoC可以使得程式碼之間、類別與類別之間有很好的解耦性。DI有三種形式:Setter-based、Constructor-based、Getter-based,Spring推薦使用第一種方式,Setter-based類似典型的JavaBean,帶有一個無參數的構造函數和setter方法。
BeanFactor代表了Spring的心臟,可以配置和管理幾乎所有的Java類別,在存取和操作IoC的初期充當了IoC容器的作用。然而在大多數的情況之下,不會直接使用BeanFactor而是使用ApplicationContext,因為ApplicationContext具有更多的企業級特性如多國語言支援、資源存取、事件傳播和多實例載入等等。
Bean在Spring容器中大致要經歷以下四個階段:Bean定義、初始化、準備狀態以及銷毀。
Spring的AOP是OOP(物件導向程式設計)的延續,提供了符合AOP Alliance規範的層面導向程式設計(Aspect-Oriented Programming)的具體實現,讓使用者可以定義,像方法攔截器(method-interceptors)和切入點(PointCuts),從軟體設計上看,通過這樣的方式可以降低耦合性(coupling),提高內聚性(cohesion),從而在軟體結構上得到改善。
DAO模式是一種資料存取物件模式,它通過抽象方法來提供資料存取的介面,這樣便消除了冗長乏味的JDBC編碼,並且通過這樣的封裝方式更容易為程式設計提供介面,而且對所有的POJO適用。
ORM封裝提供了物件關係對應的API介面,使用ORM工具集的產品除了提到過的Hibernate,還包括了如JDO等產品。
<未完 待補充更新>
閱讀全文...
Struts框架最早是作為Apache Jakarta專案的組成部分問世運作,專案的創立者希望通過對該專案的研究,改進和提高JAVA Server Pages、Servlet、標籤庫(tag library)以及物件導向的技術水準,它的目的是為了減少在運用MVC設計模型來開發Web應用的時間。
建立基於Struts框架的web應用程式最快捷的方式就是利用Struts框架發佈包中包含的struts-blank.war文件。該檔不僅定義了struts web應用程式的標準的目錄結構而且還包含了開發struts web應用程式所必需的包。
如果使用Eclipse IDE作為開發工具,並部署在應用伺服器Tomcat 5.0中執行,然後再import struts-blank.war進來。由於struts框架本身就是基於servlet,因此需要將tomcat目錄下common\lib中的servlet-api.jar拷到strutsSample\WebContent\WEB-INF\lib中。
在探討Struts MVC運作架構之前我們先來看看基本的MVC運作模式,如圖所示:
所有進入到系統中的Request都會導給一個Controller程式,由Controller來判斷目前這個Request必須交由哪一個程式處理(那一個Request必須交由哪一個程式處理可能是設定在另外一個地方),接著便會呼叫執行該處理程式,並將收到的Request當作參數傳給該程式。在處理過程中需要進行商業邏輯處理的部分就會呼叫執行Model中的程式,Model處理完之後再將結果回傳給Controller,Controller再將結果傳給指定的View來進行畫面呈現。在這個架構中Controller是所有Request的唯一進入點,Model的部分只負責處理系統中的商業邏輯,畫面呈現則全部都由View來負責。
Struts的運作模式是採用MVC的架構,整個運作方式大致如圖所示。當Request進入到Struts時會導給一個ActionServlet來處理,這個程式會根據設定檔struts-config.xml中的設定呼叫執行我們所撰寫的Action處理程式,並將Request當作參數傳給這個Action處理。Action在處理過程中會呼叫一些商業邏輯物件(Business Objectc)中的程式存取後端的資料庫;當Action處理完之後會將結果回傳給ActionServlet,最後ActionServlet再將這個結果可以在struts-config.xml中設定一些JavaBean(ActionForm)來接收Request中的資料,此時Struts便會幫我們將資料塞到JavaBean中,讓我們可以在Action中直接取用,讓我們可以在Action中直接取用,在使用上會比較方便。
我們在使用Struts開發系統時,必須撰寫流程控制程式(Action)、商業邏輯處理程式(Business Object)、畫面呈現程式(JSP)並在設定檔(struts-config.xml)中設定這幾個元件之間的運作關係。當然,如果在流程控制與商業邏輯處理程式之間有使用到一些物件來當作資料傳遞的參數(DTO,Data Transfer Object),那麼這些傳遞資料的物件也必須由我們自行撰寫。
閱讀全文...
在SQL Server中,我們可以使用二種方法來設定自動化的資料處理規則:
1.
條件約束(Constraint)可以直接設定於資料表內,通常不需另外撰寫程式。但此方法只能進行比較單純的運作,包括自動填入預設值(DEFAULT),確保欄位資料不得重複(PRIMARY KEY/UNIQUE KEY)、限制輸入值在某個範圍內(CHECK)、維護資料表間的參考完整性(FOREIGN KEY)...等。
2.
觸發程序(Trigger)是針對單一資料表所撰寫的特殊預存程序,當該資料表發生INSERT、UPDATE或DELETE時會自動被觸發(執行),以進行各項必要的處理工作。由於是撰寫程式,因此無論是單純或複雜的工作都可一手包辦。
當然,如果只是單純的自動化工作,我們應儘量利用條件約束來完成,因為這樣做一方面容易設定及維護,另一方面執行效率也會比較好。只有當條件約束無法滿足實際需求時,才應考慮使用觸發程序來處理。
那麼,觸發程序到底有什麼特異功能呢?底下來看幾個例子:
檢查所做的更改是否允許:
雖然我們可以用資料表的條件約束來維護資料完整性,例如CHECK、PRIMARY KEY/UNIQUE KEY、FOREIGN KEY等,但觸發程序可以做更多樣、更複雜的檢查。例如同時檢查許多個資料表,或使用IF...ELSE等來做更有彈性的檢查。
‧進行其他相關資料的更改動作:
例如當某筆訂單被取消時,我們可以利用觸發程序去自動刪除相關的送貨單資料,並將業務員的獎金扣一半;或是在更改員工的薪資時,將更改的日期及原薪資存入另一個薪資異動資料表中。
‧發出更改或預警的通知:
例如當有新進員工的資料被輸入時,觸發程序可以自動發Mail通知該部門的所有人員;或是當庫存量小於安全量時,即發Mail通知倉庫管理員要趕快進貨。
‧自訂錯誤訊息:
當操作不符合條件約束時,所回應給前端應用程式的錯誤訊息都是固定的內容。利用觸發程序,則可以回應我們自訂的錯誤訊息。
‧更改原來所要進行的資料操作:
利用SQL Server 2005的INSTEAD OF觸發程序,我們可以撰寫程式來取代原本應該進行的資料操作。例如當新增一筆記錄時,我們可以將該記錄的資料另做處理,而不存入資料表中。
‧檢視表也可以有觸發程序:
檢視表中的計算欄位通常是不允許更改的,但同樣是利用INSTEAD OF觸發程序,我們可以打破這個限制,將預備要更改的資料欄截出來另外處理。例如可將使用者輸入的地址先分解成縣市與街道二部份,再分別存入縣市與街道欄位。
其實觸發程序就像是倉庫的管理員一樣,當有貨物要進出時,管理員即會出面做查核或協調,以維護整個倉庫的正常運作。因此,如果您是資料庫的管理者(DBA,DataBase Administrator),那麼就應該好好利用觸發程序的功能,為每個重要的資料表都設計一個最佳的倉庫管理員,這樣就不用擔心使用者胡作非為,或是不按照牌理出牌了。
觸發程序的種類與觸發時機
觸發程序可分為2種:
‧AFTER觸發程序:這類的觸發程序要在資料已變動完成之後(AFTER),才會被啟動並進行必要的善後處理或檢查。若發現有錯誤,則可用ROLLBACK TRANSATION敘述將此次操作所更動的資料全部回復。
‧INSTEAD OF觸發程序:INSTEAD OF是"取代"的意思,就是這類觸發程序會取代原本要進行的操作(例如新增或更改資料的動作),因此會在資料變動之前就發生,而且資料要如何變動也完全取決於觸發程序。
INSTEAD OF觸發程序能夠適用於資料表及檢視表(View)上;而AFTER觸發程序則只能使用於資料表。
另外,當我們在建立觸發程序時,還必須指定程序要被觸發的操作時機:INSERT、UPDATE或DELETE,至少要指定一種,當然一個觸發程序也可同時指定二種或三種時機。在同一個資料表中,我們可以建立許多的AFTER觸發程序,但INSTEAD OF觸發程序針對每種操作(INSERT、UPDATE、DELETE)最多只能各有一個。
如果針對某操作同時設定了INSTEAD OF及AFTER觸發程序,那麼只有前者會被觸發,後者未必會被觸發。
觸發程序的建立與修改
用SQL建立觸發程序的簡易語法如下:
CREATE TRIGGER trigger_name
ON {table | view}
[WITH ENCRYPTION]
{FOR | AFTER | INSTEAD OF} { [DELETE] [,] [INSERT] [,] [UPDATE]}
AS
sql_statements
閱讀全文...
當我們在撰寫SQL程式時,多少都會用到一些系統內建的函數,例如GETDATE()、CAST(...)等。而SQL Server 2005的「使用者自訂函數」功能,則讓我們也可以自己來建立函數,然後直接應用於SQL敘述或運算式中。
自訂函數其實和預存程序是很類似的,都是由多行T-SQL敘述所組成的程式單元。不過它們之間還是有一些明顯的差異:
1.預存程序只能傳回一個整數值;而自訂函數則可傳回各種資料型別的值(但text、ntext、image、timestamp、cursor及rowversion除外),甚至包括了sql_variant及table型別。
2.預存程序可以經由參數來傳資料(將參數設為OUTPUT);但自訂函數則只能接收參數,不可由參數傳回資料。
3.在預存程序中可以做任何的資料異動,例如新增或修改資料、更改資料庫的設定...等;但自訂函數則不允許更改資料庫的狀態或內容。
4.預存程序必須以EXECUTE來執行,因此不能使用在運算式之中,例如myProc會傳回2,那麼「SET @var=myProc」或「SELECT * FROM myProc」都會造成錯誤。而自訂函數則除了可用EXECUTE來執行外,也可用於運算式中,並以傳回值來取代其名稱,例如假設myFun(3)會傳回"Good",則「SET @var=myFun(3)+'!'」就相當於「SET @var='Good'+'!'」。
一般來說,預存程序比較適合做一些對資料庫的操作或設定,其執行結果通常不必傳回,或將結果傳回到執行該程序的應用程式中(例如將SELECT敘述的結果傳回到SQL查詢或前端應用程式中);而自訂函數則適用於計算或擷取資料,然後將結果傳回給呼叫它的運算式或SQL敘述(例如SELECT或FROM子句)中使用。
自訂函數的建立
您可以在SQL Server Management Studio中建立自訂函數,其操作方法也和預存程序差不多,只是SQL語法有所不同而已:
自訂函數依傳回值及函數內容可分為兩大類:
1.純量值函數(Scalar-valued function):這類函數會傳回單一的資料值,而資料值的型別可以是除了text、ntext、image、cursor及rowversion(timestamp)之外的任何型別。若是傳回table型別的資料,則歸屬於下列二類函數。
2.傳回資料集(Rowset)的自訂函數:這類函數可傳回一個table型別的資料集,依其定義語法的不同,又分為2小類:
‧嵌入資料表值函數(Inline table-valued function):或稱為「行內資料集函數」。函數的內容僅有一個SELECT敘述,而傳回值即是該SELECT的查詢結果。
‧多重陳述式資料表值函數(Multistatement table-valued function):或稱為「多敘述資料集函數」。函數內容包含許多的敘述,而最後也會傳回一個table型別的資料集。
閱讀全文...
「預存程序」(Stored Procedure)就是將常用的或很複雜的工作,預先以SQL程式寫好,然後指定一個程序名稱儲存起來,那麼以後只要使用EXECUTE敘述來執行這個程序,即可自動完成該項工作。
預存程序的優點預存程序中可以包含資料存取敘述、流程控制敘述、錯誤處理敘述...等在使用上非常有彈性。其優點有:
執行效率高:SQL Server會預先將預存程序編譯成一個執行計劃並儲存起來,因此每次執行預存程序時都不需要再重新編譯,如此可以加快執行速度。由此可知,我們應該將經常使用的一些操作寫成預存程序,來提高SQL Server的運作效率。
統一的操作流程:我們可以將複雜的工作製做成預存程序,如此除了節省人力操作的時間外,對於一般使用者來說,也可以維持一致的資料操作流程,並避免使用者不小心的操作錯誤。例如當某項資料變更時,必須更動到5個資料表的內容,那麼將更新步驟寫成預存程序來執行,不但省事,而且也不怕漏掉任何一個資料表。
重複使用:預存程序還可模組化(將大的程序分解成許多較小而且可以獨立運作的程序),以方便除錯、維護、或重複使用於不同的地方。例如當我們要將「地址」資料分解成「市、街、號、樓」4個字串時,可寫一個預存程序來處理,那麼以後在任何地方只要執行此預存程序,即可完成分解地址的工作。
安全性:當資料表需要保密時,我們可以利用預存程序來作為資料存取的管道。例如當使用者沒有某資料表的存取權限時,我們可以設計一個預存程序供其執行,以存取該資料表中的某些資料,或進行特定的資料處理工作。此外,預存程序的內容還可以加密編碼,這樣別人就看不到預存程序中的程式了。
預存程序的種類
預存程序可分為3類:
系統預存程序(System stored procedures)
系統預存程序一律以sp_開頭,例如"sp_dboption"。此類預存程序為SQL Server內建的預存程序,通常是用來進行系統的各項設定、取得資訊或相關管理工作。
延伸預存程序(Extended stored procedures)
延伸預存程序通常是以xp_開頭,例如"xp_logininfo"。此類程序大多是以傳統的程式語言(例如C++)撰寫而成,其內容並不是儲存在SQL Server中,而是以DLL的形式單獨存在。
我們可以把延伸預存程序看成是SQL Server的外掛程式,它可以擴充SQL Server的功能,例如SQL Server沒有從網頁中萃取資料的能力,則我們可以撰寫一個DLL的延伸預存程序,以供SQL Server將之載入並執行。
使用者自訂的預存程序(User-defined stored procedures)
就是我們自己設計的預存程序,其名稱可以任意取,但最好不要以sp_或xp_開頭,以免造成混淆。自訂的預存程序會被加入所屬資料庫的預存程序項目中,並以物件的形式儲存。
用SQL語言建立預存程序
建立預存程序是使用CREATE PROCEDURE敘述,其語法如下:
CREATE PROC[EDURE] procedure_name [;number]
[@parameter data_type [VARYING] [= default] [OUTPUT]]
[,...n]
[WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }]
[FOR REPLICATION]
AS sql_statement [...n]
閱讀全文...
在存取資料庫時,我們所下的SQL敘述不一定要一個一個地執行,也可以利用批次(Batch)的方式,將一個或多個SQL敘述打包,一起送到SQL Server去處理。SQL Server會將一個批次中所包含的數個SQL敘述當做一個執行單元(Unit),一起編譯成為執行計畫(Execution plan),然後再加以執行。
不過請注意,並非所有SQL敘述皆可放在同一個批次內執行,例如CREATE VIEW、CREATE DEFAULT、CREATE RULE、CREATE PROCESURE及CREATE TRIGGER敘述只能單獨放在一個批次中執行,不能與其他敘述合併執行。
用GO分隔不同的批次
因為不是所有SQL敘述都可以放再同一個批次,或是有些情況下,您可以會希望讓某些敘述分開執行。假設您有三個敘述需要執行,如果三個敘述全部放再同一批次,則當第1個敘述失敗時,批次就會停止,而不會繼續執行第2、3個敘述,若是能夠將第1與第2、3個敘述隔開,就可以確保後面敘述可以順利執行。
所以SQL Server提供了一個GO指令,讓您可以隔開SQL敘述,將之分為多個批次。下面是一個簡單的範例:
USE 練習02 <-------第1個批次
GO
SELECT * -----
FROM 客戶 |
SELECT * |---第2個批次
FROM 訂單 ----|
GO
當SQL Server遇到GO指令時,會將GO當作傳送批次的訊號,例如遇到第1個GO的時候,會將GO前面的敘述傳送給伺服器進行處理(編譯成執行計劃並加以執行)。而遇到第2個GO指令時,再將兩個SELECT敘述傳送給伺服器處理,如此就產生兩個批次。
請注意,GO只有SQL Server Management Studio提供的工具程式才能辦識並處理。意即GO指令只能使用在SQL Server Management Studio中執行,若是您撰寫應用程式(例如用Visual Basic撰寫)時使用GO指令,那麼SQL Server將會因不認得而產生錯誤訊息。
閱讀全文...
在ASP.NET中,網頁是由「視覺」與「程式邏輯」兩個部分所組成的,視覺就是指圖片、靜態文字、HTML標籤...等掌控網頁外觀的部分,而程式邏輯就是Visual Basic或是其他程式語言的程式碼,用來控制網頁的邏輯運作。
這兩個部分可以依照您的需求,合在一起放在同一個檔案內,稱為「單一檔案模式」,也可以分開放置在不同檔案,稱為「程式碼後置模式」(Code-Behind);
雖然程式碼後置模式將程式分開成為兩個檔案,但是ASP.NET載入該程式時,仍然會自動將兩個檔案合併執行。
兩種模式的比較
一般來說,單一檔案模式的優點如下:
1.如果程式碼不多,放置於單一檔案內,對於學習、撰寫與維護較為方便。
2.因為只有一個檔案,所以容易部署至伺服器,傳送給其他人的時候也較為方便。
3.只有單一檔案,所以需要更改名稱時直接更改即可。若是程式碼後置模式,更改aspx.cs檔案的名稱之後,還必須開啟aspx檔案修改CodeFile屬性,所以比較麻煩。
而下面則是程式碼後置模式的優點:
1.將視覺與程式邏輯分開之後,美工與程式設計人員便能獨立作業,可以各自修改檔案,不會互相影響。
2.因為程式羅輯分開為另一個檔案,所以可以方便地讓多個網頁共用同一個程式邏輯檔案。
兩種模式各有其優缺點,您可以依照環境與需求,選擇合適的模式來設計。
閱讀全文...
Visual Studio 2008是微軟公司為.NET程式設計者所提供的IDE軟體,其支援多種程式語言,而且具備統一的開發介面,不論開發桌面應用程式、ASP.NET網頁程式。XML Web Service或是行動裝置應用程式,都可以在相同的環境與介面下完成。
依照功能的不同,Visual Studio 2008分成許多版本,其中Visual Web Developer(簡稱VWD)便是特別為了開發ASP.NET網站所推出。
在VWD內可以使用C#與Visual Basic設計ASP.NET網頁,而且還隨附SQL Server Express資料庫伺服器,可以開發較為複雜、以資料庫為資料後端的網站。
網站種類
在VWD中開發ASP.NET網頁,必須先建立網站專案,一個專案便代表一個網站。VWD支援的網站類型可分為以下幾種:
HTTP、FTP:這2種網站都是指實際運作中的Web伺服器(通常都是IIS伺服器),在開發網頁的過程中,VWD會透過HTTP或FTP通訊協定存取伺服器上的網頁檔案,載入到VWD的工作環境中供我們進行開發,修改的結果也都會直接存回伺服器上。
檔案系統:顧名思義,這是將我們開發的網頁直接存於本機的資料夾中,不過VWD有一項特別的「虛擬網站」功能,可在電腦上啟動模擬的Web伺服器,以供ASP.NET網頁。此功能讓我們可在開發過程中,不必架設實際的Web伺服器,也可測試ASP.NET網頁在伺服器上執行的效果。由瀏覽器經由虛擬網站來瀏覽開發中的ASP.NET網頁時,即是模擬使用者實際經由網路存取網站伺服器網頁的情形。
剛建好的新網站,其中即會含有1個資料夾及3個檔案(展開右邊方案總管窗格中的加號,可看到另一個檔案)。這些資料夾和檔案雖暫時用不到,但還是先來認識一下:
App_Data:這個資料夾是用來存放ASP.NET所要用到的資料檔,可以是SQL Server的資料庫檔或XML檔案。
Default.aspx:aspx是預設的ASP.NET網頁副檔名;Default則是預設的首頁名稱。當我們在VWD中建立新的ASP.NET網頁時,預設也都是以Default為主檔名,並會依序加上數字編號,不過我們可自行設定新的檔案名稱。
Default.aspx.cs:按Default.aspx前的加號按鈕時才會看到,此為Default.aspx網頁的ASP.NET程式碼所在的檔案,副檔名為cs表示其為C#程式。此種將程式碼與網頁內容分開的方法,稱為程式碼後置(Code-Behined)。
web.config:這是ASP.NET的網站設定檔,當我們希望ASP.NET的行為與預設不同時,即需在web.config寫入新的設定值。
閱讀全文...
無論使用C#或是VB.NET,當你要透過ADO.NET連接SQL Server資料庫的時候,必須指定連接字串,因此我們來看一下相關連線字串的彙總。
最簡單的連線字串,是以信任連線的方式連接 SQL Server 資料庫,字串如下:
Server=ServerAddress;Database=DataBaseName;Trusted_Connection=True;
ServerAddress是資料庫伺服器的名稱,DataBaseName則是所要連接的資料庫名稱,Trusted_Connection設為True,表示直接透過信任連線連接,因此不需要指定帳號密碼資料。
底下是非信任連線的狀況,其中的Trusted_Connection設定為flase,因此必須再指定ID與Password兩個屬性值給他,這兩個值分別代表開啟資料庫所需的帳號與密碼:
Server=ServerAddress;Database=DataBaseName;User ID=Username;Password=Password;Trusted_Connection=False;
除了上述的語法,你也可以利用以下的替代語法:
Data Source=ServerAddress;Initial Catalog=DataBaseName;Integrated Security=SSPI;
Data Source=ServerAddress;Initial Catalog=DataBaseName;User Id=myUsername;Password=myPassword;
「Integrated Security=SSPI」的意義與「Trusted_Connection=True」的相同,其他的幾個項目則對應至相同的屬性。
另外,你也可以透過指定 IP Address 的方式,連接逺端資料庫,字串如下,要特別注意的是,其中的Data Source除了IP位址,最後一個數字「1433」,是SQL Server的預設連接埠:
Data Source=192.168.100.100,1433;Network Library=DBMSSOCN;
Initial Catalog=DataBaseName;User ID=Username;Password=PasswordName;
如果你使用的是SQL Server Express版本,則連線字串是相同的,差別只在於Server名稱必須加上一個SQLEXPRESS ,如下式:
Server=ServerAddress\SQLEXPRESS ;Database=DataBaseName;Trusted_Connection=True;
閱讀全文...
資料庫定義到char類型的欄位時,不知道大家是否會猶豫一下,到底選char、nchar、varchar、nvarchar、text、ntext中哪一種呢?結果很可能是兩種,一種是節儉人士的選擇:最好是用定長的,感覺比變長能省些空間,而且處理起來會快些,無法定長只好選用定長,並且將長度設置盡可能地小;另一種是則是覺得無所謂,儘量用可變類型的,長度儘量放大些。
鑒於現在硬體像蘿蔔一樣便宜的大好形勢,糾纏這樣的小問題實在是沒多大意義,不過如果不弄清它,總覺得對不起勞累過度的CPU和硬碟。
下面開始了(以下說明只針對SqlServer有效):
1、當使用非unicode時慎用以下這種查詢:
select f from t where f = N'xx'
原因:無法利用到索引,因為資料庫會將f先轉換到unicode再和N'xx'比較
2、char 和相同長度的varchar處理速度差不多(後面還有說明)
3、varchar的長度不會影響處理速度!!!(看後面解釋)
4、索引中列總長度最多支援總為900位元組,所以長度大於900的varchar、char和大於450的nvarchar,nchar將無法創建索引。
5、text、ntext上是無法創建索引的。
6、O/R Mapping中對應實體的屬性類型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性來說,可變長度的類型更加吻合。
7、一般基礎資料表中的name在實際查詢中基本上全部是使用like '%xx%'這種方式,而這種方式是無法利用索引的,所以如果對於此種欄位,索引建了也白建。
8、其他一些像remark的欄位則是根本不需要查詢的,所以不需要索引。
9、varchar的存放和string是一樣原理的,即length {block}這種方式,所以varchar的長度和它實際佔用空間是無關的。
10、對於固定長度的欄位,是需要額外空間來存放NULL標識的,所以如果一個char欄位中出現非常多的NULL,那麼很不幸,你的佔用空間比沒有NULL的大(但這個大並不是大太多,因為NULL標識是用bit存放的,可是如果你一行中只有你一個NULL需要標識,那麼你就白白浪費1byte空間了,罪過罪過!),這時候,你可以使用特殊標識來存放,如:'NV'。
11、同上,所以對於這種NULL查詢,索引是無法生效的,假如你使用了NULL標識替代的話,那麼恭喜你,你可以利用到索引了。
12、char和varchar的比較成本是一樣的,現在關鍵就看它們的索引查找的成本了,因為查找策略都一樣,因此應該比較誰佔用空間小。在存放相同數量的字元情況下,如果數量小,那麼char佔用長度是小於varchar的,但如果數量稍大,則varchar完全可能小於char,而且要看實際填充數值的充實度,比如說varchar(3)和char(3),那麼理論上應該是char快了,但如果是char(10)和varchar(10),充實度只有30%的情況下,理論上就應該是varchar快了。因為varchar需要額外空間存放塊長度,所以只要length(1-fillfactor)大於這個存放空間(好像是2位元組),那麼它就會比相同長度的char快了。
13、nvarchar比varchar要慢上一些,而且對於非unicode字元它會佔用雙倍的空間,那麼這麼一種類型推出來是為什麼呢?對,就是為了國際化,對於unicode類型的資料,排序規則對它們是不起作用的,而非unicode字元在處理不同語言的資料時,必須指定排序規則才能正常工作,所以n類型就這麼一點好處。
總結陳詞:
1、如果資料量非常大,又能100%確定長度且保存只是ansi字元,那麼char。
2、能確定長度又不一定是ansi字元或者,那麼用nchar;
3、不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4、不查詢的話沒什麼好說的,用nvarchar(4000)。
5、性格豪爽的可以只用3和4,偶爾用用1,畢竟這是一種額外說明,等於告訴別人說,我一定需要長度為X位元的數據。
閱讀全文...
「.NET Framework類別函式庫」(.NET Framework Class Library)提供很多功能強大的類別,我們可以直接在C#程式使用這個類別函式庫來輕鬆擴充程式的功能。
.NET Framework類別函式庫是一個龐大且良好組織架構的函式庫,各種.NET Framework支援的程式語言都可以使用相同的.NET Framework類別函式庫,例如C#或Visual Basic 2005程式語言。
.NET Framework類別函式庫的類別架構是使用稱為「名稱空間」(Namespaces,也稱為命名空間)的階層類別架構,每一個名稱空間能夠擁有多個類別,如下圖所示:
上述圖例的System是最基礎的名稱空間,其下擁有基本資料型態的System.Int32(每一階層的名稱空間是使用「.」運算子連接)、System.Byte、System.Single和System.String等名稱空間。這些名稱空間的類別是對應C#語言的內建資料型態。換句話說,C#資料型態都擁有對應的.NET Framework類別物件。
System.Windows.Forms是表單控制項的父名稱空間,其下的名稱空間就是各種控制項的類別:System.IO是基本輸出與輸入和檔案處理的名稱空間。
閱讀全文...
由於微軟希望將.NET做為未來開發所有不同類型專案的平台,也就是專案應用的底層。
在此一底層中,設計人員應常會看到Windows Form及Web Form等兩個名詞。這兩個名詞分別表示開發在Windows及Web中執行的應用程式,由於執行環境不同,故.NET為這兩種環境的介面,區分為Windows Form及Web Form。若以內容而言,Windows Form及Web Form提供的內容就是各種控制項。
換言之,Web Form就是以ASP.NET開發的網頁,在網頁內就只能使用各種Web Form提供的功能,也就是控制項。
若使用Visual Studio.NET,會在分別使用Windows應用程式及Web應用程式等不同專案時,自動顯示可使用的控制項。
所以若要在SDK輔助說明中尋找有關控制項的說明,請先了解型態,如.aspx網頁必須使用Web Form提供的控制項。
閱讀全文...
什麼是.NET?一言以敝之,就是「可提供多種語言,進行開發的技術平台」,至於使用的語言種類、開發的應用系統在何處執行等,微軟都希望可做到多語言及多平台。換言之,不論開發人員擅長的語言為何、應用系統完成後的執行位置為何等,都可使用.NET進行開發,這就是.NET的目的。
.NET如何做到此點,首先由其內容觀之,共包括如下四個組成:
Common Language Runtime(CLR):元件的開發過程中,它扮演著如同runtime的角色,執行測試。當元件在執行時,runtime負責管理記憶體的分配,啟動以及結束執行緒與程序,強制執行安全原則,並滿足所有元件與其他元件間可能具有的相依性。
.NET Framework Class Library:其內容是所有可重複使用的類別庫(或程式庫),並可與CLR緊密結合。它包含了數個命名空間(Namespace),而各Namespace之下就是可用的程式庫。
ADO.NET:就是名為System.Data的Namespace,其內就是ADO.NET所有物件模組的類別,目的是「在記憶體內處理資料庫」。
ASP.NET:ASP.NET是一個建構在CLR上,可供撰寫程式的平台,並可在伺服器上使用,以建構強力的Web應用程式。重點是Web Forms(即.aspx檔案),提供簡易的設計方式,可供建置動態的Web使用者介面。並提供建構分散式Web基礎應用程式所需的建構區塊,即以XML資料為傳輸標準的Web Services。
以上就是.NET的四項組成,其中CLR是.NET引擎的作業,與設計人員及使用者較無直接關係,後三者皆會在設計時,依不同目的而予以引用。
閱讀全文...
C#語言是一種物件導向程式語言,其精神是物件,但支援物件的程式語言並不一定就是一種物件導向程式語言,它可能只是物件基礎程式語言(Object-based Languages),只提供資料抽象化和物件觀念。例如:Visual Basic 6.0。
物件的基本觀念物件可以視為提供特定功能的元件或黑盒子,我們不用考慮元件內部詳細的資料或程式碼,只需知道物件提供哪些方法和屬性,以及如何使用它,一樣可以使用物件來建立所需的應用程式。
事實上,物件導向程式設計的目的就是讓設計者自行定義物件或擴充存在的物件功能,簡單的說,就是使用物件基礎程式設計來建立應用程式。
物件
物件(objects)是物件導向程式的基礎,簡單的說,物件是資料(Data)和包含處理此資料程式碼(稱為方法Method)的綜合體。
「類別」(Class)是定義物件內容的模子,透過模子可以建立屬於同一個類別的多個物件,例如:Label控制項是一個類別,當我們在表單上新增多個標籤控制項後,就是使用類別建立名為label1和label2等多個物件。
當程式碼使用類別建立物件後,我們並不用考慮物件內部的處理方式,只需知道它提供的屬性和方法與如何使用它,就可以使用這些物件來建立程式。
事實上,Windows應用程式的組成元件都是物件,在表單中的控制項,例如:文字方塊、清單方塊、標籤和按鈕等都是一個個物件。
屬性
物件的屬性(Properties)是物件的性質和狀態,例如:文字方塊控制項提供MaxLength屬性設定輸入字串的長度,標籤物件的BackColor可以指定背景色彩,如下所示:
label1.BackColor;
textBox1.MaxLength;
PS:句點「‧」是物件運算子,在程式碼中的物件是使用句點來存取物件屬性值和呼叫物件的方法。
方法
方法(Methods)是物件的處理函數,也就是執行物件提供的功能。例如:Graphics繪圖物件g提供方法可以繪出字串和畫線,如下所示:
g.DrawString();
g.DrawLine();
上述程式碼使用Graphics物件的方法。事實上,我們並不需要知道繪出字串和畫線的程式碼是什麼?只需知道物件提供的方法需要如何用,指定參數後,就可以繪出指定的圖形。
事件
事件(Events)本身是一個物件,它代表使用者按下滑鼠按鍵或鍵盤按鍵等操作後,所觸發的動作進而造成控制項狀態的改變,當這些改變發生時,就會觸發對應的事件物件。我們可以針對事件來作進一步處理。
物件可以建立事件處理程序來處理事件,這種以事件設計程式的方式,稱為「事件驅動程式設計」(Event-driven Programming)。例如:Button控制項button1觸發的Click事件,其事件處理程序如下所示:
private void button1_Click(object sender, EventArgs e)
{
... ...
}
上述事件處理程序擁有2個參數。其說明如下所示:
‧object物件:觸發事件的來源物件,也就是哪一個物件產生此事件。
‧Eventargs物件:事件物件本身,包含事件的相關資訊。
閱讀全文...
程式語言的「開發環境」(Development Environment)是一組工具程式用來幫助程式設計者建立、編譯和維護程式語言建立的應用程式。
目前大部分高階程式語言都擁有整合開發環境,稱為「IDE」(Integrated Development Environment),只需再同一個應用程式就可以編輯、編譯和執行特定語言的應用程式。
微軟的Visual Studio微軟C#語言的整合開發環境是Visual Studio,它是微軟公司開發的整合開發環境,能夠再同一套應用程式編輯、編譯、除錯和測試C#等.NET語言的應用程式。
Visual Studio 2005/2008是一套支援.NET Framework的整合開發環境,可以使用C#、Visual basic、C++和J#等語言來建立Windows、ASP.NET、主控台和Web Services等各種不同的應用程式。
Visual Studio整合開發環境
在Visual Studio 2005/2008整合開發環境建立的應用程式是在.NET Framework的CLR平台上執行,如下圖所示:
上述圖例在Windows作業系統安裝.NET Framework 2.0/3.5版後,就可以使用Visual Studio 2005/2008,以.NET語言來建立WindowsForms、ASP.NET、ADO.NET和XML應用程式。
Visual Studio 2005/2008是.NET平台的整合開發環境,提供Express版本讓初學者和學生能夠快速建立.NET應用程式。
閱讀全文...
微軟C#語言是一種支援.NET Framework平台的程式語言,它可以說是C/C++語言的進化版本,一種由微軟公司所獨立發展的物件導向程式語言。
.NET Framework的基礎.NET Framework是微軟新世代的程式開發平台,它是由CLR(Common Language Runtime)和.NET Framework類別所組成。我們可以使用.NET Framework支援的程式語言,例如C#、Visual Basic和C++等來建立.NET應用程式。
.NET Framework程式檔案在使用.NET編譯程式編譯時,並不是直接編譯成CPU的機器語言,而是一種中間程式語言稱為「MSIL」(Microsoft Intermediate Language)。等到執行程式時,CLR使用「JIT」(Just In Time)編譯程式將MSIL轉換成機器語言來執行,其架構如下圖所示:
上述圖例不論使用C#、Visual Basic或C++語言建立的原始程式碼,在編譯成MSIL後,就可以在不同Windows作業系統安裝CLR,撰寫的程式碼就可以跨平台在不同Windows作業系統上來執行。
.NET Framework類別函式庫是一個龐大的類別函式庫,只需支援.NET Framework的程式語言,都可以使用此類別函式庫的類別和方法。
微軟的C#語言
C#語言是一種簡單的程式語言,因為它刪除Java和C++語言的複雜語法和一些常造成程式設計困擾的缺點,例如:指標、含括(Include)、巨集、範本(Templates)、多重繼承和虛擬繼承等,再加上大部分語法都源於C和C++語言,也和Java語言十分相似。
C#語言也是一種非常現代化的程式語言,因為C#語言支援現代程式語言所擁有的例外處理(Exception Handling)、垃圾收集(Garbage Collection)、擴充資料型態和程式碼安全。而且C#語言是一種真正的物件導向程式語言,完全支援對策、繼承和多型的物件導向程式語言特性。
閱讀全文...
內容管理系統(Content Management System,簡稱CMS),組織和協助共同合作的內容的結果,是指用於管理及方便數字內容的系統。
內容管理系統的定義可以很狹窄,通常是指門戶或商業網站的發布和管理系統;定義也可以很寬泛,個人網站系統也可歸入其中。Wiki也是一種內容管理系統,Blog也算是一種內容管理系統。
現在流行的開源CMS系統有:
Dede CMS,免費、開源(非GPL,無版權)
HB cms,免費、開源
Joomla,免費、開源
Drupal,免費、開源
Xoops,免費、開源
Phpnuke,免費、開源
其中Xoops是一個功能強大的架站系統,而且是免費的軟體,再加上是目前全球最多人使用的網站系統,所以外掛模組眾多,你想的到都有,如常見的「新聞」、「常見問答集」、「檔案下載」、「投票機」等等種類繁多不勝枚舉。
另外Joomla!可以在Linux、Windows、MacOSX等各種不同的平台上執行。目前是由Open Source Matters (www.opensourcematters.org)這個開放源碼組織進行開發與支援,這個組織的成員來自全世界各地,小組成員約有150人,包含了開發者、設計者、系統管理者、文件撰寫者,以及超過9萬名(2007.3)的參與會員 。
以上兩者都是使用PHP程式語言加上MySQL資料庫所開發的軟體系統。
閱讀全文...
Hibernate 是「物件/關係對應」(Object/Relational Mapping)的解決方案,簡寫為 ORM,簡單的說就是將 Java 中的物件與物件關係,映射至關聯式資料庫中的表格與表格之間的關係, Hibernate 提供了這個過程中自動對應轉換的方案。
2001 年未 Hibernate 第一個版本發表,2003年6月8日 Hibernate 2 發表,並於年未獲得 Jolt 2004 大獎,後被 JBOSS 收納而成為其子項目之一,2005年3月 Hibernate 3 正式發表,當中有了一些重大的改變,這份文件將以之前 Hibernate 2 時撰寫的文件為基礎,針對 Hibernate 3 作重新整理的動作,所使用的版本為 Hibernate 3.2。
在撰寫 Hibernate 程式的過程中,我們可以粗分四大步驟(1~4) 與二大檔案(5、6),依序是 :
1. Configuration:
1.1. 透過 Configuration File (hibernate.cfg.xml) 設定與 Database 連線的方式與設定要匯入哪些 Mapping File。
1.2 (JavaEE 環境) 透過 JNDI Service 來註冊 org.hibernate.SessionFactory 成為 Global 物件。
1.3 (JavaEE 環境) 設定 AP Server 所提供的 Transaction 的功能。
1.4. 透過 org.hibernate.cfg.Configuration 的 configure() mathod 來讀取 Configuration File。
1.5 透過 org.hibernate.cfg.Configuration 的 buildSessionFactory() 來產生 下一步驟要用到的 org.hibernate.SessionFactory 。
2. SessionFactory:
2.1 一個 org.hibernate.SessionFactory 只對應到一個 Database
2.2 必須在程式要使用之前就必須建立好 SessionFactory,因為需要一點時間才能建立,所以最好是在網站或程式初始化時就去建立,至少必須在程式開始接觸 Database 之前就要建立。
2.3 必須放在所有程式都可以取用到地方 ( 有 JNDI 就註冊到 JNDI 中, 如果沒有 JNDI, 且是Web Apps, 也可以註冊在 ServletContext)。
2.4 org.hibernate.SessionFactory 會 catch 執行 Hibernate 所產生的 SQL statement 和 Database 的 metadata。
2.5 org.hibernate.SessionFactory 是 thread-safe 物件,會自己處理 multi-thread。
2.6 透過 org.hibernate.SessionFactory 的 openSession() 或是 getSession() 來 產生/取得 下一步驟要用到的 org.hibernate.Session。
3. Session:
3.1 org.hibernate.Session 包含了 JDBC 的 Connection object。
3.2 所以可以視為 Hibernate 與 Database 之間溝通的橋樑、過程。
3.3 org.hibernate.Session 可以提供 org.hibernate.Transaction object
3.4 所以存取 Persistent Class 都需要透過 org.hibernate.Session 。
4. Transaction:
4.1 org.hibernate.Transaction 將真正在底層執行 Transaction service包裝起來,
在 J2EE 中使用 JTA 的 UserTransaction 服務多個 Database (ex: 轉帳);或利用 J2SE 中 JDBC 的 Transaction 來服務一個 Databae。
4.2 在 Hibernate 3.x 中,存取 Persistent Class 的動作一定要包在 org.hibernate.Transaction 的可視範圍之中。
例如:Transaction transaction = session.beginTransaction();
存取 Persistent Class ...
......
transaction.commit();
5. Persistance Class:
5.1 最好是 JavaBeans 的架構。
5.2 使用 Hibernate 來處理的 Table 一定要有 primary key,且對應到 Java Class 中的 欄位與 setter,為了避免誤改,所以都應該宣告為 private 屬性。primary key 是獨一無二的 id,所以在選定時最好避免與目前專案相關性太高的欄位,應儘量使用流水號。
5.3 不要使用 final。Hibernte 會自動為每個 Persistent Class 產生各自的 proxy,但 proxy 會繼承 Persistent Class,所以一旦設為 final,將會限制 proxy 所提供的功能。
5.4 要小心處理 Persistent Class 的三種狀態:
transient : 尚未跟 Persistent Context 接觸。( 與 Session 沒有關係的狀態 )
persistent : 正在跟 Persistent Context 接觸。
detached : 以前曾經跟 Persistent Context 接觸,但現在分開了。
6. Hibernate Mapping File:
6.1 每一個 Persistent Class 都會有自己的 Mapping File,以維護 Table 與 Persistent Class 的對應關係。
6.2 Mapping File 的副檔名為 .hbm.xml。
6.3 Mapping File 的存放位置必須跟所對應的 Persistent Class 的目錄相同。
6.4 在使用 Mapping File 之前必須註冊到 Configuration file 中,通常使用靜態的方法,直接寫入 hibernate.cfg.xml 中。
閱讀全文...
JSP 2.0最重要的變革之一,便是將Expression Language(以下簡稱EL)整合進JSP標準規格,EL並非全新的語言,最早出現於JSTL 1.0當中,被用來簡化資料存取的相關作業。
由於EL已是JSP的標準,因此你可以選擇直接在JSP網頁當中使用EL替代Java進行資料的存取操作。
EL有其專屬的一套語法,包含了兩項基本要素:變數與運算子。變數用來儲存各種型態的資料,運算子則是資料運算符號。儘管EL是為了特定目的而發展出來的一個特殊語法,然而相較於其他的程式語言的變數與運算子,它們的意義是相同的。對於EL而言,變數是一個儲存了特定資料的符號,EL可以直接對其作存取,或是結合運算子進行必要的運算之後作輸出。
EL另外還有一組內建的預先定義隱含物件(implict variables),它們以Java集合物件的型態出現,其中儲存了網頁的各種資訊,包含session、cookie以及網頁傳輸過程當中所使用的參數值。EL的語法相當簡潔,為了與其他的網頁元素作區隔,EL必須以一個金錢表示符號加上左大括弧${開始,並且以右大括弧}作結束。
閱讀全文...
網際網路的普及讓我們對於新技術與新資訊的取得比起以往更為快速,甚至,目前還有研究透過網路搜尋引擎來進行病歷的判斷等,電子郵件與網頁服務是網際網路快速成長的兩大應用推手,一個是讓我們節省了許多書信往返的時間便可以即時和遠方的朋友或是客戶進行聯繫,一個是讓我們可以將訊息快速的散播到世界各地去。而Apache網頁伺服器是目前最受歡迎的網頁伺服器之一,他有著低成本與高穩定的特性讓許多網管人員都十分的喜愛。
透過openSUSE Linux 11中的YaST控制中心來組態網頁伺服器,是一件十分輕鬆的工作。點選[電腦]->[YaST]->[網路服務]->[HTTP伺服器]來啟動[HTTP伺服器]模組。
步驟一:
先選擇那些網路設備介面要提供網頁伺服器的服務,預設系統會將所有的網路設備介面勾選,並以80埠作為主要的服務埠號。
步驟二:
接著可以針對HTTP伺服器欲支援的額外模組進行設定,預設在組態精靈介面中僅提供四種模組共讀者選擇,其它的模組可以於完成精靈組態程式後再進行設定:
1.啟用PHP5程序檔支援:開啟HTTP伺服器支援執行透過PHP5所撰寫的檔案。
2.啟用Perl程序檔支援:開啟HTTP伺服器支援執行透過Perl所撰寫的檔案。
3.啟用Python程序檔支援:開啟HTTP伺服器支援執行透過Python所撰寫的檔案。
4.啟用Ruby程序檔支援:開啟HTTP伺服器支援執行透過Ruby所撰寫的檔案。
步驟三:
接著,HTTP伺服器組態精靈將會建立一個預設主機組態檔。
步驟四:
剛才所產生的基本功能組態檔案,對於目前的操作過程中已經足夠我們使用了,在第四步驟中將會進入虛擬主機的建置畫面。
步驟五:
HTTP伺服器組態精靈會將剛才的設定再進行條列檢視,記得將HTTP伺服器設定於每次啟動主機時一併啟動。確認無誤後請點選[完成]來結束HTTP伺服器的基本組態。
閱讀全文...
基本上一個電子郵件的傳遞需要透過幾個必要的元件程式才能夠完成,包含:
郵件使用者代理程式(Mail User Agent,MUA) - 意指一種可以供使用者撰寫郵件、回覆郵件、讀取郵件與處理郵件的程式。通常於Linux作業系統上會提供兩種型態的MUA程式,分別為:
圖形介面的MUA,例如:Thunderbird等。
命令列型態的MUA,例如:透過Linux作業系統內的指令工具來完成郵件的處理工作,例如:/usr/bin/mutt或是/usr/bin/mail。
郵件傳輸代理程式(Mail Transfer Agent,MTA) - 則是一種專門用來傳遞郵件的程式,就像傳統郵電傳遞中的郵局角色一樣負責郵件的傳遞。通常在單一台電子郵件伺服器上僅可以使用一種MTA程式,MTA程式在收到電子郵件時,會先讀取郵件中收件者的欄位資訊,並且確定收件者的位址是否存在。然後再透過通訊埠與收件者的郵件伺服器進行連線,如果這個連線可以建立時,則會透過簡易電子郵件傳輸通訊協定(Simple Mail Transfer Protocol,SMTP)將郵件傳遞到收件者的MTA。
郵件傳遞代理程式(Mail Delivery Agent,MDA) - 便是將從MTA收到的郵件,將這些郵件依據使用者名稱來識別放置於每個使用者的郵件信箱檔案(Mailbox)中。或者是透過MDA再將郵件傳遞到其它的MTA,除了分派郵件的功能之外,MDA程式還可以具備郵件過濾等功能。
常見電子郵件通訊協定介紹
簡易電子郵件傳輸通訊協定(Simple Mail Transfer Protocol,SMTP) - 用於傳遞電子郵件訊息時所使用的一種TCP/IP協定,使用TCP埠25作為主要的通訊埠號,透過這個傳輸協定可以讓電子郵件於MTA之間移動。雖然SMTP本身不支援非ASCII文字的傳輸,但是我們可以透過多用途網際網路郵件延伸(Multipurpose Internet mail Extension,MIME)這個通訊協定來協助處理非ASCII文字的傳輸。
郵局通訊協定第三版(Post Office Protocol Version 3,POP3) - 會在網路連線時不斷的檢查是否有新的郵件進入,並且將這些郵件儲存於伺服器上,並且使用TCP埠110作為主要的通訊埠號。另外,POP3也有提供另一個支援SSL加密的版本稱之為POP3S。
網際網路訊息存取通訊協定第四版(Internet Message Access Protocol Version 4,IMAP4) - IMAP4與POP3通訊協定都是提供用戶端存取存放於伺服器上郵件最常使用的協定之一,但是IMAP4提供更多功能來協助使用者透過協定來存取郵件。其中,這兩者間最大差異在於,POP3通訊協定會於MUA存取郵件訊息時便將郵件下載至本地端上,並且刪除伺服器端上儲存的郵件,且每次僅允許一個使用者進行存取。而IMAP4則允許電子郵件可以永久儲存於遠端伺服器上,並且可以從任何地方來讀取這些郵件,且支持多個用戶同時連接到一個郵件信箱上。
閱讀全文...
SQL Server的安全管理可分為兩階段:
驗證(Authentication):驗證使用者是否有權利登入SQL Server伺服器,使用SQL Server提供的服務。
授權(Authorization):也就是設定使用者登入後,可對伺服器做哪些動作、使用哪些資料庫、存取哪些資料表等存取權限。
登入帳戶
在SQL Server中,將用來驗證使用者身份的帳戶稱為登入(Login)。SQL Server提供兩種驗證方式:Windows驗證 - 在SQL Server中建立對應到現有Windows 2000/2003本機或網域帳戶的「登入」,當使用者已用合法的帳戶登入Windows後,要存取SQL Server時,只要他目前所用的Windows帳戶已在SQL Server中有對應的登入,SQL Server就會允許他連線。
SQL Server驗證 - 指由SQL Server自己負責驗證使用者的身份,因此使用這種驗證方式時,管理員需事先y在SQL Server中建好所需的登入及密碼,使用者在連線伺服器時,則必須輸入登入名稱及密碼。通過驗證後才能連上伺服器,使用其資源。
存取權限
在SQL Server中,可被設定存取權限給使用者的物件或動作稱為安全性實體(Securable),安全性實體的種類相當多,可概分為三個層次:
伺服器層級 - 例如登入、資料庫、連結伺服器、端點(Endpoint)等屬於整個SQL Server執行個體的安全性實體都是屬於這個層級,這類安全性實體的存取權限,也都要以登入為授與對象,而一般為方便設定,都是直接透過內建的伺服器腳色(Server Role)來設定登入對伺服器安全性實體的存取權限;當然SQL Server也允許不透過伺服器角色,而個別設定某安全性實體的存取權限。
資料庫層級 - 舉凡屬於某資料庫本身的安全性實體都屬此類,像是資料庫使用者、資料庫角色、結構描述、全文檢索目錄等,原則上,這類安全性實體都需授與給資料庫使用者。
結構描述層級 - 這類安全性實體包括資料表、檢視表、預存程序、函數等等,這個層級的存取權限自然也是以資料庫使用者為主要授與對象。
使用者
使用者(user)這個資料庫物件,就是用來設定登入帳戶對資料庫是否有存取權。由於每個資料庫所允許使用的人都不同,所以每個資料庫都有它自己的使用者物件,假設我們想使用SQL Server中所有的資料庫,那麼在每個資料庫中,都要有以我們的登入帳戶所建立的使用者物件才行。
角色
角色(role)是用來指定存取權限的資料庫物件,而且每個資料庫都有它自己的角色物件,每個角色也都有其獨立的存取權限設定。例如我們可指定某些角色只可查詢資料表資料、有些角色則可更改或刪除資料。設定好角色之後,我們只需再指定每一個使用者可以扮演哪些角色,就可讓使用者取得與角色相同的存取權限。
閱讀全文...
在網際網路上的主機通常會透過完整格式的網域名稱(Fully Qualified Domain Name,FQDN)來做為辦識主機的所在位置,而一個完整格式的網域名稱包含了兩個部份,分別為主機名稱(host name)與網域名稱(domain name)。為了確保每台主機的完整格式網域名稱不會產生重複的現象,在網域名稱系統的架構中,位於同一層的節點標籤必須是彼此相異,而我們稱這些在同一階層的節點為同輩節點(sibling node)。
在網域名稱系統中,最頂端的root節點是作為整個網域架構頂層管理,而這個樹狀階層架構中為了方便管理不同領域所使用的域名類型,因此在root節點下一層制定一個頂層網域(Top Level Domain,TLD)架構,在最早的時候,頂層網域架構共制定了七個不同的類型:
.com 商業機構或是公司行號
.edu 教育機構或是研究單位使用
.gov 美國政府的機構使用
.int 國際性組織機構使用
.mil 美國的軍事機構使用
.net 最初是給管理網路基礎設施的機構使用,自1996年開始已經開放給其它機構申請
.org 這個類別是給非商業的機構使用,於1996年後就沒有這個限制了
由於早期的發展與制定的規範都是針對美國本土所進行設計的,因此我們會發現在最初規範出來的七個頂層網域並無讓其它國家使用。為了解決這樣的設計謬誤,掌管這些域名架構的網際網路名稱與位址管理機構(International Corporation for Assigned Names and Numbers,ICANN)便將原先的七個頂層網域改稱為通用頂層網域(Generic Top Level Domain,gTLDs)。而為了因應網際網路的快速發展與調解國際網域分配的爭議,除了現存的gTLDs之外,另外也針對不同的國家與地區增加了新的網域命名空間,而這些新定義的網域命名空間以每個國家的國碼來進行定義,因此稱為國碼頂層網域(Country Code Top Level Domain,ccTLDs)。例如:台灣的國碼頂層網域為.tw,日本的國碼頂層網域為.jp等。除了這些定義之外,像近幾年來頗為熱門的.biz與.info這類的網域名稱也於2000年被新增到通用頂層網域中。除了通用頂層網域是由網際網路名稱與位址管理機構來進行管理之外,區域性的國碼頂層網域則是由該國的管理機構來負責,例如:台灣是透過財團法人台灣網路資訊中心(Taiwan Network Information Center,TWNIC)來進行處理.tw國碼頂層網域的管理。
閱讀全文...
SQL Server的資料庫可分為系統資料庫和使用者資料庫兩種,其中系統資料庫就是SQL Server自己所使用的資料庫,至於使用者資料庫就是由我們自己建立的資料庫。
系統資料庫是在SQL Server安裝好時就會被建立的,分別有master、msdb、model、tempdb這四個基本的系統資料庫,而且不能刪除這些資料庫。除此之外,還有一個隱藏的Resource資料庫,但在Management Studio中看不到它。以下簡單說明這幾個系統資料庫的用途:
master
master資料庫記錄的是有關SQL Server的資訊,包括所有的登入帳戶、系統的組態、各資料的初始資訊等各類重要資料。SQL Server 2005基於安全性的考量,已不再讓我們直接瀏覽、修改各資料庫中的系統資料表,而是必須透過系統檢視(system view)來瀏覽。我們可用"select * from sysobjects where type ='S'"來查看master資料庫中有多少隱藏起來的資料表。
由於master資料庫的內容對整個資料庫系統的關係重大,因此最好要定時備份此資料庫的內容。
msdb
msdb是另一個供系統使用的資料庫,其主要用途是供SQL Server Agent做各類排程作業(job)所用的資料庫。除了SQL Server Agent的資料外,有關備份和還原的記錄、複寫和資料維護計劃等資訊也都是放在這個資料庫中。
model
model是個較特殊的系統資料庫,或許應稱它為「樣板」資料庫。當我們在SQL Server中建立新的資料庫時,SQL Server會以model資料庫為藍本,將其內容複製到我們的新資料庫,因此在所有新建的資料庫中,都會有和model資料庫內容一樣的系統資料表和檢視表等資料庫物件。
tempdb
由名稱就可看出,tempdb是用來存放暫時性資料用的,像是使用者在進行各種查詢或排序時,SQL Server就會在此建立這些暫時性的工作資料表。由於是"暫時性"的,所以tempdb中的資料沒有什麼保存的價值,因此每次SQL Server重新啟動時,都會重建一份新的tempdb資料庫。
Resource
雖然在Management Studio中根本看不到這個資料庫,但只要用檔案總管進入SQL Server的資料庫檔資料夾(例如Program Files\Microsoft SQL Server\MSSQL.l\MSSQL\Data),就可以看到Resource資料庫的資料檔及交易記錄檔mssqlsystemresource.mdf、mssqlsystemresource.ldf,此資料庫檔還不算小,因為它存放了許多與SQL Server 2005本身相關的系統物件,使用者物件都不會存放Resource資料庫中。
SQL Server 2005採用Resource資料庫的目的之ㄧ,就是讓系統資源集中存放管理,日後將可透過升級Resource資料庫的方式,即可升級SQL Server 2005的功能。
以上簡單介紹了SQl Server中內建的系統資料庫,除了這些系統資料庫外,在每個使用者資料庫中,也會有一些系統內建的物件,其中最重要的就是系統資料表和檢視表。
閱讀全文...
JSP Standard Tag Library(簡稱JSTL),是一套預先定義好、協助程式設計人員簡化JSP網頁製作的標籤函式庫,包含了各種網頁運作所需的功能,例如迴圈、流程控制、輸出入、文字格式化,甚至XML文件處理以及資料庫存取操作均為其涵蓋範圍。
JSTL雖然是JSP網頁技術的一環,但是與JSP不同的是,JSTL本身並非由SUN公司所開發出來,相反的,SUN制定其規格之後,便直接開放讓外界進行實作,而目前提供相關規格實作成品的最主要的組織為Apache的Jakarta Project。
我們並沒有辦法直接使用JSTL,還必須先至Jakarta Project網站下載並且安裝JSTL。依其功能面作分類,JSTL提供了五種形式的標籤函式庫,列舉如下表:
閱讀全文...
在Linux作業系統中當我們執行一個程式來取得所需要的資源時,此時Linux作業系統便會為這個執行動作建立一個行程(process),以便管理整個程式執行過程中所需要的狀態應變。然而從我們啟動Linux作業系統時,系統便會開始產生很多不同的行程,而如何針對這些行程來進行管理將會是系統管理員一個十分重要的基本工作。
行程的產生代表程式已經被載入記憶體中,並且可以透過CPU來進行執行。然而每一個行程裡面都會儲存程式執行時所需要的重要資訊,包括含有執行緒(thread)位置、行程識別碼(Process ID)、行程優先權、記憶體脈絡等。依據行程的執行啟動方式的不同將其區分為兩種類別,分別為:
使用者行程(User Process):這類型的行程於啟動時通常是由使用者於終端機介面或是圖形介面來啟用。
Daemon行程(Daemon Process):這類型的行程通常無法透過終端機或是圖形化介面中來啟動,它通常需要搭配其它的程式或是行程的執行才可以被啟用運作,通常這類型的行程多為網路服務為主的行程。
每一個行程都會擁有一個獨立的識別碼資訊,我們稱之為行程識別碼,行程間基本上也是透過這組識別碼資訊來辦別雙方的關係。通常我們可以依據行程間的關係利用下列名詞來進行解釋:
子行程(Child Process):由其它行程所產生出來的行程,稱之為子行程。
父行程(Parent Process):為行程的一個名稱,通常可以產生一個或是多個以上的子行程。
父行程識別碼(Parent Process ID,PPID):用來表示某一行程的父行程的行程識別碼資訊。
服務
在Linux作業系統中通常我們可以依據服務的功能,將其區分為系統服務(System Service)與網路服務(Network Service)兩個類別。
系統服務:針對Linux作業系統本身所提供的服務,例如boot.quota、quotad等。
網路服務:針對網路中的其他用戶端所提供的服務,例如APACHE、SAMBA伺服器等。
Linux作業系統中所提供的服務通常會在啟動後就會持續的提供服務給所需要的對象,不論是針對Linux作業系統本身或是針對網路中的其他用戶端,一般我們針對這些服務的分類以執行的功能差異來進行區分之外,通常也會依據服務的啟動方式不同而再把這些服務進行不同的分類。通常會區分為:
獨立式服務:一般又稱之為SysV服務,執行於背景,除非被管理者將服務終止,或是系統關閉,否則服務會一直持續於背景提供服務。
短暫式服務:平時不會啟動於背景中等待存取要求,而是當使用者有所需求時才會啟動提供服務進行存取。
閱讀全文...
由於Internet的快速發展,網際網路上的應用服務也跟著日新月異,從以往最初的資訊流通共享,時至今日,各式各樣更多的需求和服務為消費者及開發廠商提供更多選擇和機會。如今,單純的網頁早已不敷使用,使用者需要更個人化、更多元化的「服務」。Java因為具跨平台能力,其共通性讓更多開發者投入它的懷抱,也不斷發展出更多應用,而其觸角也理所當然伸向網際網路領域。在1997年所提出的Servlet產生了網路服務的另一波新革命,結合了使用者直接接觸的JSP和後端連結資料庫的JDBC應用,Java相關應用在網路服務上創造了難以想像的衝擊和便利。Struts的目的便是要結合這些功能強大的元件,架構出一個兼具功能性及開發便利性的框架。
MVC Model
要想理解Struts的架構,必須先了解何謂MVC model(Model 2)。
字面上來說,MVC所代表的分別是Model、View以及Controller。這是一種將設計工作分層處理的概念,我們可以將一項網路服務的流程區隔為三個部分,每個部分由個別元件處理,只要製訂好各元件間如何聯絡的合作方法,就可以讓一個大型服務切割成數個較簡單的工作。
MVC-model將會有三個不同的元件,也就是模型元件(Model_Component)、視圖元件(View_Component)和控制器元件(Controller_Component)等,模型元件負責商業邏輯(Business_Logic),視圖元件作為使用者介面,負責服務主體中和使用者的互動,而控制器元件則是接收使用者發出的需求,介接到相對應的商業邏輯,並取得結果後回應使用者,負責前二者的連結。如同一所大公司一樣,將工作區分做到專業化,讓開發人員各司其職,分別做好三個部分的設計,也讓一個大型服務開發過程能夠變得更加明確而清晰。MVC架構起始於一個GUI(Graphocal_user_interface_design_patter,圖型使用者介面設計原型)原型,早期是使用在Smalltalk這個語言,而今隨著網路服務的快速發展,MVC架構已經成為一個流行且成功的網路服務設計方法。
閱讀全文...
電腦科技日益進步,但經過數十年的發展,電腦軟硬體的穩定性仍未達多數人能滿意的水準,電腦中的資料還是有喪失或毀損的情況發生,若再加上天災人禍等意外狀況,存於電腦中的資料實在是不太安全了。就算使用的是具有容錯能力的RAID磁碟陣列,也是難以保證資料庫是百分之百的安全。
雖然電腦軟硬體設備的費用可能不便宜,但大多數的人都認同經過長時間所累積的電腦資料才是更珍貴的資產,因此為了防止在各種意外發生時,仍能保有資料庫的完整性,管理者就必需花額外的時間和資源來備份SQL Server中的資料庫。SQL Server本身當然也提供了不少備份的功能:
資料庫備份
也就是備份整個資料庫內容。如果要將SQL Server中所有資料庫都備份下來,可能需要相當龐大的儲存空間來存放備份資料。但其好處是在還原資料庫時,也只需將整個資料庫從一份資料庫備份還原到SQL Server就可以了。另外,就算要是使用下述的差異式備份或交易紀錄備份,也必須是在做過完整的資料庫備份後才能進行。
差異式(Differential)備份
只備份從上一次執行完整資料庫備份後有更動過的資料,因此所需的備份時間和儲存空間,通常會比資料庫備份少很多,所以適合還原,然後再用最近一次所做的差異式備份還原到SQL Server,就可讀資料庫的內容回復到最近一次差異式備份時的同樣內容。
交易記錄(Transaction Log)備份
只備份交易記錄檔的內容,由於交易記錄檔只會紀錄我們在前一次資料庫備份或交易記錄備份之後,對資料庫所做的異動過程,也就是只記錄某一段時間的資料庫異動情形,因此在做交易記錄備份之前,一定需做過一次完整的資料庫備份才行。交易記錄備份所需的時間和儲存空間應該不多,不過在做還原時,除了要先將資料庫備份還原外,還需再依序還原各個交易記錄備份中的內容。
檔案及檔案群組備份
如果資料庫的內容分散存於多個檔案或檔案群組,而且資料庫已非常龐大,大到進行一次完整的資料庫備份會有時間和儲存空間上的問題,就可使用這種方式來備份資料庫中部分檔案或檔案群組。由於每次只備份部分的檔案或檔案群組,因此需做數次不同的備份才能完成整個資料庫的備份,但資料庫大到不方便做完整備份時也只好如此。而且檔案及檔案群組備份也也另一個好處,就是當損毀的資料只是資料庫中的某個檔案或檔案群組時,也只要還原毀損的檔案或檔案群組備份就可以了,比起只有整個資料庫的備份時,要還原整個資料庫方便許多。
由於資料庫的備份有多種不同的方法,很自然地,還原資料庫時也需依照當初備份資料庫的方式,及還原作業的時間點,以對應的步驟將備份下來的資料還原到伺服器中,以使資料庫的內容能回復到您所希望的時間點(通常是越接近資料庫出問題的時間越好)。以下介紹各種備份的還原方式:
資料庫備份的還原
不管之前只進行完整的資料庫備份,或是資料庫備份、差異式、和交易記錄備份交錯使用,遇到需要還原資料庫時,都需先還原完整的資料庫備份。
若是只做完整的資料庫備份,只需還原最新的備份資料,就算是完成還原的工作了。但若是搭配差異式或交易記錄備份的話,則此處的還原完整的資料庫備份,應該就只是整個還原作業中的第一個動作而已,在將最近一次的資料庫備份還原到伺服器後,可能還得繼續還原後續的差異式或交易記錄備份資料。
差異式備份的還原
還原差異式備份,其步驟並不複雜,只需先還原最近一次的完整資料庫備份,然後再還原最近一次差異式備份即可。例如採取每週六做一次資料庫備份,每天清晨做一次差異式備份者,在星期三遇到要做還原的情況時,需先還原上週六的資料庫備份,然後再還原當天清晨所做的差異式備份,即可完成整個還原的工作。
如果在做完這兩個還原動作後,您還有後續的交易記錄備份,則可再取出這些備份資料,依序以稍後介紹的方法將它們還原。
交易記錄備份的還原
還原交易記錄備份會比較麻煩,但由於通常我們都會以較頻繁的頻率進行交易記錄備份,所以使用交易記錄備份時,也意味著我們能將資料庫的內容回復到較接近目前的狀態。
閱讀全文...
電子商務(Electronic Commerce,EC),即利用資訊網路進行的商務活動,例如電子報(ET-Today)、網路書店(Amazon)、網路花店、網路銀行、網路下單、網路電視、虛擬商店、網路人力仲介(104)…等等。
常見的電子商務模式
B2B(Business to Business):企業對企業間的往來關係,透過電腦網路來進行,以加速企業間資訊的流通。例如:文件傳遞、商品採購、收付帳款、資金移轉、等等…
B2C(Business to Consumer):企業與顧客間的往來,也是透過電腦網路來進行。例如:Amazon網路書店,可瀏覽商品、訂購商品、以及付款等活動 。
C2B(Consumer to Business):顧客對企業,消費者因為彼此共同的需求而形成社群,然後透過社群運作,對廠商進行集體議價。
C2C (Consumer to Consumer):顧客對顧客,網站經營者提供一個交易環境、交易資訊、公平的信用評等制度,讓買賣雙方有機會互相接觸各取所需。例如:露天市集、Yahoo!拍賣。
B2 (Business to Government):企業與政府之間的電子商務交易,例如政府採購案,承包商可在線上競標、發展及傳遞產品等。
G2C (Government to Consumer):政府的線上交易對象,擴展到對一般民眾的G2C,如繳交稅金、停車場帳單或註冊車輛等,可透過網路進行。 (監理站)
一般商業活動分為四個層面
商流:商品購買交易活動,如:接受訂單、購買、售後服務等。
物流:指商品的配送。
金流:指資金移轉的過程,包括付款、與金融機構連線、信用查詢、付款指示明細、進帳通知明細等。
資訊流:包括商品資訊、行銷活動等。
電子商務活動
商流和資訊流,是一般電子商務活動數位化最為成熟的部分。例如:可以連上電子商務網站,瀏覽各種商品(資訊流),接著將所要商品放入訂購車中,然後結帳(商流)。
付款(金流)和交貨(物流),是電子商務活動最重要的部分,仍然有改進的空間。
建立一套安全完善的付款機制,以及便捷快速的物流系統,將是電子商務成功的關鍵因素。
電子商務的商品種類實體商品:在網路上販賣實體化的商品,例如:電腦與週邊硬體、電腦軟體、圖書、鮮花…
資訊與媒體商品:最適合在網路上行銷的商品,莫過於數位化商品,例如:電子報、電子書、影音資料、圖片、研究報告、資料庫檢索…等等。
線上服務:使用網路提供線上服務的商品,例如:金融服務、股市行情分析、醫藥查詢、訂票、飯店訂房、醫院掛號 。
電子商務的付款方式
發展電子商務的重要層面之一:「金流」。
現行的電子商務活動,通常會提供多種付款方式:
包括信用卡付款
ATM轉帳
郵政劃撥付款
銀行匯款付款
現金付款等方式
閱讀全文...
SEO(Search engine optimization,搜尋引擎最佳化),經過SEO的網頁可以在搜尋引擎中自然獲得極佳的名次,被點選的機率必然大增,業務量及訪客也將大幅的增加。
當在Yahoo以及Google搜尋引擎打上要搜尋的關鍵字時,搜尋引擎就會在第一頁當中列出大約十個的搜尋結果,以及在上方及右邊剩餘空間內打上付費的網路行銷廣告。
以下列出SEO的變項,如果能一一的加以最佳化,必定能夠大幅提升您網站針對某個關鍵字的排名:
網頁內容出現關鍵字
在實際執行最佳化的時候要注意,關鍵字出現的次數確實會影響排名的順序,整個網頁出現的關鍵字次數愈多者的排名有高過低者的趨勢,但要注意關鍵字出現以自然語文的頻率為佳。若過度人造關鍵字的插入,有可能被歸類為作弊。
網頁標頭(HEAD)內出現關鍵字
網頁的原始碼中最前的一段就是HEAD,其中有多個項目內可以出現想要SEO攻略的關鍵字。我們直接列出原始碼供您抄襲,是您最佳化成功最快速的好工具。
html
head
title SEO - 搜尋引擎SEO排名不能說的秘密 /title
meta name="description" content="SEO"
meta name="keywords" content="SEO"
上面的title是網頁的標題,這裡一定要出現您的關鍵字。
上面的meta name="description".. 是網頁的說明,這裡一定要出現您的關鍵字。
上面的meta name="keywords".. 是網頁的關鍵字宣告,這裡一定要出現您的關鍵字,可以用,分隔多個關鍵字。
這三個項目還有一個奧秘的可能性,凡是做字串的比對,我們要知道,在句子的一開頭就比對正確,那通常是高相關性,因此例如在title當中,我們建議把您要最佳化的關鍵字放在最先頭
網頁的語言宣告
您的網路生意的市場在哪裡?台灣還是大陸?在台灣,你就要用繁體中文的網頁,在大陸你就要用簡體中文的網頁,一個繁體中文的網頁還是一個簡體中文的網頁擺在你面前,你大概也可看得出來,但你要知道,搜尋引擎的索引程式 (Spider) 只不過是一支人寫的程式,他是看不懂你在寫什麼語言的,因此你的網頁到底是什麼語言,這是非常重要的一件事情,一定要告訴搜尋引擎知道,這是搜尋引擎SEO常被人忽略的一塊。
如果搜尋引擎誤判你的網頁語言,將會有很嚴重的後果,例如你的網頁是繁體中文但被誤判為別的語言,當繁體中文用戶的搜尋要求被處理的時候。您的網頁將會被降低優先權,因為語言不合。
因此若要SEO我們絕對不能讓搜尋引擎來”猜”我們的網頁語言是什麼,我們一定要明確的告訴搜尋引擎這個網頁使用的語言為何,以下是宣告網頁語言的原始碼。您可直接抄襲來使用。
html
head
meta http-equiv="Content-Type" content="text/html; charset=big5"
/head
charset的部分為big5表示為繁體中文,gb2312為簡體中文,utf8為萬國語言。這邊又來了一個重點,許多人說認為big5是一種不良的編碼方式,因此在設計網頁的時候喜歡用utf8萬國語言,這是對搜尋引擎SEO極為不利的一種做法,因為萬一搜尋引擎判斷不出你的網頁主要語言是什麼的時候,你就別想在該種語言的搜尋結果內出現了。
網頁原始碼的HTML標籤 - 與搜尋引擎SEO具有關聯性
仔細檢視HTML原始碼其中幾個與SEO相關的:
1. HEADINGS: 這是所謂的標頭,就好像報紙頭版的標題,這裡出現關鍵字絕對與提升你的關鍵字相關度。原理就是通常人們再撰寫文章的時候會以這個段落的主題為標題,因此這個段落的文字自然語該標題呈現相關狀態。
範例:
SEO
SEO
2. PARAGRAPH: 這是所謂的段落,段落在原始HTML的設計當中就是用來包括文章段落用的。因此我們在設計網頁的時候要千萬注意別亂用 P 於沒有語意的地方,有些時候你的網頁原始碼從上面算起好幾千個字元了都還沒出現具有語意的文章,那搜尋引擎又要如何判斷哪些文字具有語意呢,就是靠 P。
範例:
SEO is good
3. 粗體字及斜體字,為您的關鍵字加上一兩個粗體或斜體也能增加一點與關鍵字的關聯性,不過應該也只能增加一點點。
網域名稱Domain Name - 搜尋引擎優化的捷徑
網域名稱對於關鍵字搜尋的排名具有相當大的優勢,原因是通常網域名稱與該網站內容呈現高度的相關性,例如www.ibm.com就是IBM公司的官方網站。網域名稱具有獨一無二的特性,一旦被某人搶先使用就沒有第二個人能使用。幾乎所有的商業組織公司行號都早已把自己公司的商標搶先註冊起來,在搜尋引擎搜尋該商標名稱也通常會找到正確的該公司網站。這是一種自然而然的情形,一個公司一定會盡力把自己的公司商標的網址搶下來,這也是Goodgle與Yahoo能大膽的提高網域名稱與關鍵字比對的相關性的原因。
如果要SEO的關鍵字是英文的,那能夠取得一個SEO的捷徑!趕緊去申請一個帶有你的關鍵字的網域名稱吧!甚至若是真的找不到,在關鍵字前後加一個字也算數,例如ibooks.com.tw,但是這就不算百分之一百吻合了。
另外,還有一個跟網域相關的變項存在,但目前尚無關查到其與SEO的關聯性,在此提供參考,就是網域的whois資訊,因為whois資訊中,是實上是有登記該網址位於哪一個國家或地區中,因此有助於搜尋引擎判斷該網頁的地理位置。有些人網站明明就放在台灣,但whois資訊確寫著美國,也許有一天這個變項納入了,也會影響到網站於該區域的排名喔。
網頁檔案存放目錄(資料夾)及檔案名稱
理論基礎就是一般人資料夾分類的方式本來就是表示這個資料夾下的文件具有該資料夾名稱的共通性,而檔案名稱的命名方式更是直接了當的表示了這份文件的內容屬性。
因此如果你要SEO的關鍵字是英文的,那就很簡單,如果你要最佳化SEO這個字,那就把這個檔案的URL訂為:
http://www.seo.com/seo/seo.html
但是很抱歉,目前Google與Yahoo也似乎只承認英文關鍵字的部分,中文的關鍵字要用這種方法,也許也是要等到將來。
網站主機的地理位置 - 一個與內容無關卻搜尋引擎排名的重要因素
稍微好奇一點的網友就會發現,當你打上www.google.com與www.google.com.tw的時候出現的是兩套東西,一套是針對全世界(美國為主)的google,而另一套是針對台灣地區用戶的google,在台灣的google與美國的google搜尋同樣的關鍵字,出來的搜尋引擎排名結果是完全不一樣的。
基本上,在美國google(全球搜尋引擎排名)搜尋的結果具有以下特性,英文的網頁被提高了優先出現的機會,網站放置在美國的虛擬主機的網頁具有更高的優先性。
在台灣的google搜尋的結果具有以下特性,中文(繁體)的網頁最優先出來,且網站主機放置在台灣的IP者提高了優先度,甚至還有一種選項”台灣的網頁”完全提升了台灣IP的優先性。
因此這邊提供一個很簡單的原則,如果你要在台灣做生意,千萬別貪便宜跑去美國租GoDaddy,如果你要做德國的外銷生意,就請到德國租一個虛擬主機。最好的方法就是自己架站!保證在你當地經營,不然用到什麼國內的虛擬主機廠商,但實際上機房在美國,那就慘了。
真實的時光機器 - 搜尋引擎
人有分男女老少,網頁也有分新舊,到底是新的網頁好還是舊的網頁好,這個實際上除了用人工,很難去判斷,但是單純以資訊的角度來說,新的常常比舊的好,試想當您在搜尋一組關鍵字的時候,您希望是找到最新的網頁資訊,還是八年前,八年沒更新過的網頁資訊呢?
因此網頁的最後修改日期,也有可能成為搜尋引擎排名的關鍵因素之一,聰明的站長們,要記得時時更新您的網頁喔,就算不更新,最少也要動個日期,隨便加幾個字更動一下內容,好讓搜尋引擎知道這個網頁又更新了。
究竟搜尋引擎是如何知道網頁的日期呢?答案很簡單,就是透過所謂的HTTP Header,Web Server回應的HTTP Header當中包括了這個網頁的最後修改日期,而這個資料通常是由Web Server在讀取該檔案的時候一併取得的。
網站的PR等級:一級好站還是無名小站(Google搜尋引擎專用)
所謂網站的等級,一般指的是google的PR值,也就是PageRank,PR值愈高,搜尋引擎排名愈容易名列前茅,只要安裝google免費提供的google toolbar軟體並授權它使用PR值資訊,就可以輕鬆的查詢你拜訪的每一個網站的PR值,就算內容完全相同的兩個網址,擁有不同的PR值,在搜尋結果呈現的時候,高PR值的網站具有優先性。
PR值最低為0,最高為10,愈高愈好,它確實影響了搜尋引擎排名的順序,提升PR值的方法眾說紛紜,但基本上有著兩個原則,一是開了愈久的網站普遍較高,二是愈多人連結及拜訪的網站PR值愈高,基本上PR值的設計不就是為了要評鑑網路上所謂重要的網站,好站嗎?因此你只要把你的網站經營好,讓他成為網路上重要的網站,那久了PR值自然就高起來了!
PR值雖然愈高愈好,但可以確定的是低PR值的網站一樣可以排在高PR值的網站前面,因此SEO的原理就是了解所有變項,針對所有變項做最佳化,必能獲得成功。
在Yahoo上並無相對應的工具可以評鑑一個網站在Yahoo中是否為重要的網站。
網頁的連入連結(Linking IN)
你的網頁上說你是”良心商店”,網友說你是”黑心商店”,那在google及yahoo的心目中你到底是良心商店還是黑心商店呢?答案就是網頁的連入連結。
所謂的連入連結就是在別人的網站中,有加入你的網站的連結時,那個連結上面帶著的關鍵字。以下是一個範例:
這裡有一間黑心商店
在這個連結當中,連結本身的文字以及title也就是說明這個連結的文字都出現了黑心商店的關鍵字,因此你的網址已經與黑心商店扯上關係了。即便你一直在你的網站上強調良心商店的關鍵字,還是沒法消掉黑心商店的關聯性。
因此正確的連入連結方式應該為
這裡有一間良心商店
另外我們常常看有人寫什麼 點我 這樣子的連結,這樣子就讓你的網頁與”點我”這兩個字扯上關係啦。因此當有機會登錄你的網址到別的網站,或是要求別人加入連到你的網站的連結的時候,一定要正確的指定連入連結的格式。才不會把你的網站關連到錯誤的關鍵字。例如你公司叫做”xx公司”主要的商品是”電磁爐”,如果你要主打電磁爐的關鍵字SEO,甚至在要求別人加入連結的時候就直接只打 電磁爐 了,這樣才有最強的SEO效果。
網頁的連出連結(Linking OUT)
所謂的連出連結,就是你自己在你網站上加入連結到別人的網站的連結,為什麼這樣的連結也能增加你網站SEO與某個關鍵字的關聯性呢進而又能提升搜尋引擎排名?其理論基礎就在於,有許多介紹形的網站,他就是介紹某種類別的東西,而在介紹的同時,他又必需增加連出的連結,然而若是輕易的增加連出連結就能增加本網站與某關鍵字的關聯性,那不是很容易做弊嗎?
搜尋引擎可不怕這個,因為他也知道如果您的網站是在做生意的,你怎麼可能會加入連結到同類型競爭對手的連結呢,這也抑制這種評量機制被做弊的可能性,這也是我們常常看到在做同類型產品比較,或是介紹的網址,常常於搜尋結果中名列前茅的原因。
但是這個連出連結要怎麼加才不會加錯?很簡單,使用google toolbar的PR功能,可以看到一個網址的相關網站,要被你連結的網站本身就一定要關連於正確的關鍵字,你在去加這個連結才有效果。
網頁關鍵字的同義字
所謂的同義字。通常發生在縮寫上面,什麼是SEO呢?上Google一查,發現原來是Search engine optimization,但是重點來了,我們看看Google搜尋的結果,我們明明只是搜尋SEO但它卻把Search engine optimization一併標示為紅字了。
影像檔案的奧秘
說明:影像檔就是像是jpeg這樣的檔案,對搜尋引擎最佳化SEO有什麼影響呢?我們假設一個網頁中如果包含了跟目前正在搜尋的關鍵字相關的影像檔,能夠增加這個網頁與該關鍵字的關聯度好了,那麼要如何讓Google搜尋引擎知道這個網頁中的圖檔與該關鍵字相關呢?以下有幾種方法,哪一種有用,哪一種重要,這我們不曉得,但聰明的人一定是全部把它標示清楚。
方法一
圖形檔名的命名: 這個再簡單不過了,一張圖片就叫做 關鍵字.jpg 例如 seo.jpg 大辣辣的放在你網頁上,這個是一定要的。
方法二
HTML標籤的ALT屬性: 這個ALT的意思就是替代文字的意思,他的原始用途是說在那些無法顯示圖片的瀏覽器當中,可以顯示出替代的文字。但後來漸漸被運用到成為圖形檔的說明文字之上。
閱讀全文...
開發JSP網頁程式的過程中,如果需要的應用程式功能已經存在其他網頁,最快的方法便是重複使用相同的程式碼,將內容複製到新的網頁,或是直接將其載入。
當應用程式的規模越來越大,複製程式碼的做法很容易就會導致程式碼維護上的困難,為了維持不同版本之間功能的完整與一致性,每次修改原始版本的程式碼,其複本的程式碼必須一併作更動,當一份程式碼同時被數十甚至數百個網頁使用的時候,你所開發的JSP網頁系統將會變成一場災難。
解決程式碼重複使用的問題有很多種方式,其中一種比較簡單的作法便是將其寫成副程式網頁,其他的程式設計人員只需引用這個網頁即可獲得相同的功能而不需重新開發,當相同的功能需要調整的時候,只需修改幅程式即可將所做的改變,直接反應到使用此副程式的所有網頁。
JSP網頁取得外部檔案,並且將其嵌入目前的網頁中,由於顯露在外的程式碼非常容易被更改,因此很快的便導致各種不同的版本產生,如下圖:
為了徹底解決程式碼重複使用的問題,同時建立強固的商業及應用程式,元件化的程式技術被發展出來,提供這一方面相關問題的最佳解決方案。
JavaBean是一種可跨平台且重複使用的Java標準元件,通常用來設計一些特定功能的小程式,簡單的說就是可在JSP網頁中執行的Java程式,我們可把JavaBean想像為功能特定且可重複使用的副程式,當應用程式需要提供相同的特定功能,只需直接引用編譯好的JavaBean元件,而不需撰寫重複的程式碼。
以上為JavaBean運作的示意圖,JavaBean經過編譯成為類別檔,它由原始程式碼產生,然後由網頁所引用,這個過程是單向的,使用JavaBean的網頁並不能修改已編譯後的類別檔,也因此可以保證所有的網頁使用的都是同一個版本,同時由於類別檔是編譯過的元件,因此非常容易被其他的應用程式所引用。
大型的JSP應用系統非常依賴JavaBean元件,它們用來封裝所有包含運算邏輯的程式碼,畫面資料的輸出與展示的部份則交由網頁程式,如此一來,當JSP網頁需要JavaBean元件的功能,只需於網頁中直接引用此元件即可,除了達到簡化JSP程式架構、程式碼重複使用的目的之外,同時提供應用程式擴充與修改更大的彈性。
閱讀全文...
在一般的區域網路中 (LAN) 如果都是 Windows 電腦,那麼使用『網路上的芳鄰』這個功能,就可以讓不同的 Windows 電腦分享彼此的檔案囉!但萬一這個 LAN 裡面有個 Linux 主機時,要怎麼讓 Linux 也加入這個 Windows 電腦當中的『網路上的芳鄰』呢?也就是說,讓 Windows 電腦可以透過『網路上的芳鄰』來存取 Linux 主機上面的檔案!呵呵!那就是 SAMBA 這個伺服器的主要目的了!SAMBA 是很有用的一個伺服器,可以讓您的 Linux 剎那間成為一個檔案伺服器 (File Server),並提供整個 LAN 裡面的 Windows 很簡單的就可以對 Linux 主機進行檔案的存取動作。不僅如此, SAMBA 也可以讓 Linux 上面的印表機成為印表機伺服器 (Printer Server) 。
在早期的網路世界當中,檔案資料在不同主機之間的傳輸大多是使用 FTP 這個好用的伺服器軟體來進行傳送。不過使用 FTP 傳輸檔案卻有個小小的問題, 那就是無法直接修改主機上面的檔案資料!也就是說,想要更改 Linux 主機上面的某個檔案時,必須要將該檔案自伺服器上下載下來後才能修改。也因此該檔案在伺服器與用戶端都會存在。這個時候,萬一如果有一天修改了某個檔案, 卻忘記將資料上傳回主機,那麼等過了一陣子之後,將如何知道那個檔案才是最新的呢?
讓檔案在兩部主機之間直接修改
既然有這樣的問題,那麼好吧,我可不可以在用戶端的機器上面直接取用 server 上面的檔案, 如果可以在用戶端直接進行 Server 端檔案的存取,那麼我在用戶端就不需要存在該檔案資料囉,也就是說, 我只要有 Server 上面的檔案資料存在就可以啦!有沒有這樣的檔案系統啊 (File System)! 很高興的是,前面我們已經提過的 Network File System, NFS 就是這樣的檔案系統之一啦!我只要在用戶端將 Server 所提供分享的目錄掛載進來, 那麼在用戶端的機器上面就可以直接取用 Server 上的檔案資料囉,而且, 該資料就像是我用戶端上面的 partition 一般,真是好用!
而除了可以讓 Unix Like 的機器互相分享檔案的 NFS 伺服器之外,在微軟 (Microsoft) 作業系統上面也有類似的檔案系統,那就是 Common Internet File System, CIFS 這個咚咚啦!CIFS 最簡單的想法就是目前常見的『網路上的芳鄰』咯! Windows 系統的電腦可以透過桌面上『網路上的芳鄰』來分享別人所提供的檔案資料哩!真是方便。 不過,NFS 僅能讓 Unix 機器溝通, CIFS 只能讓 Windows 機器溝通。傷腦筋,那麼有沒有讓 Windows 與 Unix-Like 這兩個不同的平台相互分享檔案資料的檔案系統呢?
利用封包偵測逆向工程發展的 SMB Server
在 1991 年一個名叫 Andrew Tridgwell 的大學生就有這樣的困擾,他手上有三部機器,分別是跑 DOS 的個人電腦、DEC公司的 Digital Unix 系統以及 Sun 的 Unix 系統。在當時, DEC 公司有發展出一套稱為 PATHWORKS 的軟體,這套軟體可以用來分享 DEC 的 Unix 與個人電腦的 DOS 這兩個作業系統的檔案資料,可惜讓 Tridgwell 覺得較困擾的是,Sun 的 Unix 無法藉由這個軟體來達到資料分享的目的。
這個時候 Tridgwell 就想說:『咦!既然這兩部系統可以相互溝通,沒道理 Sun 就必需這麼苦命吧?可不可以將這兩部系統的運作原理找出來,然後讓 Sun 這部機器也能夠分享檔案資料呢?』, 為了解決這樣的的問題,他老兄就自行寫了個 program 去偵測當 DOS 與 DEC 的 Unix 系統在進行資料分享傳送時所使用到的通訊協定資訊,然後將這些重要的資訊擷取下來, 並且基於上述所找到的通訊協定而開發出Server Message Block (SMB) 這個檔案系統,而就是這套 SMB 軟體就能夠讓 Unix 與 DOS 互相的分享資料囉!
SAMBA 常見的應用
分享檔案與印表機服務;
可以提供使用者登入 SAMBA 主機時的身份認證,以提供不同身份者的個別資料;
可以進行 Windows 網路上的主機名稱解析 (NetBIOS name)
可以進行裝置的分享 (例如 Zip, CDROM...)
閱讀全文...
JSP與Java Servlet皆是在伺服端執行程式,同樣也是用來設計互動式網頁上的技術,既然這二者之間有著這些共通處,那它們兩者之間又有何不同呢?
Java servlet(底下通稱為servlet)本身就是一種Java程式,主要是應用在網頁上的一種伺服端技術,與JSP有著相當密切的關係,底下就其特性與架構進行基礎的說明。
servlet的特性
servlet出現之前,程式設計人員使用一種簡稱為CGI(Common Gateway Interface)的技術設計伺服端執行的動態網頁,達到與web使用者雙向動態溝通的目的。由於CGI程式每執行一次便會產生一個新的行程(Process),一定數量的連線人數便會輕易的佔用掉Server端龐大的系統資源,快速降低系統的執行效率。
CGI另一項致命的缺陷同樣與其所產生的行程有關,由於各行程本身獨立且彼此無法溝通,導致連線過程當中,各種資訊的傳遞難以被處理。
servlet透過多執行緒機制解決行程所衍生的諸多問題,相較於行程,執行緒所耗用的資源相當輕,同時一個行程可執行多個執行緒而不會有效能上的問題,同時由於連線狀態均由同一個行程作處理,因此可以輕易的讓各階段的連線進行溝通。
servlet程式執行之前必須經過編譯,而產生的class檔案則存放在伺服端電腦的固定資料夾下,當客戶端使用者對伺服器提出請求時,則會自動執行被請求的servlet程式,最後再回應給客戶端所需的資料。
除了傳統CGI所面臨的問題,servlet另一項優勢在於由標準的Java所寫成,而Java語言的特性之一就是跨平台,也因此servlet自然的擁有跨平台的能力。只要支援servlet語言的網頁伺服器都能順利的執行servlet程式。
servlet的架構
雖然說servlet本身就是個Java程式,但它在架構上卻和Java程式有所不同。servlet程式中並沒有main()這個方法,此為它和Java程式主要的不同處。此外,設計servlet程式必須使用javax.servlet及javax.servlet.http這二個套件下的類別及介面。
下面讓我們概略地解說這兩個套件在設計伺服器端程式上的用途:
javax.servlet:在這個套件底下所定義的是一些和FTP協定無關的類別及介面,主要是用來協助servlet程式處理客戶端送來地請求或將servlet執行的結果傳給客戶端。
javax.http.servlet:這個套件則是繼承自上一個Javax.servlet套件,並增加了與HTTP協定有關的類別及介面,例如處理SMTP或HTTP協定之類別或介面。
除了上述支援servlet的專屬套件,servlet程式事實上同樣可以存取Java本身所提供的眾多類別API,這也大大的提升了servlet應用程式的強度與擴充能力,透過Java的結合,servlet可以在網頁上完成幾乎傳統應用程式才能達到的功能。
閱讀全文...
申請放置網站的空間若要架設網站,需要一部24小時不停運作的主機來放置網站檔案,為節省成本,通常我們是向有提供網站空間服務的公司(例如:中華電信、Sonet...)租用伺服器上的網站空間來放置網站。在比較時可依你網站的需求,朝下列幾個方向進行評估:
1.網站主機在國內或國外
2.網站空間的費用與容量
3.是否支援程式或資料庫
4.檔案的上傳方式
5.免費廣告的干擾
6.安全性與流量
無論申請哪一家業者的網站空間,都會附帶專屬的網站,例如"http://www.你的帳號+主機名稱.com",經常是又臭又長,很難記憶。你可以考慮向財團法人台灣網路資源中心TWNIC(http://www.twnic.net)這個機構付費購買一個正式的網址(例如http://www.flag.com.tw),再透過轉址的設定,就能讓網址和你的網站產生連結。
上傳網站
網站空間申請好以後,接着就要將電腦裡的網站上傳到Web伺服器了。Dreamweaver已經內建FTP功能,若要使用此功能,務必申請支援FTP上傳功能的網站空間(例如http://ihost.tw/),取得上傳時必須的FTP帳號、登入密碼等資訊。
定義本地與遠端網站
為了讓Dreamweaver知道檔案要上傳到哪裡,首先要讓定義好本地與遠端網站,「本地」就是我們自己的電腦,而「遠端」指的就是要上傳的電腦。
與遠端伺服器連結
設定好遠端網站之後,按下連線至遠端主機鈕,才會連結到遠端伺服器並登入。若連接失敗,請檢查帳號、密碼或FTP位址有無輸入錯誤,有時也可能是網路太慢造成連結錯誤,你可以稍等一下連結看看。
上傳整個網站
經過前面的設定後,終於可以開始上傳檔案了,由於這是我們第一次上傳,所以要將所有的檔案都上傳到遠端網站上。檔案上傳完畢後,只要在瀏覽器輸入申請的網址,就能瀏覽和測試自己的網站了。以後若要再將網站上傳到同樣的遠端主機,就不必再重新設定FTP主機位址了,只要在按一次「連線至遠端主機」鈕,就可以立即連結到遠端網站並傳輸檔案。
閱讀全文...
JSP從標籤FORM所構成的表單區塊中,取得使用者於其中特定欄位輸入的資料內容,進行的邏輯運算之後,產生符合條件需求的網頁內容,重新將結果回傳給瀏覽器,整個過程如下圖所示:
圖中左半部為瀏覽器解譯網頁的部份,右半部則是Tomcat伺服器,當使用者於提供JSP網頁的內容填入資料之後,重新回傳至Tomcat啟動資料處理網頁,其中的JSP程式碼進行資料的處理運算,同時輸出結果網頁,重新傳送至瀏覽器。
整個過程中,處理資料網頁、原始資料網頁以及結果輸出網頁,可以是同一份JSP網頁檔案或是不同的JSP檔案,端視JSP程式開發人員的設計而定。
JSP網頁透過HTML表單欄位,取得使用者輸入的資料內容,依據使用者的需求與特定運算邏輯,於同一份JSP檔案展現不同的網頁結果,達到與使用者互動的目的,因此HTML表單欄位標籤對JSP而言,相當的重要,沒有視窗物件的輔助,動態網頁的技術將成為空談。
閱讀全文...
網際網路資訊服務(Internet Onformation Services,IIS)基本上是一組以TCP/IP為主的服務所組成的,它們都在同一個系統上執行。雖然其中有些服務需要依賴他們之間的共用元件,但是整體而言,它們彼此之間的功能是相互獨立的。就像電匠針對不同的工具來應付。IIS對於不同的需求也有不同的Internet功能來負責。Windows Server 2003內附的IIS是第6版,接下來我們要開始說明IIS 6中內含的某些標準功能。
Web(HTTP)伺服器
IIS中含一個HTTP伺服器,讓你可以快速容易地將資料公佈(publish)到全球資訊網(World Wide Web,WWW)上。IIS的Web服務很容易設定,而且很可靠,另外它還支援安全性與加密功能,以保護機密資料。
你可以使用IIS的Web服務,在你自己的網域或多重網域,甚至是企業內部網路(intranet)或Internet上架一個網站,還能允許使用者穿過IIS Web伺服器,來存取在公司內電腦裡的HTML文件。
假如你曾經使用過Windows 2000 Server和IIS,應該知道Windows 2000 Server的預設安裝也會一起自動安裝IIS 5,包括幾乎所有的選用元件也都一起安裝了。不過Windows Server 2003重視安全性勝過便利性,因此Windows Server 2003預設並未安裝IIS 6;而且IIS 6的預設安裝功能只服務靜態內容,也就是說預設的服務組態設定並不處理網頁內嵌入的任何指令檔或程式碼。而支援Active Server Pages、Server Side Includes,以及FrontPage伺服器擴充功能(它可以讓用戶端使用Microsoft FrontPage來公佈和管理網站)的元件,預設並不安裝。基本上,所有可能會有安全上顧慮的東西都必須另外指定安裝或啟用才能使用。
檔案傳輸(FTP)伺服器
雖然File Transfer Protocol並不是傳送檔案的唯一方式,但是它是Internet最早也最廣泛使用的應用之一,遠在有圖形化的瀏覽器、HTTP或網站這些東西之前,就有這個通訊協定了。正由於它的歷史悠久且使用廣泛,因此幾乎任何平台都支援它,甚至是許多沒有支援HTTP的中型電腦或大型主機也是。
在IIS 6裡的FTP服務,現在多支援了個別使用者目錄的能力。這個功能是讓使用者只能存取私用的目錄,避免看到或寫入不是他自己的目錄。
網路新聞(NNTP)伺服器
Network News Transport Protocol(NNTP)有時候被稱為Usenet,由於它是根據Internet標準RFC 977,因此NNTP服務可以被用來維護IIS伺服器上的threaded交談(conversation)資料庫,就像在Internet上的Usenet群組一樣。用戶端如果有設定適當的新聞讀取程式,就可以瀏覽與參加這些交談資料庫。
雖然最近如Google Groups(http://groups.google.com)廣為宣傳Usenet,但是它還是不如HTTP那麼使用廣泛。這是很可惜的現象,因為NNTP是個很棒的跨平台通訊協定,用來管理threaded交談資料庫。希望在NNTP開始納入IIS後,會有越來越多人使用這個功能。
電子郵件服務
Microsoft是在IIS 5的時候內建了SMTP服務,不過它的功能不足以勝任企業內的電子郵件伺服器。IIS 5內建SMTP服務最主要是為了支援在IIS中的其他服務,也就是HTTP和NNTP。IIS 5內建的SMTP服務缺乏一個最重要的元件:一個POP3或IMAP服務。POP3或IMAP正是用戶端自電子郵件伺服器的信箱中擷取特定訊息所使用的方法。SMTP提供針對郵件的「儲存和轉寄」(store-and-forward)方面的服務,但是並不支援個人使用者信箱,也沒有提供擷取郵件的方法。假如你需要一個架構在Windows 2000之上的郵件伺服器,就必須另外使用包含有POP3或IMAP功能的產品,或是使用如EMWACS SMTP/POP3這一類的免費伺服器產品。
現在Windows Server 2003有內建POP3服務,它可以與SMTP服務搭配一起提供一個非常簡單但是可以運作的郵件伺服器平台。雖然在技術上它不是IIS服務的一部分,而且一定要分開安裝,但是對於一些只需要基本的電子郵件功能的企業而言,它的確提供了一個比Exchange或其他市售郵件伺服器產品更簡單(也更便宜)的解決方案。
閱讀全文...
加入FLASH動畫我們常在網頁上看到Flash動畫(副檔名為*.swf,因此也可稱為SWF動畫),檔案小且不易失真,可以說是目前最廣泛用於網頁的動畫格式。
加入Flash動畫之前的準備工作:
1.安裝Flash Player,以便用瀏覽器觀看動畫。
2.解除瀏覽器對ActiveX元件的封鎖。
3.下載與安裝Firefox相容的Flash Player。
加入Flash動畫的方法
方法1:從「插入」面板加入Flash動畫。
方法2:從「檔案」面板加入Flash動畫。
方法3:從「資源」面板加入Flash動畫。
加入FLV視訊影片
許多人會把影片放到網頁中和親友分享,然而視訊檔案的體積通常很大,常讓瀏覽者耗費時間等待下載。如果你要加入網頁的影片還不是FLV格式(副檔名為*.flv),請先透過FLV影片轉檔軟體來轉換格式。只要安裝Flash CS3以上的版本,即可使用隨附的Flash Video Encoder來轉檔,或者也可上網以"FLV Encoder"等關鍵字來搜尋及下載其它免費的FLV轉檔軟體來轉換格式。
加入背景音樂
在網頁中除了豐富的圖文內容,如果再配上好聽的音樂,會更吸引人喔!目前可運用在網頁中的音樂格式有wav、midi、au、mp3...等,不過考量到檔案的大小及瀏覽器的支援度等因素,大多採用mp3格式做為網頁的背景音樂。當我們要在網頁中瀏覽多媒體檔案,必須先在瀏覽器中安裝可播放該格式的外掛程式才能順利瀏覽。
閱讀全文...
公用程式中的 Telnet 和遠端控制程式中的 Symantec PC Anywhere,都可以讓您在遠端系統上執行程式,但是設定起來很麻煩,而且您必須在要存取的遠端系統上安裝用戶端 軟體。PsExec 是一種輕量的 Telnet 替代品,讓您能夠在其他系統上執行處理程序,並且不需要手動安裝用戶端軟體,就可以使用主控台應用程式的完整互動功能。PsExec 最強大的功能包含啟動遠端系統上的互動式命令提示,還有 IpConfig 這類的遠端啟用工具,否則無法顯示遠端系統的相關資訊。
附註:部分掃毒程式會報告一或多個工具受到 remote admin 病毒的感染。PsTools 本身並未包含任何病毒,它們只是受到病毒利用,因此才會觸發病毒通知。
安裝
只要將 PsExec 複製到可執行路徑 (c:\windows\system32),然後輸入 "psexec",就會顯示它的使用語法。
使用方法
psexec [\\computer[,computer2[,...]| @file][-u user [-p psswd]][-n s][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-][-a n,n,...] cmd [arguments]
computer
引導 PsExec 在指定的一或多部電腦上執行應用程式。如果省略電腦名稱,則 PsExec 會在本機系統執行應用程式;如果輸入電腦名稱 "\\*",則 PsExec 會在目前網域中的所有電腦執行應用程式。
@file
引導 PsExec 在指定文字檔列出的每部電腦上執行命令。
-a
以逗號隔開可以執行應用程式的處理器,其中 CPU 的最小編號是 1。例如,若要在 CPU 2 和 CPU 4 執行應用程式,請輸入:"-a 2,4"
-c
將指定的程式複製到遠端系統以便執行。如果省略這個選項,則該應用程式必須位於遠端系統的系統路徑。
-d
不等候應用程式終止。只有針對非互動式應用程式,才需使用這個選項。
-e
不載入指定的帳戶設定檔。
-f
將指定的程式複製到遠端系統 (即使檔案已經存在於遠端系統)。
-i
執行程式,讓它可以跟遠端系統上指定之工作階段的桌面互動。如果未指定工作階段,則處理程序會在主控台工作階段中執行。
-l
以限制使用者的身分執行處理程序 (卸除 Administrators 群組,而且只允許指派給 Users 群組的權限)。在 Windows Vista 中,會使用低整合性來執行處理程序。
-n
指定連線至遠端的電腦逾時 (秒)。
-p
指定選擇性使用者名稱密碼。如果省略這個動作,則會出現輸入隱藏密碼的提示。
-s
使用 System 帳戶執行遠端處理程序。
-u
指定用來登入遠端電腦的選擇性使用者名稱。
-v
當指定的檔案具有較新的版本號碼,或是比遠端系統中的版本還要新時,才複製指定的檔案。
-w
設定處理程序的工作目錄 (相對於遠端電腦)。
-x
顯示 Winlogon 桌面的 UI (僅限本機系統)。
-priority
指定 -low、-belownormal、-abovenormal、-high 或 -realtime,依不同的優先順序來執行處理程序。使用 -background,可以在 Vista 上用很少的記憶體和較低的 I/O 優先順序來執行
program
要執行的程式名稱。
arguments
要傳遞的引數 (請注意,檔案路徑必須是目標系統上的絕對路徑)。
您可以用引號括住名稱中有空格的應用程式,例如,psexec \\marklap "c:\long name\app.exe"。只有在按下 Enter 鍵時,才會將輸入傳遞給遠端系統,而輸入 Ctrl-C 則會終止遠端處理程序。
如果您省略使用者名稱,則會使用執行 PsExec 的相同帳戶來執行遠端處理程序,但是因為遠端處理程序正在進行模擬,所以它並無法存取遠端系統上的網路資源。當您指定使用者名稱時, 就會使用指定的帳戶來執行遠端處理程序,而且會存取該帳戶可以存取的任何網路資源。請注意,密碼會以純文字形式傳輸給遠端系統。
因為 PsExec 不需要使用系統管理員身分就可以執行,所以將本機系統當做目標時,可以將目前的 PsExec 版本當成 Runas 的替代品。
範例:
c:\>psexec \\140.137.215.118 -u bar -p 1234 cmd.exe
C:\>shutdown /s
閱讀全文...
網頁是由HTML所構成,但是HTML標籤的變化有限,例如開啟一個新網頁,背景一定是白色,輸入的文字都是黑色、設定超連結的文字則會變成藍色並帶有底線...等。若要做出精美的網頁,就必須依網站風格做視覺上的調整。有鑒於此,W3C協會頒布了一套CSS規則,用來擴展HTML的功能,使設計者可以更彈性地編排網頁。
CSS的全名為Cascading Style Sheets,中文稱為串接樣式表,是一種用來描述網頁外觀樣式的語法,可說是網頁設計的精隨。不僅可重新定義HTML標籤原有的樣式,還能自行定義規則並套用在HTML標籤上,讓相同的HTML標籤擁有不同的樣式效果;透過CSS豐富靈活的設定,我們就能跳脫傳統HTML的束缚,設計出更有變化的網頁。
使用Dreamweaver設計網頁的過程中,經常需要運用CSS來改變版面的視覺呈現,例如控制文字的字體、字級、顏色、粗體、底線...等;除了文字之外,其他各類網頁元素亦可用CSS來控制,像是設定邊框或背景色、決定元素的位置...等,全部交給CSS也沒問題!
閱讀全文...
簡單來說,VMWare Workstation 是一套虛擬機器軟體,它可以讓一部電腦同時執行數個作業系統,假設需要同時執行 Windows Server 和 Red Hat Linux,利用 VMWare 就不需要兩部電腦,只要利用一部電腦就能達到目的。請注意「同時執行」與「多重開機」的差異,後者只是能在開機時選擇硬碟中的某一個作業系統來執行,但還是只能執行一個作業系統。
虛擬機器(Virtual Machine)是可以模擬硬體裝置的軟體。例如 VMWare 就是一套能夠模擬 PC 硬體架構的虛擬機器。安裝了 VMWare 的電腦,便能依照使用者的操作而「產生」出虛擬機器,而使用者便能在這些 VMWare 虛擬機器,安裝其他的作業系統,因此,電腦便能同時執行數個作業系統。
在邏輯上,VMWare 虛擬機器是完整的 PC 硬體架構的電腦,但實際上,VMWare 虛擬機器上面的硬體、周邊,部分是 VMWare 自行模擬產生,部分是 VMWare 根據安裝所在的電腦硬體模擬而來的。因此,大可以將 VMWare 虛擬機器視為另一部新的電腦,將其他的作業系統安裝到這部新的電腦,也可以裝入其他相關的軟體,以執行或測試某些工作。
VMWare的網路設定技巧
VMWare 提供了相當完整的網路功能,讓 Guest 系統可以相當輕易、方便的透過網路連接 Host 系統,甚至連上外部的網路—尤其是網際網路。
虛擬網路卡
VMnet 的網路功能是透過許多虛擬網路卡所完成,包括在 Host 系統的 VMware Network Adapter VMnet1、VMware Network Adapter VMnet8,以及 Guest 系統的 AMD PCNET Family PCI Ethernet Adapter。由於虛擬機器並沒有安裝實體網路卡,但如果從 Host 系統模擬網路卡不免增加 VMWare 的複雜度(因為可能會遇到各式各樣的網路卡),因此統一虛擬機器的網路卡,是最好的作法。
請注意,每一部虛擬機器可以同時安裝數張 AMD PCNET Family PCI Ethernet Adapter 虛擬網路卡(您可以透過 Add Hardware Wizard 新增虛擬網路卡),但是上限是每部虛擬網路最多三張。雖然每部虛擬機器最多只能安裝三張虛擬網路卡,但是連接 Host 系統的虛擬網路裝置總和數量卻是無限(Windows Host 系統,Linux Host 系統則是 32 個),這是因為一部實體電腦可以同時執行數個 Guest 系統。
VMWare 的效能以及網路模擬的功能確實相當優異,可以利用一部實體電腦,便創造出同時執行數部電腦的環境,除了省下購買多部實體電腦的金錢之外,更節省放置實體電腦的空間。當然,以軟體模擬硬體的執行效能,尚不及真正硬體的效能,而且當作 Host 系統的實體電腦配備,也必須高出許多,才能讓 Guest 系統和 Host 系統有不錯的執行效能,尤其是 CPU 速度以及記憶體數量更是關鍵。但如果是要在 Guest 系統測試某些網路或應用程式的執行狀況,VMWare 也足敷使用;而且 VMWare 還有 Linux 版本,可以將 Linux 當作 Host 系統。
閱讀全文...
在編排網頁時,並不是將元素通通塞進網頁就好了,而是採用「分區置入」的方式,先分析網頁版面而大概可以劃分成幾個區塊(block),例如「標題區」、「選單區」...,然後就開啟網頁編輯軟體,建立出這些區塊。剛建立好的區塊還是空的,分別在每個空區塊填入內容後,才會產生我們理想中的緊密版面。
再劃分區塊時要注意的是,請粗略地劃分出「大」區塊就好,不要將網頁劃分得太細、太複雜,因為本階段是要規畫網頁「架構」,而不是製作網頁的「細節」。
網頁區塊劃分好以後,接著可以先為各區塊命名。在規劃的過程中你可能已經決定某區塊是標題區、某區塊是內容區...,但是為了方便後續的操作,必須使用CSS可以控制的ID名稱,因此請不要使用空格、特殊符號或中文字命名。此外,第1個字元務必使用英文字,第2個字元開始用英文或數字皆可。
以Dreamweaver編排網頁的第一步,就是要建立出我們規劃好的區塊,這裡要使用HTML中的Div標籤來完成。Div標籤看起來只是一個扁平的長條形空白方框,可別小看他哦!只要透過CSS樣式為Div標籤指定寬、高度,扁平的Div標籤就搖身一變成指定大小的空白區塊。
在設定各區塊的樣式前,首先要設定整體頁面的屬性,這樣一來假如有各區塊共通的設定,例如字型、邊框等樣式,都可以先行設定完畢。為了將樣式套用到整體頁面,我們要將CSS套用在body標籤上。當版面規劃完成後,就可以開始將各種網頁元素加入到區塊中囉!
而在實務上,我們通常會將網站中每頁共同的CSS樣式彙整再同一個CSS檔案內,再將各網頁連結到該CSS檔案(稱為外部樣式表)。這樣做的好處是,將來要修改CSS樣式定義時,只需修改一個CSS檔,不必把每個網頁都打開來修改,省時又有效率。
閱讀全文...
開始著手設計網頁時,一般流程分為四項:
1.收集資料
著手設計網站之前,總是千頭萬緒,總是很多資料都想呈現,一時之間也摸不著頭緒,建議您把所有想放的圖片、文字、甚至音樂等素材,以及曾經收集的一些喜歡的參考網站,及參考資料,分門別類整理好,它們都將是您網站的一部份,把資料收集齊全,才不至於做到了最後,才發現一堆重要資料根本沒地方擺。
2.網站規劃
資料收集後,要分門別類整理好,才不會導致之後的網頁項目複雜,瀏覽者逛半天都逛不出所以然,資料雜亂無章,讓瀏覽者想好好看都會看到頭疼,把一些相關的擺放在一起,例如「公司簡介」裡可以有一些子項目,如公司沿革、公司展望、公司地理位置、公司環境簡介。「產品介紹」裡頭就把公司要置放的產品,整理規劃成一類一類,產品再多都不至於看到眼花。這些分項跟項目,就可以稱之為網站架構,也可以做成網站地圖方便人家點選。
3.設計製作
架構規劃好後,就要思考網站希望呈現的方式。例如科技感、時尚感、舒服清爽風、還是熱情洋溢、鮮豔大膽?決定好風格,可以想一下網站的呈現手法,是只要一般簡單的靜態網頁,還是要做有Flash動畫的網站,或者是需要資料庫有後台可以更新資料的程式型網站。
程式資料庫的網站可以找個專業的程式設計師協助,或是更猛的可以買書來學學看要怎麼寫,這都是不錯的辦法。不過,據經驗來講,如果是很強大的功能或是急著要的網站,尋求專業會比自己摸索來的輕鬆而且省時。
4.網站完成以及經營維護
網站做好之後,當然不是放在自己的電腦孤芳自賞,一定是要找個空間置放,不管你找了一個免費的網頁空間,還是租了一個付費的虛擬空間,勇敢上傳,通知親朋好友上線批評指教,即使上線幫你挑挑錯字,都是不錯的。重點是,上傳之後才可以讓更多的人去參觀你做出來的網站作品。
事實上,網站的數目多到沒有一個可靠的數據,數量也會不停地成長,因為會上網的人越來越多,有網站已經不再是什麼特別的事情了,可以稱得上是基本配備。因為網站多,瀏覽者的選擇就多,所以一定要經營維護,定期更新資料,訪客才不會只來一次就再也不來,除此之外,做好網站行銷,就可以讓你的網站保持一定的收視率,像不時地注意自己網站的流量、瀏覽者的瀏覽路徑以及停留時間(這個需要安裝一些特別程式或是軟體),重點是網站跟小孩一樣,需要呵護與關心才會成長茁壯囉!
閱讀全文...
在探討資料庫安全之前,必須嘹解「資訊安全」(Information Security)所包括的範圍,或許在一般對安全的認知為資料的保密,但這僅僅是資訊安全的其中一項,以下列出資訊安全的六項基本認識。
保密性或私密性(Confidentiality):保密性或稱之為私密性,主要目的在確保資料不外洩,也就是不讓未被授權之使用者獲得該資料。
完整性或真確性(Integrity):完整性或稱為真確性,主要的目的在確保資料的完整性和原始性,也就是保證資料在傳送的過程中不被竄改。所謂的「原始性」是指資料保有資料來源的最原始狀態,不會因為傳遞過程而被他人竄改資料。
鑑別性或認證性(Authenticity):鑑別性是指鑑別使用者的真正身份,避免被他人冒用或偽裝身份而進行交易。
不可否認性(Non-repudiation):所謂的不可否認性,主要是針對使用者所進行過的任何操作(operation)和行為(action),在事後不可否認自己未曾做過這些操作和行為。
可用性(Availability):所謂的可用性是讓合法使用者,得以正常使用。
存取控制(Access Control):用以管理與控制使用者對資源的存取範圍,避免未被授權的使用者濫用資源。
對於一般的資料庫系統的使用,必須先經過身份的「鑑別性」(Authenticity)驗證,當驗證通過之後,會依據不同的存取規則訂定該使用者可存取得範圍和權限(讀取、寫入),並且必須紀錄使用者登入後的所有交易行為,可以確保該使用者在交易後不可否認自己的所有操作,也就是不可否認性(Non-repudiation),而所有進行的操作必須建構在一個安全通道(Secure Tunnel)中,也就是經過加密處理,不被竊取的通道,不被竊取的通道,以達到保密性(Confidentiality)。
閱讀全文...
JavaScript是由Netscape公司開發並隨Navigator導航者一起發佈的、介於Java與HTML之間、基於物件事件驅動的編程語言,不需要Java編譯器,而是直接運行在Web流覽器中,它的前身是Live Script。
而JScript是一種類似JavaScript的語言,這兩者的區別就相當於英國英語和美國英語的區別。
1.最開始web上只有靜態的html。
2.為了滿足更好的交互需求,netscape開發了在Navigator中使用的LiveScript語言,後改名為avaScript。
3.Microsoft發行jscript用於internet explorer。
4.最初的jscript和javascript差異過大,web程式師不得不痛苦的為兩種流覽器編寫兩種腳本。於是誕生了ECMAScript,是一種國際標準化的javascript版本。現在的主流流覽器都支持這種版本。
5.我們寫程式的時候最好寫 script language="javascript" 而不是 script language="jscript" 因為javascript是一個通用的名稱,所有流覽器都認識,而jscript只有IE認識。
6.其他語言細節上的區別,不是一兩下能說完的。不過編程時最好遵循ECMAscript標準。這樣可以保證相容性。
7.順便說一下,javascript原來叫Livescript,後來Sun的java風頭正盛的時候netscape就把名字改成javascript。
閱讀全文...
資料庫管理系統必須能保證和保障使用者進行的每一筆交易都能達到完整性,尤其是要能符合前述的單元性(Atomicity)、一致性的保留(Consistency Preservation)、獨立性(Isolation)以及永久性(Durability or Permanency)等ACID四個交易特性,若要達成此四個交易特性所需要的技術各不相同。
單元性(Atomicity):所講究的是一筆交易在開始進行之後,倘若發生任何不可預期的意外而未能完成,便要能恢復到最原始狀況,也就是「完全做完或是完全不做」(All-or-Nothing Change),要能達成這個特性就必須具備「可回復性」(Recoverability),也就是當此交易在進行之中,發生任何情形之下,此交易都必須能依據「系統日誌」(System Log)內的完整操作資訊,將所有的異動取消。
一致性的保留(Consistency Preservation):資料庫在一開始由系統分析師與客戶之間的需求分析,再藉由塑模(Modeling)的過程,產生出概念式實體關聯圖(Conceptual Entity Relationship Diagram),以及轉換成程式設計人員所看的實際實體關聯圖(Physical Entity Relationship Diagram),在此時就必須要注意到資料庫內的一致性限制(Consistency Constraint)的設計,使得使用者在異動資料時能受到完整性的限制(Integrity Constraint),讓資料庫內的資料彼此之間都能保持一致性,但因為某種情形下,可能無法藉由資料庫管理系統來限制使用者異動資料的一致性,而需藉由應用程式來檢查交易的一致性,此時必須藉由「單元性」(Atomicity)來達到多資料表更新時的一致性,或是藉由回復技術將所有異動回復到原始狀態。
獨立性(Isolation):此項特性來自於資料庫管理系統對於多個並行交易的排程,雖然多個交易並行處理,但每一個交易的執行應該不能互相影響彼此執行的結果,也就是要具備可序列化的特性,方能保證交易的執行結果是正確的,在前面已探討過數種技術來保證交易之間達到獨立性的技術,諸如「衝突可序列化性的排程技術」(Scheduling)、「兩階段鎖定協定」(Two-Phase Lock Protocol,2PL)、「時戳」(Timestamp)以及「多版本技術」(Multiversion)來保證交易的可序列化性,亦就是保證了交易之間的獨立性(Isolation),讓並行的交易在交錯執行的情形下所得的結果,彷彿序列性(Serial)的依序一一執行交易。
永久性(Durability or Permanency):一個交易成功完成之後,該筆所異動的資料應該是永久有效,不可因為任何因素導致該交易的資料所有改變,除非下一個交易硬體設備並不能永久地儲存於資料庫內。但是,資料庫管理系統所在的硬體設備並不能永久保證不損壞,而可能發生硬體損壞、停電或其他外力導致資料庫系統無法正確運作,所以要如何達到資料「永久性」(Durability or Permanency),就必須透過不同的回復技術。
由此可見,資料庫管理系統要能保持交易的ACID四個特性,回復技術是一種相當重要的議題。
閱讀全文...
交易在進行中,同一時間會有很多交易並行處理(Concurrency),也由於並行且交錯處理結果,有可能導致交易之間彼此影響的執行結果,所以採用交錯式排程的方式,並透過測試該排程是否符合可序列化的排程原則,讓該排程可以合理且具有等價序列排程的結果。在並行控制的技術,除了可以利用控制排程的「序列性」(Serializzbility)之外,還有另一種普遍被使用的鎖定協定(Lock Protocol)來達到排程的序列性,也就是達到並行控制的一種技術,其他還包括時戳(Timestamp)、多版本(Multiversion)和樂觀/悲觀(Optimistic/Pessimistic)之技術來達成並行控制之相關技術之探討。
首先要介紹何謂「鎖定協定」(Lock Protocol),一個基本鎖定協定(Lock Protocol)的操作至少有兩個,一個為「鎖定」(Lock),一個為「解除鎖定」(Unlock);例如,當一個交易要對資料項目X進行讀取或寫入操作之前,必須要使用「鎖定」操作(Lock Operation),如同將該資源鎖住後,此資源就僅會提供給這一個交易使用,其他交易的操作就不可以再同時使用該資料項目X,換言之,其他未取得此資源使用權的交易必須要「等待」,直到該資源被釋放;反之,在進行操作之後,可以將該資料項目X立即或延遲釋放讓其他交易可以順利取得該資源進行操作,此釋放動作即稱之為「解除鎖定」(Unlock),得以讓其他交易的操作能順利往下執行交易。
以類別而言,鎖定可以區分為「獨佔模式」和「分享模式」兩種類型,獨佔模式的鎖定有如「二元鎖定」(Binary Locks),分享模式則為「共享/互斥鎖定」(Shared/Exclusive Locks)或稱為「獨/寫鎖定」(Read/Write Locks)。鎖定與解除鎖定的時機,例如兩階段鎖定協定(Two-Phase Locking Protocol,2PL)。
所謂的「兩階段鎖定協定」,也就是在一個交易的進行中,不論任何的鎖定,包括讀取鎖定或寫入鎖定,都必須在第一個解除鎖定之前執行,即稱為遵循「兩階段鎖定協定」。也就是將所有的鎖定(Locks)和所有的解除鎖定(unlocks)完全分為兩階段,第一階段為鎖定階段,稱為「擴增階段」(Expanding Phase)或「成長階段」(Growing Phase),在此階段只能執行鎖定指令,不可有任何解除鎖定穿插其中;第二階段為解除鎖定階段,稱為「削滅階段」(Shrinking Phase),在此階段只能有解除鎖定指令,不可有任何的鎖定指令穿插其中。
閱讀全文...