Squid Proxy Server 2.7 for Windows 與 DNS 調校問題

首先請先到http://www.squid-cache.org/ 去了解一下,去看看這隻魷魚.

再來請到http://squid.acmeconsulting.it/download/dl-squid.html
下載這隻魷魚加以烹煮.

2.7.STABLE6 06/03/2009 Standard
Delay Pools

對了.這有兩個版本的魷魚.我用的是Standard 的. 這是在小小軟軟代號為XP極為不穩定的作業系統上使用的.雖然己經打上了傳說中的SP3 的補釘.依然沉疴難救.

下載好後.解壓縮後預設是名為squid-2.7.STABLE6-bin 的資料夾.請到該資料夾內把其中的 squid 資料夾複製到 C 磁碟機去.

再來你會看到請到squid資料夾下的etc資料夾, 分別將squid.conf.default , mime.conf.default , cachemgr.conf.default 各複製一份. 再將檔名改為 squid.conf.default , mime.conf , cachemgr.conf  .

squid安裝目錄

Squid安裝目錄

接下來要開始編修squid.conf. 請自行下載notepad++ 來編輯這個檔案. 相關的軟體下載網站在

http://notepad-plus.sourceforge.net/tw/site.htm

請注意一點.為了避免設置Squid.conf 的麻煩.建議將資料夾名稱維持 squid 並將其複製到 磁碟機 C 的根目錄接下來

要修改的也僅有 squid.conf 檔案.

底下則是我使用的快速設定的Squid.con Sample 檔案 繼續閱讀

Flex Builder 3 – Ant support

Until Flex Builder 3 Stand Alone includes Ant built in you will have to install it separately. Peter Elst wrote steps for installing it in Flex Builder 2 but in Flex Builder 3 the steps are slightly different. For those that are not familiar with Eclipse, this can be tricky to install.

The following is the revised steps for Flex Builder 3 Stand Alone.

Quoted and revised from http://www.peterelst.com/blog/2006/09/03/flex-builder-2-ant-support/:

  1. Launch Flex Builder 3
  2. Go to Help > Software Updates > Find and Install
  3. Select “Search for new features to install” and click next
  4. Select “The Eclipse Project Updates” and click finish
    Note: If you do not have the option above click New Remote Site and enter “The Eclipse Project Updates" as the name and “http://update.eclipse.org/updates/3.3″ as the url.
  5. In the Eclipse Project Updates > Eclipse 3.3.2 (3.3.3, 3.3.4, etc) node select “Eclipse Java Development Tools…” and click next
  6. Accept the license agreement and click next
  7. Click finish to start download
  8. Eclipse downloads Java Development Tools
  9. Click “Install all” to install Java Development Tools
  10. Restart the Eclipse workbench

That’s it! You now have Apache Ant support in your standalone Flex Builder 3 install.

Go to Window > Other View > Ant and Click OK. You now have the Ant view

如何在Flex Builder 3 安裝the beta Gumbo SDK

雖然FLEX 4 官方預估要到2009年第二季才會推出. 不過測試版的SDK (程式開發工具) 代號 Gumbo 的早已發佈. 有一些新的功能當然也只能透過新的SDK 搭配 FlashPlayer 10 才有法子編譯. 底下就跟大家分享如何在您的Flex Builder 3安裝the beta Gumbo SDK.

1.首先先請您到下面的網站去下載Gumbo

http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4

在上面的連結裏.您可以看到一些說明. 由於我是以假設您已經裝好了Flex builder 3 的情況下來.安裝使用這個Gumbo,所以請您下載版號為 4.0.0.4098 Open Source Flex SDK,底下是下載的連結

http://opensource.adobe.com/wiki/display/flexsdk/download?build=4.0.0.4098&pkgtype=2

下載的檔名應是 flex_sdk_4.0.0.4098_mpl.zip

下載完成後.請將它解壓縮到您想要放置的目錄,我個人是將它解壓縮到c:\flex_sdk_4.0.0.4098_mpl

Tomcat 5.0-5.5連接池配置指南

資料出處: http://java.chinaitlab.com/Tomcat/35420.html

本文以目前最流行的MySQL為例,講解通過Tomcat連接池連接MySQL數據庫的基本步驟,如果你了解MySQL可跳過第一步。

在進行Tomcat連接池配置前,先解壓縮mysql-connector-java-xxx.zip,將其中的mysql-connector-java-3.x.x-xxx.jar取出,置於\common\lib中。

接下來,讓我們一起進入精彩的Tomcat配置之旅。

一.新建用戶及數據庫

操作步驟如下:

C:\Documents and Settings\Administrator>d:

D:\>cd mysql\bin

D:\MySQL\bin>mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 51 to server version: 4.1.12a-nt

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> GRANT ALL PRIVILEGES ON jcc.* TO jcc@localhost IDENTIFIED BY ‘jsp.com.cn’
WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> USE mysql;
Database changed
mysql> SELECT Host,User,Password FROM user;
+———–+——+——————————————-+
| Host | User | Password |
+———–+——+——————————————-+
| localhost | root | *60D5B730382EC2170CA366DE181767E4C5343DE8 |
| % | jsp | *C22AB0FD8A289C7D337C9998B63B8EA8335E5F35 |
| localhost | jcc | *C22AB0FD8A289C7D337C9998B63B8EA8335E5F35 |
+———–+——+——————————————-+
3 rows in set (0.01 sec)

mysql> exit
Bye

D:\MySQL\bin>mysql -u jcc -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 57 to server version: 4.1.12a-nt

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CREATE DATABASE jcc;
Query OK, 1 row affected (0.02 sec)

mysql> USE jcc;
Database changed
mysql> CREATE TABLE user(
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(8) NOT NULL
-> );
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO user (name) VALUES (‘Corebit’);
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO user (name) VALUES (‘Ivan’);
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM user;
+—-+———+
| id | name |
+—-+———+
| 1 | Corebit |
| 2 | Ivan |
+—-+———+
2 rows in set (0.00 sec)

mysql>

二.配置Tomcat連接池

Tomcat5.0進行如下配置:

在\conf\server.xml的…之間加入以下代碼:

factory   org.apache.commons.dbcp.BasicDataSourceFactory

maxActive   100

maxIdle   30

maxWait   10000

username   jcc

password   jsp.com.cn

driverClassName    com.mysql.jdbc.Driver

url   jdbc:mysql://localhost/jcc

Tomcat5.5進行如下配置:

在\conf\server.xml的…之間加入以下代碼:

三.在/下,新建MySQL數據庫連接文件Select.jsp

Select.jsp源碼如下:

“); while(rs.next()){  out.print(rs.getString(1)+" “);  out.print(rs.getString(2)+"
“); } rs.close(); stmt.close(); conn.close();}catch(Exception e){ out.print(e);}%>

四.運行http://localhost/Select.jsp,顯示結果如下:

User-list
1 Corebit
2 Ivan

則表示數據庫連接成功!恭喜!恭喜!

否則請檢查數據庫連接器版本,出錯可能性比較高!

*註:

Tomcat連接池中,部分參數說明如下:

maxActive="100″

maxIdle="30″

maxWait="10000″

jdbc:mysql://localhost/jcc

PS:如果最大數據庫活躍連接數過大,可想而知,內存佔用量是非常驚人的!如果空閒連接數過大,則資源利用率低,連接池長期未釋放,可導致連接池結點異常。所以選好maxActive和maxIdle是連接池性能的關鍵因素,當然這取決於服務器環境。

*附:

連接池運作原理:

在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷 建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接並打開數據庫是一件既消耗資源又費時的工作,如果頻繁發生這種數據庫操作,系統的性 能必然會急劇下降,甚至會導致系統崩潰。數據庫連接池技術是解決這個問題最常用的方法,在許多應用程序服務器(例如:Weblogic, WebSphere,JBoss)中,基本都提供了這項技術,無需自己編程,但是,深入了解這項技術是非常必要的。

數據庫連接池技術的思想非常簡單,將數據庫連接作為對象存儲在一個Vector對象中,一旦數據庫連接建立後,不同的數據庫訪問請求就可以共享這些連接,這樣,通過復用這些已經建立的數據庫連接,可以克服上述缺點,極大地節省系統資源和時間。

數據庫連接池的主要操作如下:

(1)建立數據庫連接池對象(服務器啟動)。

(2)按照事先指定的參數創建初始數量的數據庫連接(即:空閒連接數)。

(3)對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閒的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的數據庫連接。

(4)存取數據庫。

(5)關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,並非真正關閉,而是將其放入空閒隊列中。如實際空閒連接數大於初始空閒連接數則釋放連接)。

(6)釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,並釋放所有連接)。

希望本文能對你使用Tomcat連接池連接MySQL數據庫有所幫助!

電腦基礎知識完全鍛造指引

過去是那麼的隱晦不明,難尋它的軌跡脈絡. 而它又卻實的存在著, 在妳學習電腦科技的旅路忽而在前忽而在後. 妳總是隱隱竀見它的身影總無法去了解也不能觸摸, 在妳心裏總是個迷, 如霧又如雲, 呃..讓我幫妳撥開重重迷霧看見藍天..

正視歷史有助於了解未來, 的確有些好書真是如逝去的藝術創作者, 一如恆春的傳奇 陳達. 已成絕嚮, 不過舊書攤會是你唯一的希望. 以下的參考書目. 如果妳找的到那幾本書. 就可以好好的鍛造妳的基礎知識, 下次再紹比較近期的著作分享給妳們

個人電腦技術(1)–入門篇
是電腦的初步認識+使用技術,是為毫無電腦背景的讀者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-009
     ISBN:957-9575-05-03
定價:295
        
個人電腦技術(2)–進階篇
是個人電腦作業系統+個人電腦技術,是為曾使用過個人電腦者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-010
     ISBN:957-9575-06-1
定價:340
個人電腦技術(3)–登堂篇
是組合語言初步+個人電腦技術,是對於DOS略具基礎者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-011
     ISBN:957-9575-07-X
定價:360
個人電腦技術(4)–入室篇
是C語言初步+個人電腦技術,是對於DOS略具基礎者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-012
     ISBN:957-9575-08-8
定價:360

呃. 別懷疑. 這是15年前的書, 是真的很好的啟蒙書藉, 也許你會想15年..墳墓的草都快比一個人高了, 這是沒錯, 但是良好的觀念並不會隨著時代的演進而有所退失它的價值, 一如黃金一般也許會氧化一點點, 但它的價值還是存在的

JavaBeans 基礎教學

JavaBeans的屬性

JavaBeans的屬性與一般Java程序中所指的屬性,或 者說與所有面向對象的程序設計語言中對象的屬性是一個概念,在程序中的具體體現就是類中的變量。在JavaBeans設計中,按照屬性的不同作用又細分為 四類:Simple, Index, Bound與Constrained屬性。1. Simple屬性

一個簡單屬性表示一個伴隨有一對get/set方法(C語言的過程或函數在Java程序中稱為"方法")的變量。屬性名與和該屬性相關的get/set 方法名對應。例如:如果有setX和getX方法,則暗指有一個名為"X"的屬性。如果有一個方法名為isX,則通常暗指"X"是一個布爾屬性(即X的值 為true或false)。例如在下面這個程序中:

public class alden1 extends Canvas {
string ourString= “Hello"; //屬性名為ourString,類型為字符串
public alden1(){     //alden1()是alden1的構造函數,與C++中構造函數的意義相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* “set"屬性*/
public void setString(String newString) {
ourString=newString;
}
/* “get"屬性 */
public String getString() {
return ourString;
}
}

2. Indexed屬性

一個Indexed屬性表示一個數組值。使用與該屬性對應的set/get方法可取得數組中的數值。該屬性也可一次設置或取得整個數組的值。例:

public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6}; // dataSet是一個indexed屬性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/* 設置整個數組 */
public void setDataSet(int[] x){
dataSet=x;
}
/* 設置數組中的單個元素值 */
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/* 取得整個數組值 */
public int[] getDataSet(){
return dataSet;
}
/* 取得數組中的指定元素值 */
public int getDataSet(int x){
return dataSet[x];
}
}

3. Bound屬性

一個Bound屬性是指當該種屬性的值發生變化時,要通知其它的對象。每次屬性值改變時,這種屬性就點火一個PropertyChange事件(在 Java程序中,事件也是一個對象)。事件中封裝了屬性名、屬性的原值、屬性變化後的新值。這種事件是傳遞到其它的Beans,至於接收事件的Beans 應做什麼動作由其自己定義。當PushButton的background屬性與Dialog的background屬性bind時,若 PushButton的background屬性發生變化時,Dialog的background屬性也發生同樣的變化。 例:

public class alden3 extends Canvas{
String ourString= “Hello";
//ourString是一個bound屬性
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
/** 註:Java是純面向對象的語言,如果要使用某種方法則必須指明是要使用哪個對象的方法,在下面的程序中要進行點火事件的操作,這種操作所使用的方法是在 PropertyChangeSupport類中的。所以上面聲明並實例化了一個changes對象,在下面將使用changes的 firePropertyChange方法來點火ourString的屬性改變事件。*/

public void setString(string newString){
String oldString = ourString;
ourString = newString;
/* ourString的屬性值已發生變化,於是接著點火屬性改變事件 */
changes.firePropertyChange(“ourString",oldString,newString);
}
public String getString(){
return ourString;
}
/** 以下代碼是為開發工具所使用的。我們不能預知alden3將與哪些其它的Beans組合成為一個應用,無法預知若alden3的ourString屬性發 生變化時有哪些其它的組件與此變化有關,因而alden3這個Beans要預留出一些接口給開發工具,開發工具使用這些接口,把其它的JavaBeans 對象與alden3掛接。*/

public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}
通過上面的代碼,開發工具調用changes的addPropertyChangeListener方法把其它JavaBeans註冊入 ourString屬性的監聽者隊列l中,l是一個Vector數組,可存儲任何Java對象。開發工具也可使用changes的 removePropertyChangeListener方法,從l中註銷指定的對象,使alden3的ourString屬性的改變不再與這個對像有 關。當然,當程序員手寫代碼編製程序時,也可直接調用這兩個方法,把其它Java對象與alden3掛接。

4. Constrained屬性

一個JavaBeans的constrained屬性,是指 當這個屬性的值要發生變化時,與這個屬性已建立了某種連接的其它Java對象可否決屬性值的改變。constrained屬性的監聽者通過拋出 PropertyVetoException來阻止該屬性值的改變。例:下面程序中的constrained屬性是PriceInCents。

public class JellyBeans extends Canvas{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport Vetos=new VetoableChangeSupport(this);
/*與前述changes相同,可使用VetoableChangeSupport對象的實例Vetos中的方法,在特定條件下來阻止PriceInCents值的改變。*/

……
public void setPriceInCents(int newPriceInCents) throws PropertyVetoException {
/*方法名中throws PropertyVetoException的作用是當有其它Java對象否決PriceInCents的改變時,
要拋出例外。*/
/* 先保存原來的屬性值*/

int oldPriceInCents=ourPriceInCents;
/**點火屬性改變否決事件*/
vetos.fireVetoableChange(“priceInCents",new Integer(OldPriceInCents),
new Integer(newPriceInCents));

/**若有其它對象否決priceInCents的改變,則程序拋出例外,不再繼續執行下面的兩條語句,方法結束。若無其它對象否決priceInCents的改變,則在下面的代碼中把ourPriceIncents賦予新值,並點火屬性改變事件*/

ourPriceInCents=newPriceInCents;
changes.firePropertyChange(“priceInCents",
new Integer(oldPriceInCents),
new Integer(newPriceInCents));
}

/**與前述changes相同,也要為PriceInCents屬性預留接口,使其它對象可註冊入PriceInCents否決改變監聽者隊列中,或把該對象從中註銷*/

public void addVetoableChangeListener(VetoableChangeListener l)
{ vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
……
}

從上面的例子中可看到,一個constrained屬性有兩種監聽者:屬性變化監聽者和否決屬性改變的監聽者。否決屬性改變的監聽者在自己的對象代碼中 有相應的控制語句,在監聽到有constrained屬性要發生變化時,在控制語句中判斷是否應否決這個屬性值的改變。

總之,某個Beans的constrained屬性值可否改變取決於其它的Beans或者是Java對像是否允許這種改變。允許與否的條件由其它的Beans或Java對像在自己的類中進行定義。

JavaBeans的事件

事件處理是JavaBeans體系結構的核心之一。通過事件處理機制,可讓一些組件作為事件源,發出可被描述環境或其它組件接收的事件。這樣,不同的組 件就可在構造工具內組合在一起,組件之間通過事件的傳遞進行通信,構成一個應用。從概念上講,事件是一種在"源對象"和"監聽者對象"之間,某種狀態發生 變化的傳遞機制。事件有許多不同的用途,例如在Windows系統中常要處理的鼠標事件、窗口邊界改變事件、鍵盤事件等。在Java和JavaBeans 中則是定義了一個一般的、可擴充的事件機制,這種機制能夠:

1.對事件類型和傳遞的模型的定義和擴充提供一個公共框架,並適合於廣泛的應用。

2.與Java語言和環境有較高的集成度。

3.事件能被描述環境捕獲和點火。

4.能使其它構造工具採取某種技術在設計時直接控制事件,以及事件源和事件監聽者之間的聯繫。

5.事件機制本身不依賴於複雜的開發工具。

特別地,還應當:

1.能夠發現指定的對象類可以生成的事件。

2.能夠發現指定的對象類可以觀察(監聽)到的事件。

3.提供一個常規的註冊機制,允許動態操縱事件源與事件監聽者之間的關係。

4.不需要其它的虛擬機和語言即可實現。

5.事件源與監聽者之間可進行高效的事件傳遞。

6.能完成JavaBeans事件模型與相關的其它組件體系結構事件模型的中立映射。

JavaBeans事件模型的主要構成有:事件從事件源到監聽者的傳遞是通過對目標監聽者對象的Java方法調用進行的。對每個明確的事件的發生,都相 應地定義一個明確的Java方法。這些方法都集中定義在事件監聽者(EventListener)接口中,這個接口要繼承 java.util.EventListener。實現了事件監聽者接口中一些或全部方法的類就是事件監聽者。 伴隨著事件的發生,相應的狀態通常都封裝在事件狀態對象中,該對象必須繼承自java.util.EventObject。事件狀態對象作為單參傳遞給應 響應該事件的監聽者方法中。 發出某種特定事件的事件源的標識是:遵從規定的設計格式為事件監聽者定義註冊方法,並接受對指定事件監聽者接口實例的引用。 有時,事件監聽者不能直接實現事件監聽者接口,或者還有其它的額外動作時,就要在一個源與其它一個或多個監聽者之間插入一個事件適配器類的實例,來建立它 們之間的聯繫。

事件狀態對象(Event State Object)

與事件發生有關的狀態信息一般都封裝在一個事件狀態對象中,這種對像是java.util.EventObject的子類。按設計習慣,這種事件狀態對象類的名應以Event結尾。例如:

public class MouseMovedExampleEvent extends java.util.EventObject

{ protected int x, y;
/* 創建一個鼠標移動事件MouseMovedExampleEvent */
MouseMovedExampleEvent(java.awt.Component source, Point location) {
super(source);
x = location.x;
y = location.y;
}
/* 獲取鼠標位置*/
public Point getLocation() {
return new Point(x, y);
}}

事件監聽者接口(EventListener Interface)與事件監聽者

由於Java事件模型是基於方法調用,因而需要一個定義並組織事件操縱方法的方式。JavaBeans中,事件操縱方法都被定義在繼承了 java.util.EventListener類的EventListener接口中,按規定,EventListener接口的命名要以 Listener結尾。任何一個類如果想操縱在EventListener接口中定義的方法都必須以實現這個接口方式進行。這個類也就是事件監聽者。例 如:

/*先定義了一個鼠標移動事件對象*/
   public class MouseMovedExampleEvent
extends java.util.EventObject {
// 在此類中包含了與鼠標移動事件有關的狀態信息

}
/*定義了鼠標移動事件的監聽者接口*/
interface MouseMovedExampleListener
extends java.util.EventListener {
/*在這個接口中定義了鼠標移動事件監聽者所應支持的方法*/
void mouseMoved(MouseMovedExampleEvent mme);
}

在接口中只定義方法名,方法的參數和返回值類型。如:上面接口中的mouseMoved方法的具體實現是在下面的ArbitraryObject類中定義的。

class ArbitraryObject implements MouseMovedExampleListener {
public void mouseMoved(MouseMovedExampleEvent mme)
{ … }

ArbitraryObject就是MouseMovedExampleEvent事件的監聽者。

事件監聽者的註冊與註銷

為了各種可能的事件監聽者把自己註冊入合適的事件源中,建立源與事件監聽者間的事件流,事件源必須為事件監聽者提供註冊和註銷的方法。在前面的bound屬性介紹中已看到了這種使用過程,在實際中,事件監聽者的註冊和註銷要使用標準的設計格式:

public void add< ListenerType>(<ListenerType> listener);
public void remove< ListenerType>(<ListenerType> listener);

例如:

首先定義了一個事件監聽者接口:

public interface
ModelChangedListener extends java.util.EventListener {
void modelChanged(EventObject e);
}

接著定義事件源類:

public abstract class Model {
private Vector listeners = new Vector(); // 定義了一個儲存事件監聽者的數組

/*上面設計格式中的< ListenerType>在此處即是下面的ModelChangedListener*/

public synchronized void addModelChangedListener(ModelChangedListener mcl)
{ listeners.addElement(mcl); } //把監聽者註冊入listeners數組中
public synchronized void removeModelChangedListener(ModelChangedListener mcl)
{ listeners.removeElement(mcl);  //把監聽者從listeners中註銷

/*以上兩個方法的前面均冠以synchronized,是因為運行在多線程環境時,可能同時有幾個對象同時要進行註冊和註銷操作,使用synchronized來確保它們之間的同步。開發工具或程序員使用這兩個方法建立源與監聽者之間的事件流*/

protected void notifyModelChanged() {
/**事件源使用本方法通知監聽者發生了modelChanged事件*/
    Vector l;
EventObject e = new EventObject(this);
/* 首先要把監聽者拷貝到l數組中,凍結EventListeners的狀態以傳遞事件。這樣來確保在事件傳遞到所有監聽者之前,已接收了事件的目標監聽者的對應方法暫不生效。*/
synchronized(this) {
l = (Vector)listeners.clone();
}
for (int i = 0; i < l.size(); i++) {
/* 依次通知註冊在監聽者隊列中的每個監聽者發生了modelChanged事件,並把事件狀態對象e作為參數傳遞給監聽者隊列中的每個監聽者*/
((ModelChangedListener)l.elementAt(i)).modelChanged(e);
}
}
}

在程序中可見事件源Model類顯式地調用了接口中的modelChanged方法,實際是把事件狀態對象e作為參數,傳遞給了監聽者類中的modelChanged方法。

適配類

適配類是Java事件模型中極其重要的一部分。在一些應用場合,事件從源到監聽者之間的傳遞要通過適配類來"轉發"。例如:當事件源發出一個事件,而有 幾個事件監聽者對象都可接收該事件,但只有指定對象做出反應時,就要在事件源與事件監聽者之間插入一個事件適配器類,由適配器類來指定事件應該是由哪些監 聽者來響應。

適配類成為了事件監聽者,事件源實際是把適配類作為監聽者註冊入監聽者隊列中,而真正的事件響應者並未在監聽者隊列中,事件響應者應做的動作由適配類決定。目前絕大多數的開發工具在生成代碼時,事件處理都是通過適配類來進行的。

JavaBeans用戶化

JavaBeans開發者可以給一個Beans添加用戶化器 (Customizer)、屬性編輯器(PropertyEditor)和BeansInfo接口來描述一個Beans的內容,Beans的使用者可在構 造環境中通過與Beans附帶在一起的這些信息來用戶化Beans的外觀和應做的動作。一個Beans不必都有BeansCustomizer、 PrpertyEditor和BeansInfo,根據實際情況,這些是可選的,當有些Beans較複雜時,就要提供這些信息,以Wizard的方式使 Beans的使用者能夠用戶化一個Beans。有些簡單的Beans可能這些信息都沒有,則構造工具可使用自帶的透視裝置,透視出Beans的內容,並把 信息顯示到標準的屬性表或事件表中供使用者用戶化Beans,前幾節提到的Beans的屬性、方法和事件名要以一定的格式命名,主要的作用就是供開發工具 對Beans進行透視。當然也是給程序員在手寫程序中使用Beans提供方便,使他能觀其名、知其意。

用戶化器接口(Customizer Interface)

當一個Beans有了自己的用戶化器時,在構造工具內就可展現出自己的屬性表。在定義用戶化器時必須要實現java.Beanss.Customizer接口。例如,下面是一個"按鈕"Beans的用戶化一器:

public class OurButtonCustomizer
extends Panel implements Customizer {
… …
/*當實現象OurButtonCustomizer這樣的常規屬性表時,一定要在其中實現addProperChangeListener
和removePropertyChangeListener,這樣,構造工具可用這些功能代碼為屬性事件添加監聽者。*/

… …
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
… …

屬性編輯器接口(PropertyEditor Interface)

一個JavaBeans可提供PropertyEditor類,為指定的屬性創建一個編輯器。這個類必須繼承自 java.Beanss.PropertyEditorSupport類。構造工具與手寫代碼的程序員不直接使用這個類,而是在下一小節的 BeansInfo中實例化並調用這個類。例:

public class MoleculeNameEditor extends java.Beanss.PropertyEditorSupport {
public String[] getTags() {
String resule[]={
“HyaluronicAcid","Benzene","buckmisterfullerine",
“cyclohexane","ethane","water"};
return resule;}
}
上例中是為Tags屬性創建了屬性編輯器,在構造工具內,可從下拉表格中選擇MoleculeName的屬性應是"HyaluronicAid"或是"water"。

BeansInfo接口

每個Beans類也可能有與之相關的BeansInfo類,在其中描述了這個Beans在構造工具內出現時的外觀。BeansInfo中可定義屬性、方法、事件,顯示它們的名稱,提供簡單的幫助說明。 例如:

public class MoleculeBeansInfo extends SimpleBeansInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
PropertyDescriptor pd=new PropertyDescriptor(“moleculeName",Molecule.class);
/*通過pd引用了上一節的MoleculeNameEditor類,取得並返回moleculeName屬性*/
pd.setPropertyEditorClass(MoleculeNameEditor.class);
PropertyDescriptor result[]={pd};
return result;
} catch(Exception ex) {
System.err.println(“MoleculeBeansInfo: unexpected exeption: “+ex);
return null;
}
}
}

JavaBeans持久化

當一個JavaBeans在構造工具內被用戶化,並與其它Beans建立連接之後,它的所有狀態都應當可被保存,下一次被load進構造工具內或在運行 時,就應當是上一次修改完的信息。為了能做到這一點,要把Beans的某些字段的信息保存下來,在定義Beans時要使它實現 java.io.Serializable接口。例如:

public class Button
implements java.io.Serializable {
}

實現了序列化接口的Beans中字段的信息將被自動保存。若不想保存某些字段的信息則可在這些字段前冠以transient或static關鍵字, transient和static變量的信息是不可被保存的。通常,一個Beans所有公開出來的屬性都應當是被保存的,也可有選擇地保存內部狀態。 Beans開發者在修改軟件時,可以添加字段,移走對其它類的引用,改變一個字段的private/protected/public狀態,這些都不影響 類的存儲結構關係。然而,當從類中刪除一個字段,改變一個變量在類體系中的位置,把某個字段改成transient/static,或原來是 transient/static,現改為別的特性時,都將引起存儲關係的變化。

JavaBeans的存儲格式

JavaBeans組件被設計出來後,一般是以擴展名為jar的Zip格式文件存儲,在jar中包含與JavaBeans有關的信息,並以 MANIFEST文件指定其中的哪些類是JavaBeans。以jar文件存儲的JavaBeans在網絡中傳送時極大地減少了數據的傳輸數量,並把 JavaBeans運行時所需要的一些資源捆綁在一起,本章主要論述了JavaBeans的一些內部特性及其常規設計方法,參考的是JavaBeans規 範1.0A版本。隨著世界各大ISV對JavaBeans越來越多的支持,規範在一些細節上還在不斷演化,但基本框架不會再有大的變動。

推薦鏈接:Java學習從入門到精通(附FAQ)

檢測網頁是否合於wc3 標準的小程式

http://design.fujitsu.com/en/universal/assistance/webinspector/

有時寫好的網頁能不能正確被符合W3C製定的規格的瀏覽器觀看,並無從得知 這個小工具是用來撿查你的網頁是否使用了符合W3C 標準的語法及撰寫規則. 若驗證不能通過也不用太意外, 有可能你學習網頁撰寫語法並不符合W3C 的標準,僅能某些瀏覽器上正確被觀看. 如果這不是你要的結果, 那麼就試著去修改它吧

WebInspector


WebInspector 5.0

WebInspector(ウェブインスペクター)は、ウェブサイトが高齢者や視覚に障害のある方にも読みやすいかを診断するソフトウェアです。

WebInspector English Page


無償で今すぐダウンロードしてお使いいただけます

WebInspector今すぐダウンード

WebInspectorは、WindowsとMac OS Xで動作し、無償で今すぐダウンロードしてお使いいただけます。



診断項目数が増え、より精度の高い診断結果に

新 しいWebInspector 5.0は、詳細なチェック数を従来の68から89に大幅アップし、より精度の高い診断が可能になりました。これにより、例えばJIS X 8341-3の場合、「5.開発および制作に関する個別要件」の39項目中22項目、富士通ウェブ・アクセシビリティ指針の場合、70項目中25項目の診 断が可能になりました。以前にも増して、ホームページ編集で見落としがちな、さまざまな問題を見つけ出すことが可能になりました。



修正すべき箇所をビジュアルに表示

修すべき箇所をビジュアルに表示

WebInspector 5.0は「画面で確認」機能を実現し、修正すべき箇所をビジュアルに確認することが可能になりました。従来は、HTMLのソースを参照し、行番号から問題 のある部分を特定しなければなりませんでしたが、WebInspector 5.0では、「画面で確認」機能により、より簡単に、修正すべき箇所を特定できるようになっています。



JIS X 8341-3 に対応したチェックはおまかせください

JIS X 8341-3 高齢者・障害者等配慮設計指針 ‐情報通信における機器、ソフトウェア及びサービス‐ 第3部:ウェブコンテンツに対応したチェックが可能です。JIS規格に沿った診断をおこなうことにより、より一般性の高いアクセシビリティ改善とサイトの 信頼性の確保が可能となります。


富士通ウェブ・アクセシビリティ指針 第2.0版のチェックにも対応

富士通ウェブ・アクセシビリティ指針 第2.0版に もとづいて診断します。(第2.0版はJIS X8341-3との整合性を重視しつつ、第1.0版公開後に実施した調査、研究内容などをもとに、「制作」工程に加え「企画」「サポート」などで考慮すべ き事項をより詳しく、わかりやすく解説しています。さらに一般的に守っていただきたいユーザビリティ的配慮も記述しています。)



Version 5.0の主な新機能

  1. 診断項目数が増え、より精度の高い診断結果に
  2. 問題点をビジュアル表示

WebInspectorの開発履歴

  • 2006年5月18日 Version 5.0 診断項目数増加と、問題点のビジュアル表示機能化
  • 2004年6月28日 Version 4.0 JIS X 8341-3と富士通指針第2.0版のチェック項目に両対応
  • 2004年2月18日 Version 3.0 待望のCSSのチェック機能を搭載
  • 2003年7月20日 Version 2.0 社内限定ツールを経て一般公開を開始
  • 2002年12月27日 Version 1.0 富士通指針第1.0版のチェック項目に対応した社内限定ツールとして誕生

バナーでアピール


アクセシビリティチェックバナーでアピールしましょう



WebInspector 5.0 Plus
(総務省「みんなの公共サイト運用モデル」対応版)について

ご 存知でしたか?WebInspector 5.0には、WebInspector 5.0 Plusという別バージョンが存在します。このWebInspector 5.0 Plusでは、JIS X 8341-3や富士通ウェブ・アクセシビリティ指針に即した診断機能に加え、総務省「みんなの公共サイト運用モデル」に即した診断をおこなうことが可能です。もちろん、WebInspector 5.0の新機能、「画面で確認」も、ご利用いただけます。この便利なWebInspector 5.0 Plusは、書籍「よくわかるWebアクセシビリティ&ユーザビリティ(改訂版)」を購入いただくことで入手いただけます。CD‐ROMで添付された、このWebInspector 5.0 Plusは、WebInspector 5.0と同じくWindowsとMac OS Xの両方でご利用いただけます。