Cool eye

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            63 Posts :: 4 Stories :: 3 Comments :: 0 Trackbacks

          #

          ORACLE內(nèi)置函數(shù)大全

          ??????????????????????????????????????

          ORACLE內(nèi)置函數(shù)大全

          SQL中的單記錄函數(shù)
          1.ASCII
          返回與指定的字符對應(yīng)的十進(jìn)制數(shù);
          SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

          ??????? A???????? A????? ZERO???? SPACE
          --------- --------- --------- ---------
          ?????? 65??????? 97??????? 48??????? 32


          2.CHR
          給出整數(shù),返回對應(yīng)的字符;
          SQL> select chr(54740) zhao,chr(65) chr65 from dual;

          ZH C
          -- -
          趙 A

          3.CONCAT
          連接兩個字符串;
          SQL> select concat('010-','88888888')||'轉(zhuǎn)23'? 高乾競電話 from dual;

          高乾競電話
          ----------------
          010-88888888轉(zhuǎn)23

          4.INITCAP
          返回字符串并將字符串的第一個字母變?yōu)榇髮?
          SQL> select initcap('smith') upp from dual;

          UPP
          -----
          Smith


          5.INSTR(C1,C2,I,J)
          在一個字符串中搜索指定的字符,返回發(fā)現(xiàn)指定的字符的位置;
          C1??? 被搜索的字符串
          C2??? 希望搜索的字符串
          I???? 搜索的開始位置,默認(rèn)為1
          J???? 出現(xiàn)的位置,默認(rèn)為1
          SQL> select instr('oracle traning','ra',1,2) instring from dual;

          ?INSTRING
          ---------
          ??????? 9


          6.LENGTH
          返回字符串的長度;
          SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

          NAME?? LENGTH(NAME) ADDR???????????? LENGTH(ADDR)?????? SAL LENGTH(TO_CHAR(SAL))
          ------ ------------ ---------------- ------------ --------- --------------------
          高乾競??????????? 3 北京市海錠區(qū)??????????????? 6?? 9999.99??????????????????? 7

          ?

          7.LOWER
          返回字符串,并將所有的字符小寫
          SQL> select lower('AaBbCcDd')AaBbCcDd from dual;

          AABBCCDD
          --------
          aabbccdd


          8.UPPER
          返回字符串,并將所有的字符大寫
          SQL> select upper('AaBbCcDd') upper from dual;

          UPPER
          --------
          AABBCCDD

          ?

          9.RPAD和LPAD(粘貼字符)
          RPAD? 在列的右邊粘貼字符
          LPAD? 在列的左邊粘貼字符
          SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

          LPAD(RPAD('GAO',1
          -----------------
          *******gao*******
          不夠字符則用*來填滿


          10.LTRIM和RTRIM
          LTRIM? 刪除左邊出現(xiàn)的字符串
          RTRIM? 刪除右邊出現(xiàn)的字符串
          SQL> select ltrim(rtrim('?? gao qian jing?? ',' '),' ') from dual;

          LTRIM(RTRIM('
          -------------
          gao qian jing


          11.SUBSTR(string,start,count)
          取子字符串,從start開始,取count個
          SQL> select substr('13088888888',3,8) from dual;

          SUBSTR('
          --------
          08888888


          12.REPLACE('string','s1','s2')
          string?? 希望被替換的字符或變量
          s1?????? 被替換的字符串
          s2?????? 要替換的字符串
          SQL> select replace('he love you','he','i') from dual;

          REPLACE('H
          ----------
          i love you


          13.SOUNDEX
          返回一個與給定的字符串讀音相同的字符串
          SQL> create table table1(xm varchar(8));
          SQL> insert into table1 values('weather');
          SQL> insert into table1 values('wether');
          SQL> insert into table1 values('gao');

          SQL> select xm from table1 where soundex(xm)=soundex('weather');

          XM
          --------
          weather
          wether


          14.TRIM('s' from 'string')
          LEADING?? 剪掉前面的字符
          TRAILING? 剪掉后面的字符
          如果不指定,默認(rèn)為空格符

          15.ABS
          返回指定值的絕對值
          SQL> select abs(100),abs(-100) from dual;

          ?ABS(100) ABS(-100)
          --------- ---------
          ????? 100?????? 100


          16.ACOS
          給出反余弦的值
          SQL> select acos(-1) from dual;

          ?ACOS(-1)
          ---------
          3.1415927


          17.ASIN
          給出反正弦的值
          SQL> select asin(0.5) from dual;

          ASIN(0.5)
          ---------
          .52359878


          18.ATAN
          返回一個數(shù)字的反正切值
          SQL> select atan(1) from dual;

          ? ATAN(1)
          ---------
          .78539816


          19.CEIL
          返回大于或等于給出數(shù)字的最小整數(shù)
          SQL> select ceil(3.1415927) from dual;

          CEIL(3.1415927)
          ---------------
          ????????????? 4


          20.COS
          返回一個給定數(shù)字的余弦
          SQL> select cos(-3.1415927) from dual;

          COS(-3.1415927)
          ---------------
          ???????????? -1


          21.COSH
          返回一個數(shù)字反余弦值
          SQL> select cosh(20) from dual;

          ?COSH(20)
          ---------
          242582598


          22.EXP
          返回一個數(shù)字e的n次方根
          SQL> select exp(2),exp(1) from dual;

          ?? EXP(2)??? EXP(1)
          --------- ---------
          7.3890561 2.7182818


          23.FLOOR
          對給定的數(shù)字取整數(shù)
          SQL> select floor(2345.67) from dual;

          FLOOR(2345.67)
          --------------
          ????????? 2345


          24.LN
          返回一個數(shù)字的對數(shù)值
          SQL> select ln(1),ln(2),ln(2.7182818) from dual;

          ??? LN(1)???? LN(2) LN(2.7182818)
          --------- --------- -------------
          ??????? 0 .69314718???? .99999999


          25.LOG(n1,n2)
          返回一個以n1為底n2的對數(shù)
          SQL> select log(2,1),log(2,4) from dual;

          ?LOG(2,1)? LOG(2,4)
          --------- ---------
          ??????? 0???????? 2


          26.MOD(n1,n2)
          返回一個n1除以n2的余數(shù)
          SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

          MOD(10,3)? MOD(3,3)? MOD(2,3)
          --------- --------- ---------
          ??????? 1???????? 0???????? 2


          27.POWER
          返回n1的n2次方根
          SQL> select power(2,10),power(3,3) from dual;

          POWER(2,10) POWER(3,3)
          ----------- ----------
          ?????? 1024???????? 27


          28.ROUND和TRUNC
          按照指定的精度進(jìn)行舍入
          SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

          ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
          ----------- ------------ ----------- ------------
          ???????? 56????????? -55????????? 55????????? -55


          29.SIGN
          取數(shù)字n的符號,大于0返回1,小于0返回-1,等于0返回0
          SQL> select sign(123),sign(-100),sign(0) from dual;

          SIGN(123) SIGN(-100)?? SIGN(0)
          --------- ---------- ---------
          ??????? 1???????? -1???????? 0


          30.SIN
          返回一個數(shù)字的正弦值
          SQL> select sin(1.57079) from dual;

          SIN(1.57079)
          ------------
          ?????????? 1


          31.SIGH
          返回雙曲正弦的值
          SQL> select sin(20),sinh(20) from dual;

          ? SIN(20)? SINH(20)
          --------- ---------
          .91294525 242582598


          32.SQRT
          返回數(shù)字n的根
          SQL> select sqrt(64),sqrt(10) from dual;

          ?SQRT(64)? SQRT(10)
          --------- ---------
          ??????? 8 3.1622777


          33.TAN
          返回數(shù)字的正切值
          SQL> select tan(20),tan(10) from dual;

          ? TAN(20)?? TAN(10)
          --------- ---------
          2.2371609 .64836083


          34.TANH
          返回數(shù)字n的雙曲正切值
          SQL> select tanh(20),tan(20) from dual;

          ?TANH(20)?? TAN(20)
          --------- ---------
          ??????? 1 2.2371609

          ?

          35.TRUNC
          按照指定的精度截取一個數(shù)
          SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

          ?? TRUNC1 TRUNC(124.16666,2)
          --------- ------------------
          ????? 100???????????? 124.16

          ?

          36.ADD_MONTHS
          增加或減去月份
          SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

          TO_CHA
          ------
          200002
          SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

          TO_CHA
          ------
          199910


          37.LAST_DAY
          返回日期的最后一天
          SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

          TO_CHAR(SY TO_CHAR((S
          ---------- ----------
          2004.05.09 2004.05.10
          SQL> select last_day(sysdate) from dual;

          LAST_DAY(S
          ----------
          31-5月 -04


          38.MONTHS_BETWEEN(date2,date1)
          給出date2-date1的月份
          SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

          MON_BETWEEN
          -----------
          ????????? 9
          SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

          ?MON_BETW
          ---------
          ????? -60


          39.NEW_TIME(date,'this','that')
          給出在this時區(qū)=other時區(qū)的日期和時間
          SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
          ? 2? (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

          BJ_TIME???????????? LOS_ANGLES
          ------------------- -------------------
          2004.05.09 11:05:32 2004.05.09 18:05:32


          40.NEXT_DAY(date,'day')
          給出日期date和星期x之后計算下一個星期的日期
          SQL> select next_day('18-5月-2001','星期五') next_day from dual;

          NEXT_DAY
          ----------
          25-5月 -01

          ?

          41.SYSDATE
          用來得到系統(tǒng)的當(dāng)前日期
          SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;

          TO_CHAR(SYSDATE,'
          -----------------
          09-05-2004 星期日
          trunc(date,fmt)按照給出的要求將日期截斷,如果fmt='mi'表示保留分,截斷秒
          SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
          ? 2? to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

          HH????????????????? HHMM
          ------------------- -------------------
          2004.05.09 11:00:00 2004.05.09 11:17:00

          ?

          42.CHARTOROWID
          將字符數(shù)據(jù)類型轉(zhuǎn)換為ROWID類型
          SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

          ROWID????????????? ROWIDTOCHAR(ROWID) ENAME
          ------------------ ------------------ ----------
          AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
          AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
          AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
          AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES


          43.CONVERT(c,dset,sset)
          將源字符串 sset從一個語言字符集轉(zhuǎn)換到另一個目的dset字符集
          SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

          conver
          ------
          strutz


          44.HEXTORAW
          將一個十六進(jìn)制構(gòu)成的字符串轉(zhuǎn)換為二進(jìn)制


          45.RAWTOHEXT
          將一個二進(jìn)制構(gòu)成的字符串轉(zhuǎn)換為十六進(jìn)制

          ?

          46.ROWIDTOCHAR
          將ROWID數(shù)據(jù)類型轉(zhuǎn)換為字符類型

          ?

          47.TO_CHAR(date,'format')
          SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

          TO_CHAR(SYSDATE,'YY
          -------------------
          2004/05/09 21:14:41

          ?

          48.TO_DATE(string,'format')
          將字符串轉(zhuǎn)化為ORACLE中的一個日期


          49.TO_MULTI_BYTE
          將字符串中的單字節(jié)字符轉(zhuǎn)化為多字節(jié)字符
          SQL>? select to_multi_byte('高') from dual;

          TO
          --


          50.TO_NUMBER
          將給出的字符轉(zhuǎn)換為數(shù)字
          SQL> select to_number('1999') year from dual;

          ???? YEAR
          ---------
          ???? 1999


          51.BFILENAME(dir,file)
          指定一個外部二進(jìn)制文件
          SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));


          52.CONVERT('x','desc','source')
          將x字段或變量的源source轉(zhuǎn)換為desc
          SQL> select sid,serial#,username,decode(command,
          ? 2? 0,'none',
          ? 3? 2,'insert',
          ? 4? 3,
          ? 5? 'select',
          ? 6? 6,'update',
          ? 7? 7,'delete',
          ? 8? 8,'drop',
          ? 9? 'other') cmd? from v$session where type!='background';

          ????? SID?? SERIAL# USERNAME?????????????????????? CMD
          --------- --------- ------------------------------ ------
          ??????? 1???????? 1??????????????????????????????? none
          ??????? 2???????? 1??????????????????????????????? none
          ??????? 3???????? 1??????????????????????????????? none
          ??????? 4???????? 1??????????????????????????????? none
          ??????? 5???????? 1??????????????????????????????? none
          ??????? 6???????? 1??????????????????????????????? none
          ??????? 7????? 1275??????????????????????????????? none
          ??????? 8????? 1275??????????????????????????????? none
          ??????? 9??????? 20 GAO??????????????????????????? select
          ?????? 10??????? 40 GAO??????????????????????????? none


          53.DUMP(s,fmt,start,length)
          DUMP函數(shù)以fmt指定的內(nèi)部數(shù)字格式返回一個VARCHAR2類型的值
          SQL> col global_name for a30
          SQL> col dump_string for a50
          SQL> set lin 200
          SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;

          GLOBAL_NAME??????????????????? DUMP_STRING
          ------------------------------ --------------------------------------------------
          ORACLE.WORLD?????????????????? Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D


          54.EMPTY_BLOB()和EMPTY_CLOB()
          這兩個函數(shù)都是用來對大數(shù)據(jù)類型字段進(jìn)行初始化操作的函數(shù)


          55.GREATEST
          返回一組表達(dá)式中的最大值,即比較字符的編碼大小.
          SQL> select greatest('AA','AB','AC') from dual;

          GR
          --
          AC
          SQL> select greatest('啊','安','天') from dual;

          GR
          --


          56.LEAST
          返回一組表達(dá)式中的最小值
          SQL> select least('啊','安','天') from dual;

          LE
          --


          57.UID
          返回標(biāo)識當(dāng)前用戶的唯一整數(shù)
          SQL> show user
          USER 為"GAO"
          SQL> select username,user_id from dba_users where user_id=uid;

          USERNAME???????????????????????? USER_ID
          ------------------------------ ---------
          GAO?????????????????????????????????? 25

          ?

          58.USER
          返回當(dāng)前用戶的名字
          SQL> select user from? dual;

          USER
          ------------------------------
          GAO


          59.USEREVN
          返回當(dāng)前用戶環(huán)境的信息,opt可以是:
          ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
          ISDBA? 查看當(dāng)前用戶是否是DBA如果是則返回true
          SQL> select userenv('isdba') from dual;

          USEREN
          ------
          FALSE
          SQL> select userenv('isdba') from dual;

          USEREN
          ------
          TRUE
          SESSION
          返回會話標(biāo)志
          SQL> select userenv('sessionid') from dual;

          USERENV('SESSIONID')
          --------------------
          ???????????????? 152
          ENTRYID
          返回會話人口標(biāo)志
          SQL> select userenv('entryid') from dual;

          USERENV('ENTRYID')
          ------------------
          ???????????????? 0
          INSTANCE
          返回當(dāng)前INSTANCE的標(biāo)志
          SQL> select userenv('instance') from dual;

          USERENV('INSTANCE')
          -------------------
          ????????????????? 1
          LANGUAGE
          返回當(dāng)前環(huán)境變量
          SQL> select userenv('language') from dual;

          USERENV('LANGUAGE')
          ----------------------------------------------------
          SIMPLIFIED CHINESE_CHINA.ZHS16GBK
          LANG
          返回當(dāng)前環(huán)境的語言的縮寫
          SQL> select userenv('lang') from dual;

          USERENV('LANG')
          ----------------------------------------------------
          ZHS
          TERMINAL
          返回用戶的終端或機(jī)器的標(biāo)志
          SQL> select userenv('terminal') from dual;

          USERENV('TERMINA
          ----------------
          GAO
          VSIZE(X)
          返回X的大小(字節(jié))數(shù)
          SQL> select vsize(user),user from dual;

          VSIZE(USER) USER
          ----------- ------------------------------
          ????????? 6 SYSTEM

          ?

          60.AVG(DISTINCT|ALL)
          all表示對所有的值求平均值,distinct只對不同的值求平均值
          SQLWKS> create table table3(xm varchar(8),sal number(7,2));
          語句已處理。
          SQLWKS>? insert into table3 values('gao',1111.11);
          SQLWKS>? insert into table3 values('gao',1111.11);
          SQLWKS>? insert into table3 values('zhu',5555.55);
          SQLWKS> commit;

          SQL> select avg(distinct sal) from gao.table3;

          AVG(DISTINCTSAL)
          ----------------
          ???????? 3333.33

          SQL> select avg(all sal) from gao.table3;

          AVG(ALLSAL)
          -----------
          ??? 2592.59


          61.MAX(DISTINCT|ALL)
          求最大值,ALL表示對所有的值求最大值,DISTINCT表示對不同的值求最大值,相同的只取一次

            返回選擇列表項目的最大值,如果x是字符串?dāng)?shù)據(jù)類型,他返回一個VARCHAR2數(shù)據(jù)類型,如果X是一個DATA數(shù)據(jù)類型,返回一個日期,如果X是numeric數(shù)據(jù)類型,返回一個數(shù)字。注意distinct和all不起作用,應(yīng)為最大值與這兩種設(shè)置是相同的。
          SQL> select max(distinct sal) from scott.emp;

          MAX(DISTINCTSAL)
          ----------------
          ??????????? 5000


          62.MIN(DISTINCT|ALL)
          求最小值,ALL表示對所有的值求最小值,DISTINCT表示對不同的值求最小值,相同的只取一次
          SQL> select min(all sal) from gao.table3;

          MIN(ALLSAL)
          -----------
          ??? 1111.11


          63.STDDEV(distinct|all)
          求標(biāo)準(zhǔn)差,ALL表示對所有的值求標(biāo)準(zhǔn)差,DISTINCT表示只對不同的值求標(biāo)準(zhǔn)差
          SQL> select stddev(sal) from scott.emp;

          STDDEV(SAL)
          -----------
          ? 1182.5032

          SQL> select stddev(distinct sal) from scott.emp;

          STDDEV(DISTINCTSAL)
          -------------------
          ?????????? 1229.951

          ?

          64.VARIANCE(DISTINCT|ALL)
          求協(xié)方差

          SQL> select variance(sal) from scott.emp;

          VARIANCE(SAL)
          -------------
          ??? 1398313.9


          65.GROUP BY
          主要用來對一組數(shù)進(jìn)行統(tǒng)計
          SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;

          ?? DEPTNO? COUNT(*)? SUM(SAL)
          --------- --------- ---------
          ?????? 10???????? 3????? 8750
          ?????? 20???????? 5???? 10875
          ?????? 30???????? 6????? 9400

          ?

          66.HAVING
          對分組統(tǒng)計再加限制條件
          SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;

          ?? DEPTNO? COUNT(*)? SUM(SAL)
          --------- --------- ---------
          ?????? 20???????? 5???? 10875
          ?????? 30???????? 6????? 9400
          SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;

          ?? DEPTNO? COUNT(*)? SUM(SAL)
          --------- --------- ---------
          ?????? 20???????? 5???? 10875
          ?????? 30???????? 6????? 9400


          67.ORDER BY
          用于對查詢到的結(jié)果進(jìn)行排序輸出
          SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;

          ?? DEPTNO ENAME??????????? SAL
          --------- ---------- ---------
          ?????? 10 KING??????????? 5000
          ?????? 10 CLARK?????????? 2450
          ?????? 10 MILLER????????? 1300
          ?????? 20 SCOTT?????????? 3000
          ?????? 20 FORD??????????? 3000
          ?????? 20 JONES?????????? 2975
          ?????? 20 ADAMS?????????? 1100
          ?????? 20 SMITH??????????? 800
          ?????? 30 BLAKE?????????? 2850
          ?????? 30 ALLEN?????????? 1600
          ?????? 30 TURNER????????? 1500
          ?????? 30 WARD??????????? 1250
          ?????? 30 MARTIN????????? 1250
          ?????? 30 JAMES??????????? 950

          posted @ 2006-11-04 19:16 joeyeezhang 閱讀(268) | 評論 (0)編輯 收藏

           

          計算機(jī)“端口”可以認(rèn)為是計算機(jī)與外界通訊交流的出口。其中硬件領(lǐng)域的端口又稱接口,如USB端口、串行端口等。軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。

            本文向你講述端口的基礎(chǔ)常識及常用端口設(shè)置方法與技巧。

            一、端口基礎(chǔ)   1.面向連接和無連接協(xié)議

            面向連接服務(wù)要經(jīng)過三個階段。即數(shù)據(jù)傳數(shù)前,先建立連接,連接建立后再傳輸數(shù)據(jù),數(shù)據(jù)傳送完后,釋放連接。面向連接服務(wù),可確保數(shù)據(jù)傳送的次序和傳輸?shù)目煽啃浴?/p>

            無連接服務(wù)只有傳輸數(shù)據(jù)階段。消除了除數(shù)據(jù)通信外的其他開銷。只要發(fā)送實體是活躍的,無須接收實體也是活躍的。它的優(yōu)點是靈活方便、迅速,特別適合于傳送少量零星的報文,但無連接服務(wù)不能防止報文的丟失、重復(fù)或失序。

            區(qū)分“面向連接服務(wù)”和“無連接服務(wù)”的概念,特別簡單、形象的例子是:打電話和寫信。兩個人如果要通電話,必須先建立連接——撥號,等待應(yīng)答后才能相互傳遞信息,最后還要釋放連接——掛電話。寫信就沒有那么復(fù)雜了,地址姓名填好以后直接往郵筒一扔,收信人就能收到。TCP/IP協(xié)議在網(wǎng)絡(luò)層是無連接的(數(shù)據(jù)包只管往網(wǎng)上發(fā),如何傳輸和到達(dá)以及是否到達(dá)由網(wǎng)絡(luò)設(shè)備來管理)。而“端口”,是傳輸層的內(nèi)容,是面向連接的。協(xié)議里面低于1024的端口都有確切的定義,它們對應(yīng)著因特網(wǎng)上常見的一些服務(wù)。這些常見的服務(wù)可以劃分為使用TCP端口(面向連接如打電話)和使用UDP端口(無連接如寫信)兩種。

            網(wǎng)絡(luò)中可以被命名和尋址的通信端口是操作系統(tǒng)的一種可分配資源。由網(wǎng)絡(luò)OSI(Open System Interconnection Reference Model,開放系統(tǒng)互聯(lián)參考模型)七層協(xié)議可知,傳輸層與網(wǎng)絡(luò)層最大的區(qū)別是傳輸層提供進(jìn)程通信能力,網(wǎng)絡(luò)通信的最終地址不僅包括主機(jī)地址,還包括可描述進(jìn)程的某種標(biāo)識。所以TCP/IP協(xié)議提出的協(xié)議端口,可以認(rèn)為是網(wǎng)絡(luò)通信進(jìn)程的一種標(biāo)識符。

            應(yīng)用程序(調(diào)入內(nèi)存運(yùn)行后一般稱為進(jìn)程)通過系統(tǒng)調(diào)用與某端口建立連接(binding,綁定)后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)的進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都從該端口輸出。在TCP/IP協(xié)議的實現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫方式訪問。

            類似于文件描述符,每個端口都擁有一個叫端口號的整數(shù)描述符,用來區(qū)別不同的端口。由于TCP/IP傳輸層的TCP和UDP兩個協(xié)議是兩個完全獨(dú)立的軟件模塊,因此各自的端口號也相互獨(dú)立。如TCP有一個255號端口,UDP也可以有一個255號端口,兩者并不沖突。

            2.端口號的基本分配方式

            端口號有兩種基本分配方式:

            (1)全局分配:這是一種集中分配方式,由一個公認(rèn)權(quán)威的機(jī)構(gòu)根據(jù)用戶需要進(jìn)行統(tǒng)一分配,并將結(jié)果公布于眾。

           ?。?)本地分配:又稱動態(tài)連接,即進(jìn)程需要訪問傳輸層服務(wù)時,向本地操作系統(tǒng)提出申請,操作系統(tǒng)返回本地唯一的端口號,進(jìn)程再通過合適的系統(tǒng)調(diào)用,將自己和該端口連接起來。

            TCP/IP端口號的分配綜合了以上兩種方式,將端口號分為兩部分,少量的作為保留端口,以全局方式分配給服務(wù)進(jìn)程。每一個標(biāo)準(zhǔn)服務(wù)器都擁有一個全局公認(rèn)的端口,即使在不同的機(jī)器上,其端口號也相同。剩余的為自由端口,以本地方式進(jìn)行分配。TCP和UDP規(guī)定,小于256的端口才能作為保留端口。

            3.端口分類

            按端口號可分為3大類:

            (1)公認(rèn)端口(Well Known Ports):從0到1023,它們緊密綁定于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。例如,80端口實際上總是HTTP通訊。

            (2)注冊端口(Registered Ports):從1024到49151。它們松散地綁定于一些服務(wù)。也就是說有許多服務(wù)綁定于這些端口,這些端口同樣用于許多其他目的。例如,許多系統(tǒng)處理動態(tài)端口從1024左右開始。

           ?。?)動態(tài)和/或私有端口(Dynamic and/or Private Ports):從49152到65535。理論上,不應(yīng)為服務(wù)分配這些端口。實際上,機(jī)器通常從1024起分配動態(tài)端口。

            4.端口“重定向”

            系統(tǒng)管理員可以“重定向”端口。

            一種常見的技術(shù)是把一個端口重定向到另一個地址。例如默認(rèn)的HTTP端口是80,不少人將它重定向到另一個端口,如8080。

            實現(xiàn)重定向是為了隱藏公認(rèn)的默認(rèn)端口,降低受破壞率。這樣如果有人要對一個公認(rèn)的默認(rèn)端口進(jìn)行攻擊則必須先進(jìn)行端口掃描。大多數(shù)端口重定向與原端口有相似之處,例如多數(shù)HTTP端口由80變化而來,如81、88、8000、8080、8888。同樣POP的端口原來在110,也常被重定向到1100。也有不少情況是選取統(tǒng)計上有特別意義的數(shù),如1234、23456、34567等。許多人有其他原因選擇奇怪的數(shù),42、69、666、31337。近來,越來越多的遠(yuǎn)程控制木馬采用相同的默認(rèn)端口。如NetBus的默認(rèn)端口是12345。Blake R. Swopes指出使用重定向端口還有一個原因,在UNIX系統(tǒng)上,如果你想偵聽1024以下的端口需要有root權(quán)限。如果你沒有root權(quán)限而又想開啟Web服務(wù),你就需要將其安裝在較高的端口。此外,一些ISP的防火墻將阻擋低端口的通訊,這樣的話即使你擁有整個機(jī)器你還是得重定向端口。

            二、常用端口對照詳解

            下表列出TCP/UDP端口掃描在防火墻記錄中的信息。

           

           

           

           

           

           

           

          端口

           

           

           

           

          服 務(wù)

           

           

           

           

          說   明

           

           

           

          0

           

          Reserved

           

          通常用于分析操作系統(tǒng)

           

           

           

           

          1

           

          tcpmux

           

          顯示有人在尋找SGI Irix計算機(jī)。默認(rèn)情況下,tcpmux在Irix系統(tǒng)中被打開。Irix計算機(jī)在尋找是否包含有默認(rèn)的無密碼的賬戶,如,IP、GUEST

           

          UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。許多管理員在安裝后忘記刪除這些賬戶。因此,攻擊者在網(wǎng)絡(luò)上搜索tcpmux并利用這些賬戶

           

           

           

           

          7

           

          Echo

           

          搜索Fraggle放大器時,發(fā)送到X.X.X.0和X.X.X.255的信息

           

           

           

           

          19

           

          Character Generator

           

          一種僅發(fā)送字符的服務(wù)。UDP版本將會在收到UDP包后回應(yīng)含有垃圾字符的包。TCP連接時會發(fā)送含有垃圾字符的數(shù)據(jù)流直到連接關(guān)閉。攻擊者利用IP欺騙可以發(fā)動DoS攻擊。偽造兩個chargen服務(wù)器之間的UDP包。同樣Fraggle

           

          DoS攻擊向目標(biāo)地址的這個端口廣播一個帶有偽造受害者IP的數(shù)據(jù)包,受害者為了回應(yīng)這些數(shù)據(jù)而攔載

           

           

           

           

          21

           

          FTP

           

          FTP服務(wù)器開放該端口,用于上傳、下載。攻擊者用于尋找打開Anonymous的FTP服務(wù)器的方法。這些服務(wù)器帶有可讀寫的目錄。木馬Doly

           

          Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所開放的端口

           

           

           

           

          22

           

          SSH`

           

          PCAnywhere建立的TCP和該端口的連接可能是為了尋找SSH。如果將該服務(wù)配置成為特定的模式,許多使用RSAREF庫的版本就會有不少的漏洞存在

           

           

           

           

          23

           

          Telnet

           

          遠(yuǎn)程登錄,攻擊者在搜索遠(yuǎn)程登錄UNIX的服務(wù)。大多數(shù)情況下掃描這一端口是為了找到計算機(jī)所運(yùn)行的操作系統(tǒng)。還有使用其他技術(shù),入侵者也會找到密碼。木馬Tiny

           

          Telnet Server開放該端口

           

           

           

           

          25

           

          SMTP

           

          SMTP服務(wù)器所開放的端口,用于發(fā)送郵件。攻擊者尋找SMTP服務(wù)器是為了傳遞他們的SPAM。入侵者的賬戶被關(guān)閉,他們需要連接到E-mail服務(wù)器上,將簡單的信息傳遞到不同的地址。木馬Antigen、Email

           

          Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都開放該端口

           

           

           

           

          31

           

          MSG Authentication

           

          木馬Master Paradise、Hackers Paradise開放該端口

           

           

           

           

          42

           

          WINS Replication

           

          WINS復(fù)制

           

           

           

           

          53

           

          Domain Name Server(DNS)

           

          DNS服務(wù)器所開放的端口,攻擊者可能是試圖進(jìn)行區(qū)域傳遞(TCP),欺騙DNS(UDP)或隱藏其他的通信。因此防火墻常常過濾或記錄此端口

           

           

           

           

          67

           

          Bootstrap Protocol Server

           

          通過ADSL的防火墻常會看見大量發(fā)送到廣播地址255.255.255.255的數(shù)據(jù)。這些計算機(jī)在向DHCP服務(wù)器請求一個地址。攻擊者常進(jìn)入它們,分配一個地址,把自己作為局部路由器而發(fā)起大量中間人攻擊。客戶端向68端口廣播請求配置,服務(wù)器向67端口廣播回應(yīng)請求。這種回應(yīng)使用廣播是因為客戶端還不知道可以發(fā)送的IP地址

           

           

           

           

          69

           

          Trival File Transfer

           

          許多服務(wù)器與Bootp一起提供這項服務(wù),便于從系統(tǒng)下載啟動代碼。但是它們常常由于錯誤配置而使攻擊者能從系統(tǒng)中竊取任何文件

           

           

           

           

          79

           

          Finger Server

           

          攻擊者用該服務(wù)獲取用戶信息,查詢操作系統(tǒng),探測已知的緩沖區(qū)溢出錯誤,回應(yīng)從自己機(jī)器到其他機(jī)器Finger掃描

           

           

           

           

          80

           

          HTTP

           

          用于網(wǎng)頁瀏覽。木馬Executor開放該端口

           

           

           

           

          88

           

          -

           

          Kerberos krb5。另外TCP的88端口也是這個用途

           

           

           

           

          99

           

          Metagram Relay

           

          后門程序ncx99開放此端口

           

           

           

           

          102

           

          Message transfer agent(MTA)-X.400 over TCP/IP

           

          消息傳輸代理

           

           

           

           

          109

           

          POP3

           

          POP3服務(wù)器開放此端口,用于接收郵件,客戶端訪問服務(wù)器端的郵件服務(wù)。POP3服務(wù)有許多公認(rèn)的弱點。關(guān)于用戶名和密碼交換緩沖區(qū)溢出的弱點至少有20個,這意味著攻擊者可以在真正登陸前進(jìn)入系統(tǒng)。成功登陸后還有其他緩沖區(qū)溢出錯誤

           

           

           

           

          110

           

          SUN公司的RPC服務(wù)所有端口

           

          常見RPC服務(wù)有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等

           

           

           

           

          113

           

          Authentication Service

           

          是一個在許多計算機(jī)上運(yùn)行的協(xié)議,用于鑒別TCP連接的用戶。使用這種服務(wù)可以獲得許多計算機(jī)的信息。但是它可作為服務(wù)的記錄器,尤其是FTP、POP、IMAP、SMTP和IRC等服務(wù)。如果有客戶通過防火墻訪問這些服務(wù),將會看到該端口的連接請求。如果關(guān)閉該端口,客戶端會感覺到在防火墻另一邊與E-mail服務(wù)器連接緩慢。許多防火墻支持TCP連接在阻斷過程中發(fā)回RST。這將會停止緩慢的連接

           

           

           

           

          119

           

          Network News Transfer Protocol

           

          NEWS新聞組傳輸協(xié)議。這個端口的連接通常是人們在尋找USENET服務(wù)器。多數(shù)ISP限制,只有他們的客戶才能訪問他們的新聞組服務(wù)器。打開新聞組服務(wù)器將允許發(fā)/讀任何人的帖子,訪問被限制的新聞組服務(wù)器,匿名發(fā)帖或發(fā)送SPAM

           

           

           

           

          135

           

          Location Service

           

          微軟在該端口運(yùn)行DCE RPC end-point mapper為它的DCOM服務(wù)。這與UNIX 111端口的功能相似。使用DCOM和RPC的服務(wù)利用計算機(jī)上的end-point

           

          mapper注冊它們的位置。遠(yuǎn)端客戶連接到計算機(jī)時,它們查找end-point mapper找到服務(wù)的位置。攻擊者掃描計算機(jī)的這個端口是為了找到這個計算機(jī)上運(yùn)行Exchange

          Server嗎?什么版本?還有些DoS攻擊直接針對這個端口

           

           

           

           

          137、138、139

           

          NETBIOS Name Service

           

          其中137、138是UDP端口,當(dāng)通過網(wǎng)上鄰居傳輸文件時用這個端口。而139端口則是用于獲得NetBIOS/SMB服務(wù)。這個協(xié)議被用于Windows文件和打印機(jī)共享和SAMBA。還有WINS

           

          Regisrtation也用它

           

           

           

           

          137

           

          -

           

          其他協(xié)議名稱查找上的SQL命名管道加密技術(shù)、其他協(xié)議名稱查找上的SQL RPC加密技術(shù)、WINS NetBT名稱服務(wù)和Wins

           

          Proxy都用這個端口

           

           

           

           

          143

           

          IMAP2

           

          和POP3的安全問題一樣,許多IMAP服務(wù)器存在有緩沖區(qū)溢出漏洞

           

           

           

           

          161

           

          SNMP

           

          SNMP允許遠(yuǎn)程管理設(shè)備。所有配置和運(yùn)行信息儲存在數(shù)據(jù)庫中,通過SNMP可獲得這些信息。管理員的錯誤配置將被暴露在Internet。攻擊者將試圖使用默認(rèn)的密碼訪問系統(tǒng)。他們可能會試驗所有可能的組合。SNMP包可能會被錯誤的指向用戶的網(wǎng)絡(luò)

           

           

           

           

          161

           

          -

           

          簡單網(wǎng)絡(luò)管理協(xié)議

           

           

           

           

          162

           

          -

           

          SNMP陷阱

           

           

           

           

          177

           

          X Display Manager Control Protocol

           

          許多入侵者通過它訪問X-windows控制臺,它同時需要打開6000端口

           

           

           

           

          389

           

          LDAP、ILS

           

          輕型目錄訪問協(xié)議和NetMeeting Internet Locator Server共用這一端口

           

           

           

           

          443

           

          Https

           

          網(wǎng)頁瀏覽端口,能提供加密和通過安全端口傳輸?shù)牧硪环NHTTP

           

           

           

           

          445

           

          -

           

          公共Internet文件系統(tǒng)

           

           

           

           

          456

           

          NULL

           

          木馬HACKERS PARADISE開放此端口

           

           

           

           

          464

           

          -

           

          Kerberos kpasswd(v5)。另外TCP的464端口也是這個用途

           

           

           

           

          500

           

          -

           

          Internet Key Exchange(IKE)(Internet密鑰交換)

           

           

           

           

          513

           

          Login,remote login

           

          是從使用ADSL登陸到子網(wǎng)中的UNIX計算機(jī)發(fā)出的廣播。這些人為入侵者進(jìn)入他們的系統(tǒng)提供了信息

           

           

           

           

          553

           

          CORBA IIOP (UDP)

           

          使用ADSL或VLAN將會看到這個端口的廣播。CORBA是一種面向?qū)ο蟮腞PC系統(tǒng)。入侵者可以利用這些信息進(jìn)入系統(tǒng)

           

           

           

           

          555

           

          DSF

           

          木馬PhAse1.0、Stealth Spy、IniKiller開放此端口

           

           

           

           

          568

           

          Membership DPA

           

          成員資格DPA

           

           

           

           

          569

           

          Membership MSN

           

          成員資格MSN

           

           

           

           

          635

           

          mountd

           

          Linux的mountd Bug。這是掃描的一個流行BUG。大多數(shù)對這個端口的掃描是基于UDP的,但是基于TCP的mountd有所增加(mountd同時運(yùn)行于兩個端口)。記住mountd可運(yùn)行于任何端口,只是Linux默認(rèn)端口是635,就像NFS通常運(yùn)行于2049端口

           

           

           

           

          636

           

          LDAP

           

          SSL,Secure Sockets layer。安全套接層

           

           

           

           

          666

           

          Doom Id Software

           

          木馬Attack FTP、Satanz Backdoor開放此端口

           

           

           

           

          993

           

          IMAP

           

          SSL,Secure Sockets layer。安全套接層

           

           

           

           

          1001、1011

           

          NULL

           

          木馬Silencer、WebEx開放1001端口。木馬Doly Trojan開放1011端口

           

           

           

           

          1024

           

          Reserved

           

          它是動態(tài)端口的開始,許多程序并不在乎用哪個端口連接網(wǎng)絡(luò),它們請求系統(tǒng)為它們分配下一個閑置端口?;谶@一點分配從端口1024開始。這就是說第一個向系統(tǒng)發(fā)出請求的會分配到1024端口。你可以重啟機(jī)器,打開Telnet,再打開一個窗口運(yùn)行natstat

           

          -a 將會看到Telnet被分配1024端口。還有SQL session也用此端口和5000端口

           

           

           

           

          1080

           

          SOCKS

           

          這一協(xié)議以通道方式穿過防火墻,允許防火墻后的人通過一個IP地址訪問Internet。理論上它應(yīng)該只允許內(nèi)部的通信向外到達(dá)Internet。但是由于錯誤的配置,它會允許位于防火墻外部的攻擊穿過防火墻。WinGate常會發(fā)生這種錯誤,在加入IRC聊天室時常會看到這種情況

           

           

           

           

          1170

           

          NULL

           

          木馬Streaming Audio Trojan、Psyber Stream Server、Voice開放此端口

           

           

           

           

          1234、1243、6711、6776

           

          NULL

           

          木馬SubSeven2.0、Ultors Trojan開放1234、6776端口。木馬SubSeven1.0/1.9開放1243、6711、6776端口

           

           

           

           

          1245

           

          NULL

           

          木馬Vodoo開放此端口

           

           

           

           

          1433

           

          SQL

           

          SQL服務(wù)開放的端口

           

           

           

           

          1492

           

          stone-design-1

           

          木馬FTP99CMP開放此端口

           

           

           

           

          1500

           

          RPC client fixed port session queries

           

          RPC客戶固定端口會話查詢

           

           

           

           

          1503

           

          NetMeeting T.120

           

          NetMeeting T.120

           

           

           

           

          1524

           

          ingress

           

          許多攻擊腳本將安裝一個后門SHELL于這個端口,尤其是針對SUN系統(tǒng)中Sendmail和RPC服務(wù)漏洞的腳本。如果剛安裝了防火墻就看到在這個端口上的連接企圖,很可能是上述原因??梢栽囋嘥elnet到用戶的計算機(jī)上的這個端口,看看它是否會給你一個SHELL。連接到600/pcserver也存在這個問題

           

           

           

           

          1600

           

          issd

           

          木馬Shivka-Burka開放此端口

           

           

           

           

          1645、1812

           

          -

           

          遠(yuǎn)程認(rèn)證撥號用戶服務(wù)

           

           

           

           

          1646、1813

           

          -

           

          RADIUS記賬(路由和遠(yuǎn)程訪問)

           

           

           

           

          1701

           

          -

           

          第2層隧道協(xié)議

           

           

           

           

          1720

           

          NetMeeting

           

          NetMeeting H.233 call Setup

           

           

           

           

          1731

           

          NetMeeting Audio Call Control

           

          NetMeeting音頻調(diào)用控制

           

           

           

           

          1801、3527

           

          -

           

          Microsoft消息隊列服務(wù)器。還有TCP的135、1801、2101、2103、2105也是同樣的用途

           

           

           

           

          1807

           

          NULL

           

          木馬SpySender開放此端口

           

           

           

           

          1981

           

          NULL

           

          木馬ShockRave開放此端口

           

           

           

           

          1999

           

          cisco identification port

           

          木馬BackDoor開放此端口

           

           

           

           

          2000

           

          NULL

           

          木馬GirlFriend 1.3、Millenium 1.0開放此端口

           

           

           

           

          2001

           

          NULL

           

          木馬Millenium 1.0、Trojan Cow開放此端口

           

           

           

           

          2023

           

          xinuexpansion 4

           

          木馬Pass Ripper開放此端口

           

           

           

           

          2049

           

          NFS

           

          NFS程序常運(yùn)行于這個端口。通常需要訪問Portmapper查詢這個服務(wù)運(yùn)行于哪個端口

           

           

           

           

          2115

           

          NULL

           

          木馬Bugs開放此端口

           

           

           

           

          2140、3150

           

          NULL

           

          木馬Deep Throat 1.0/3.0開放此端口

           

           

           

           

          2500

           

          RPC client using a fixed port session replication

           

          應(yīng)用固定端口會話復(fù)制的RPC客戶

           

           

           

           

          2504

           

          -

           

          網(wǎng)絡(luò)平衡負(fù)荷

           

           

           

           

          2583

           

          NULL

           

          木馬Wincrash 2.0開放此端口

           

           

           

           

          2801

           

          NULL

           

          木馬Phineas Phucker開放此端口

           

           

           

           

          3024、4092

           

          NULL

           

          木馬WinCrash開放此端口

           

           

           

           

          3128

           

          squid

           

          這是squid HTTP代理服務(wù)器的默認(rèn)端口。攻擊者掃描這個端口是為了搜尋一個代理服務(wù)器而匿名訪問Internet。也會看到搜索其他代理服務(wù)器的端口8000、8001、8080、8888。掃描這個端口的另一個原因是用戶正在進(jìn)入聊天室。其他用戶也會檢驗這個端口以確定用戶的機(jī)器是否支持代理

           

           

           

           

          3129

           

          NULL

           

          木馬Master Paradise開放此端口

           

           

           

           

          3150

           

          NULL

           

          木馬The Invasor開放此端口

           

           

           

           

          3210、4321

           

          NULL

           

          木馬SchoolBus開放此端口

           

           

           

           

          3333

           

          dec-notes

           

          木馬Prosiak開放此端口

           

           

           

           

          3389

           

          超級終端

           

          Windows 2000終端開放此端口

           

           

           

           

          3700

           

          NULL]

           

          木馬Portal of Doom開放此端口

           

           

           

           

          3996、4060

           

          NULL

           

          木馬RemoteAnything開放此端口

           

           

           

           

          4000

           

          QQ客戶端

           

          騰訊QQ客戶端開放此端口

           

           

           

           

          4092

           

          NULL

           

          木馬WinCrash開放此端口

           

           

           

           

          4590

           

          NULL

           

          木馬ICQTrojan開放此端口

           

           

           

           

          5000、5001、5321、50505

           

          NULL

           

          木馬blazer5開放5000端口。木馬Sockets de Troie開放5000、5001、5321、50505端口

           

           

           

           

          5400、5401、5402

           

          NULL

           

          木馬Blade Runner開放此端口

           

           

           

           

          5550

           

          NULL

           

          木馬xtcp開放此端口

           

           

           

           

          5569

           

          NULL

           

          木馬Robo-Hack開放此端口

           

           

           

           

          5632

           

          PCAnywere

           

          有時會看到很多這個端口的掃描,這依賴于用戶所在的位置。當(dāng)用戶打開PCAnywere時,它會自動掃描局域網(wǎng)C類網(wǎng)以尋找可能的代理。攻擊者也會尋找開放這種服務(wù)的計算機(jī)。所以應(yīng)該查看這種掃描的源地址。一些搜尋PCAnywere的掃描包常含端口22的UDP數(shù)據(jù)包

           

           

           

           

          5742

           

          NULL

           

          木馬WinCrash1.03開放此端口

           

           

           

           

          6267

           

          NULL

           

          木馬廣外女生開放此端口

           

           

           

           

          6400

           

          NULL

           

          木馬The tHing開放此端口

           

           

           

           

          6670、6671

           

          NULL

           

          木馬Deep Throat開放6670端口。而Deep Throat 3.0開放6671端口

           

           

           

           

          6883

           

          NULL

           

          木馬DeltaSource開放此端口

           

           

           

           

          6969

           

          NULL

           

          木馬Gatecrasher、Priority開放此端口

           

           

           

           

          6970

           

          RealAudio

           

          RealAudio客戶將從服務(wù)器的6970-7170的UDP端口接收音頻數(shù)據(jù)流。這是由TCP-7070端口外向控制連接設(shè)置的

           

           

           

           

          7000

           

          NULL

           

          木馬Remote Grab開放此端口

           

           

           

           

          7300、7301、7306、7307、7308

           

          NULL

           

          木馬NetMonitor開放此端口。另外NetSpy1.0也開放7306端口

           

           

           

           

          7323

           

          NULL

           

          SyGate服務(wù)器端

           

           

           

           

          7626

           

          NULL

           

          木馬Giscier開放此端口

           

           

           

           

          7789

           

          NULL

           

          木馬ICKiller開放此端口

           

           

           

           

          8000

           

          OICQ

           

          騰訊QQ服務(wù)器端開放此端口

           

           

           

           

          8010

           

          WinGate

           

          WinGate代理開放此端口

           

           

           

           

          8080

           

          代理端口

           

          WWW代理開放此端口

           

           

           

           

          9400、9401、9402

           

          NULL

           

          木馬Incommand 1.0開放此端口

           

           

           

           

          9872、9873、9874、9875、10067、10167

           

          NULL

           

          木馬Portal of Doom開放此端口

           

           

           

           

          9989

           

          NULL

           

          木馬iNi-Killer開放此端口

           

           

           

           

          11000

           

          NULL

           

          木馬SennaSpy開放此端口

           

           

           

           

          11223

           

          NULL

           

          木馬Progenic trojan開放此端口

           

           

           

           

          12076、61466

           

          NULL

           

          木馬Telecommando開放此端口

           

           

           

           

          12223

           

          NULL

           

          木馬Hack'99 KeyLogger開放此端口

           

           

           

           

          12345、12346

           

          NULL

           

          木馬NetBus1.60/1.70、GabanBus開放此端口

           

           

           

           

          12361

           

          NULL

           

          木馬Whack-a-mole開放此端口

           

           

           

           

          13223

           

          PowWow

           

          PowWow是Tribal Voice的聊天程序。它允許用戶在此端口打開私人聊天的連接。該程序?qū)τ诮⑦B接非常具有攻擊性。它會常駐在TCP端口等待回應(yīng)。如果一個撥號用戶從另一個聊天者手中繼承了IP地址就會發(fā)生好象有很多不同的人在測試這個端口的情況。這一協(xié)議使用OPNG作為其連接請求的前4個字節(jié)

           

           

           

           

          16969

           

          NULL

           

          木馬Priority開放此端口

           

           

           

           

          17027

           

          Conducent

           

          這是一個外向連接,是由于公司內(nèi)部有人安裝了帶有Conducent"adbot"的共享軟件。Conducent"adbot"是為共享軟件顯示廣告服務(wù)的。使用這種服務(wù)的一種流行的軟件是Pkware

           

           

           

           

          19191

           

          NULL

           

          木馬藍(lán)色火焰開放此端口

           

           

           

           

          20000、20001

           

          NULL

           

          木馬Millennium開放此端口

           

           

           

           

          20034

           

          NULL

           

          木馬NetBus Pro開放此端口

           

           

           

           

          21554

           

          NULL

           

          木馬GirlFriend開放此端口

           

           

           

           

          22222

           

          NULL

           

          木馬Prosiak開放此端口

           

           

           

           

          23456

           

          NULL

           

          木馬Evil FTP、Ugly FTP開放此端口

           

           

           

           

          26274、47262

           

          NULL

           

          木馬Delta開放此端口

           

           

           

           

          27374

           

          NULL

           

          木馬Subseven 2.1開放此端口

           

           

           

           

          30100

           

          NULL

           

          木馬NetSphere開放此端口

           

           

           

           

          30303

           

          NULL

           

          木馬Socket23開放此端口

           

           

           

           

          30999

           

          NULL

           

          木馬Kuang開放此端口

           

           

           

           

          31337、31338

           

          NULL

           

          木馬BO(Back Orifice)開放此端口。另外木馬DeepBO也開放31338端口

           

           

           

           

          31339

           

          NULL

           

          木馬NetSpy DK開放此端口

           

           

           

           

          31666

           

          NULL

           

          木馬BOWhack開放此端口

           

           

           

           

          33333

           

          NULL

           

          木馬Prosiak開放此端口

           

           

           

           

          34324

           

          NULL

           

          木馬Tiny Telnet Server、BigGluck、TN開放此端口

           

           

           

           

          40412

           

          NULL

           

          木馬The Spy開放此端口

           

           

           

           

          40421、40422、40423、40426

           

          NULL

           

          木馬Masters Paradise開放此端口

           

           

           

           

          43210、54321

           

          NULL

           

          木馬SchoolBus 1.0/2.0開放此端口

           

           

           

           

          44445

           

          NULL

           

          木馬Happypig開放此端口

           

           

           

           

          50766

           

          NULL

           

          木馬Fore開放此端口

           

           

           

           

          53001

           

          NULL

           

          木馬Remote Windows Shutdown開放此端口

           

           

           

           

          65000

           

          NULL

           

          木馬Devil 1.03開放此端口


          愛賣藝

          posted @ 2006-11-01 10:06 joeyeezhang 閱讀(345) | 評論 (0)編輯 收藏

           事務(wù)是一個非常重要的編程概念,使用事務(wù),可以很簡單地構(gòu)造出可靠穩(wěn)定的應(yīng)用程序,本文以許多具體的例子介紹了事務(wù)服務(wù)的概念和事務(wù)服務(wù)的具體實現(xiàn)。
            本文共分兩部分:第一部分從事務(wù)服務(wù)整體描述的角度簡要介紹了事務(wù)服務(wù)產(chǎn)生的動機(jī)、事務(wù)服務(wù)的應(yīng)用和事務(wù)服務(wù)的功能,其中以具體的例子解釋了相關(guān)概念和事務(wù)服務(wù)涉及到的一些術(shù)語;第二部分以J2EE中的事務(wù)服務(wù)為例對事務(wù)的實現(xiàn)作簡要的介紹。
          第I部分 事務(wù)服務(wù)簡述
           

          1. 事務(wù)綜述
           

          事務(wù)是一個非常重要的編程概念,使用事務(wù),可以很簡單地構(gòu)造出可靠穩(wěn)定的應(yīng)用程序,尤其對那些需要進(jìn)行并發(fā)數(shù)據(jù)訪問的應(yīng)用程序,事務(wù)更是重要的多。事務(wù)的概念最初應(yīng)用在那些用于商務(wù)操作的應(yīng)用程序上,在這些應(yīng)用中,事務(wù)用來保護(hù)中央數(shù)據(jù)庫中的數(shù)據(jù)。隨后,隨著分布式計算的發(fā)展,事務(wù)在分布式計算領(lǐng)域中也得到了廣泛的應(yīng)用?,F(xiàn)在,在分布式計算領(lǐng)域中,公認(rèn)為事務(wù)是構(gòu)造可靠性分布式應(yīng)用程序的關(guān)鍵。

          1.1事務(wù)產(chǎn)生的動機(jī)

          1.1.1原子操作

          考慮這樣一個應(yīng)用:用戶把錢從一個銀行賬號轉(zhuǎn)賬至另一個銀行賬號,需要將資金從一個銀行賬號中取出,然后再存入另一個銀行賬號中。理想來說,這兩次操作都應(yīng)該成功。但是,如果有錯誤發(fā)生,則兩次操作都應(yīng)該失敗,否則的話,操作之后其中一個賬號中的金額將會是錯誤的,整個操作過程應(yīng)該是原子性的,兩個操作都是一個原子事務(wù)操作的一部分。

          可以使用異常處理來處理上述問題,代碼如下:

          try{  //從賬戶1中取款}catch(Exception e){	//如果發(fā)生錯誤,則終止操作	return;}try {	//如果第一步?jīng)]有發(fā)生錯誤,則將提取出的資金存入賬戶2	}catch(Exception e) {//如果發(fā)生錯誤,則終止這步操作,并且將從賬戶1中取出的資金再重新存回到賬戶1中return ;}

          上面這種解決方法從存在著下面的問題:

          • 程序拖沓冗長
          • 必須考慮到每一步中可能發(fā)生的每一個問題,并且要編寫錯誤處理程序來考慮如何撤銷所作的操作
          • 如果執(zhí)行的是比簡單的取款、存款操作要復(fù)雜的多的程序,那么錯誤處理程序?qū)兊秒y以控制。
          • 編寫測試程序?qū)浅@щy

          因此,需要一種事務(wù)處理機(jī)制來保證這種原子性的操作。

          1.1.2 網(wǎng)絡(luò)故障或機(jī)器故障

          為了在發(fā)生嚴(yán)重故障之后,能夠保證系統(tǒng)的狀態(tài)是一致的,所以需要一種恢復(fù)性的機(jī)制來保證這一點。

          1.1.3 數(shù)據(jù)共享

          需要一種機(jī)制來保證多用戶并發(fā)訪問數(shù)據(jù)的問題。

          以上這些問題的解決方法,便是使用事務(wù)服務(wù)。

          1.2 使用事務(wù)服務(wù)帶來的好處

          使用事務(wù),便可以利用事務(wù)的四個重要屬性:ACID。

          • 原子性( atomic):事務(wù)中包含的各項操作必須全部成功執(zhí)行或者全部不執(zhí)行。任何一項操作失敗,將導(dǎo)致整個事務(wù)失敗,其他已經(jīng)執(zhí)行的任務(wù)所作的數(shù)據(jù)操作都將被撤銷,只有所有的操作全部成功,整個事務(wù)才算是成功完成。
          • 一致性( consistent):保證了當(dāng)事務(wù)結(jié)束后,系統(tǒng)狀態(tài)是一致的。那么什么是一致的系統(tǒng)狀態(tài)?例如,如果銀行始終遵循著"銀行賬號必須保持正態(tài)平衡"的原則,那么銀行系統(tǒng)的狀態(tài)就是一致的。上面的轉(zhuǎn)賬例子中,在取錢的過程中,賬戶會出現(xiàn)負(fù)態(tài)平衡,在事務(wù)結(jié)束之后,系統(tǒng)又回到一致的狀態(tài)。這樣,系統(tǒng)的狀態(tài)對于客戶來說,始終是一致的。
          • 隔離性( isolated):使得并發(fā)執(zhí)行的事務(wù),彼此無法看到對方的中間狀態(tài)。保證了并發(fā)執(zhí)行的事務(wù)順序執(zhí)行,而不會導(dǎo)致系統(tǒng)狀態(tài)不一致。
          • 持久性( durable):保證了事務(wù)完成后所作的改動都會被持久化,即使是發(fā)生災(zāi)難性的失敗??苫謴?fù)性資源保存了一份事務(wù)日志,如果資源發(fā)生故障,可以通過日志來將數(shù)據(jù)重建起來。

          2. 事務(wù)應(yīng)用
           

          事務(wù)服務(wù)支持的應(yīng)用由下列實體組成:

          • 事務(wù)客戶(TC,Transactional Client)
          • 事務(wù)對象(TO,Transactional Objects)
          • 可恢復(fù)對象(Recoverable Objects)
          • 提供事務(wù)支持的服務(wù)器(Transactional Servers)
          • 可恢復(fù)資源服務(wù)器(Recoverable Servers)

          下圖展示了一個簡單的事務(wù)應(yīng)用,包含了基本的事務(wù)元素:


          • 事務(wù)客戶:事務(wù)客戶是一個獨(dú)立的程序,調(diào)用參與事務(wù)的多個事務(wù)對象。發(fā)起事務(wù)的程序被稱為事務(wù)發(fā)起者(Transaction Originator)。
          • 事務(wù)對象:指那些在事務(wù)范圍內(nèi)行為會被影響的對象。事務(wù)對象自身包含了對持久化數(shù)據(jù)的操作或者通過事務(wù)請求間接對持久化數(shù)據(jù)進(jìn)行操作。事務(wù)服務(wù)并不要求所有的事務(wù)請求都具有事務(wù)性的行為。與事務(wù)對象相對的是非事務(wù)對象。
          • 可恢復(fù)對象(Recoverable Objects)和資源對象(Resource Objects):如果事務(wù)提交和事務(wù)的回滾將影響某個對象里面的數(shù)據(jù),那么這個對象稱為一個可恢復(fù)對象。一個對象可以是事務(wù)對象而不是可恢復(fù)對象,因為事務(wù)對象可以使用其他的可恢復(fù)對象??苫謴?fù)對象必須將自己注冊為事務(wù)服務(wù)中的一個資源對象,才可以參與到事務(wù)中。
          • 支持事務(wù)的服務(wù)器:例如應(yīng)用服務(wù)器
          • 可恢復(fù)服務(wù)器:例如數(shù)據(jù)庫

          3. 事務(wù)服務(wù)提供的功能
           

          事務(wù)服務(wù)提供下列操作:

          • 控制事務(wù)的范圍和持續(xù)時間
          • 讓多個對象參與到一個單獨(dú)的原子性事務(wù)中
          • 將對象內(nèi)部狀態(tài)的改變同事務(wù)相聯(lián)系
          • 協(xié)調(diào)事務(wù)完成

          3.1事務(wù)模型

          • 平面型事務(wù)模型整個事務(wù)是一個整體,不可劃分為子事務(wù)。
          • 嵌套式事務(wù)模型嵌套有子事務(wù),子事務(wù)中還可以嵌套有子事務(wù),整個是一個樹形結(jié)構(gòu)。旅行計劃問題:
            • 購買從美國波士頓到美國紐約的火車票
            • 購買從美國紐約到英國倫敦的飛機(jī)票
            • 購買從英國倫敦到法國巴黎的氣艇票
            • 發(fā)現(xiàn)沒有飛往法國巴黎的氣艇票
            這對于平面型事務(wù)來說,只能有一個選擇:事務(wù)失敗。這樣由于沒有飛往巴黎的氣艇票,將會取消所有的出行計劃。但是在這里,完全可以采用其他的旅行方式(購買火車票或者飛機(jī)票)來代替氣艇。因此需要一個更加健壯的事務(wù)模型來解決這個問題??梢詫⒄麄€事務(wù)劃分為若干個子事務(wù),整個事務(wù)可以重新執(zhí)行單個子事務(wù)來嘗試完成事務(wù),如果最終某個單個子事務(wù)無法完成,則整個事務(wù)失敗。
          • 其他事務(wù)模型
            鎖鏈?zhǔn)侥P?、傳奇式模型等?

          3.2 事務(wù)的終止

          通過發(fā)出提交請求或回滾請求來終止事務(wù)。通常,事務(wù)是由發(fā)起事務(wù)的客戶(事務(wù)發(fā)起者)來終止的。

          3.3事務(wù)的完整性

          某些事務(wù)服務(wù)的實現(xiàn)為了保證事務(wù)的完整性,在事務(wù)服務(wù)接口的使用上施加了一些限制。這稱為checked事務(wù)行為。例如,在事務(wù)的所有任務(wù)完成之前提交事務(wù)會導(dǎo)致數(shù)據(jù)不完整。事務(wù)服務(wù)的Checked實現(xiàn)會阻止事務(wù)的過早提交。其他事務(wù)服務(wù)的實現(xiàn)則完全依賴應(yīng)用程序來提供事務(wù)的完整性保證,這稱為unchecked事務(wù)行為。

          3.4事務(wù)的上下文

          事務(wù)上下文惟一標(biāo)識了一個事務(wù),保存了事務(wù)的當(dāng)前狀態(tài)。通過查詢事務(wù)上下文,可以得知自身是否處于事務(wù)中,所在事務(wù)的狀態(tài)以及其他一些有用的信息。

          事務(wù)上下文可以作為事務(wù)操作調(diào)用的一部分隱式地傳遞給事務(wù)對象。事務(wù)服務(wù)也允許程序員將事務(wù)上下文作為事務(wù)請求的顯示參數(shù)來傳遞。

          4. 分布式事務(wù)
           

          分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點之上。為了實現(xiàn)分布式事務(wù),需要使用下面將介紹的兩階段提交協(xié)議。

          • 階段一:開始向事務(wù)涉及到的全部資源發(fā)送提交前信息。此時,事務(wù)涉及到的資源還有最后一次機(jī)會來異常結(jié)束事務(wù)。如果任意一個資源決定異常結(jié)束事務(wù),則整個事務(wù)取消,不會進(jìn)行資源的更新。否則,事務(wù)將正常執(zhí)行,除非發(fā)生災(zāi)難性的失敗。為了防止會發(fā)生災(zāi)難性的失敗,所有資源的更新都會寫入到日志中。這些日志是永久性的,因此,這些日志會幸免遇難并且在失敗之后可以重新對所有資源進(jìn)行更新。
          • 階段二:只在階段一沒有異常結(jié)束的時候才會發(fā)生。此時,所有能被定位和單獨(dú)控制的資源管理器都將開始執(zhí)行真正的數(shù)據(jù)更新。

          在分布式事務(wù)兩階段提交協(xié)議中,有一個主事務(wù)管理器負(fù)責(zé)充當(dāng)分布式事務(wù)協(xié)調(diào)器的角色。事務(wù)協(xié)調(diào)器負(fù)責(zé)整個事務(wù)并使之與網(wǎng)絡(luò)中的其他事務(wù)管理器協(xié)同工作。


          為了實現(xiàn)分布式事務(wù),必須使用一種協(xié)議在分布式事務(wù)的各個參與者之間傳遞事務(wù)上下文信息,IIOP便是這種協(xié)議。這就要求不同開發(fā)商開發(fā)的事務(wù)參與者必須支持一種標(biāo)準(zhǔn)協(xié)議,才能實現(xiàn)分布式的事務(wù)。

          以上從事務(wù)整體描述的角度簡要介紹了事務(wù)服務(wù)產(chǎn)生的動機(jī)、事務(wù)服務(wù)的應(yīng)用和事務(wù)服務(wù)的功能,下面以J2EE中的事務(wù)服務(wù)為例對事務(wù)的實現(xiàn)作簡要的介紹。

           

          第II部分 J2EE中的事務(wù)服務(wù)
           

          簡介
           

          Java TM2 Platform, Enterprise Edition(J2EE)簡化了分布式事務(wù)管理應(yīng)用程序的編寫。J2EE包括了兩套規(guī)范,用來支持分布式的事務(wù),一種是Java Transaction API(JTA),另一種是Java Transaction Service(JTS)。JTA是一種高層的,與實現(xiàn)無關(guān)的,與協(xié)議無關(guān)的API,應(yīng)用程序和應(yīng)用服務(wù)器可以使用JTA來訪問事務(wù)。JTS則規(guī)定了支持JTA的事務(wù)管理器的實現(xiàn)規(guī)范,在高層API之下實現(xiàn)了OMG Object Transaction Service(OTS) 1.1規(guī)范的Java映射。JTS使用Internet Inter-ORB Protocol(IIOP)來傳播事務(wù)。作為J2EE平臺實現(xiàn)的一部分,SUN實現(xiàn)了一個支持JTS的事務(wù)管理器,同時還實現(xiàn)了JTA。

          JTA和JTS讓J2EE應(yīng)用服務(wù)器完成事務(wù)管理,這樣就使得組件開發(fā)人員擺脫了事務(wù)管理的負(fù)擔(dān)。開發(fā)者只需在部署描述符中聲明事務(wù)管理屬性,便可以使得EJB組件參與到事務(wù)之中,由應(yīng)用服務(wù)器來負(fù)責(zé)事務(wù)的管理。

          • JTS規(guī)范定義了事務(wù)管理器的實現(xiàn)。JTS規(guī)范中定義的事務(wù)管理器在高層支持JTA接口規(guī)范,在底層則實現(xiàn)了OTS1.1(CORBA Object Transaction Service)的標(biāo)準(zhǔn)Java映射。OMG使用IDL(接口定義語言)定義了事務(wù)服務(wù)語言中性的實現(xiàn),JTS則對這個IDL的事務(wù)服務(wù)實現(xiàn)作了標(biāo)準(zhǔn)的Java映射。JTS使用OTS接口實現(xiàn)了互操作和移植性。OTS接口定義了一組標(biāo)準(zhǔn)的機(jī)制,使得JTS事務(wù)管理器之間可以使用IIOP(Internet InterORB協(xié)議)來生成并傳播事務(wù)上下文。
          • 從事務(wù)管理器的角度出發(fā),事務(wù)服務(wù)的具體實現(xiàn)是不需要暴露出來的,只需要定義高層接口,使得事務(wù)服務(wù)的用戶可以驅(qū)動事務(wù)界限、資源獲取、事務(wù)同步和事務(wù)恢復(fù)過程。JTA的目的是定義事務(wù)管理器所要求的本地Java接口,從而在企業(yè)級分布計算環(huán)境中支持事務(wù)管理。下圖中的小半圓代表JTA規(guī)范。


          J2EE事務(wù)服務(wù)的層次關(guān)系
           

          企業(yè)級Java中間件的分布式事務(wù)服務(wù)包括五層:事務(wù)管理器(Transaction Manager)、應(yīng)用服務(wù)器(Application Server)、資源管理器(Resource Manager)、應(yīng)用程序(Application Program)和通信資源管理器(Communication Resource Manager)。每一層都通過實現(xiàn)一組事務(wù)API和相關(guān)機(jī)制參與到分布式事務(wù)處理系統(tǒng)中。

          • 事務(wù)管理器:是一個系統(tǒng)級的組件,是事務(wù)服務(wù)的訪問點。提供了一組服務(wù)和相關(guān)的管理機(jī)制,用于支持事務(wù)劃分、事務(wù)資源管理、事務(wù)同步和事務(wù)上下文的傳播。
          • 應(yīng)用服務(wù)器(或者稱為TP monitor)提供了支持應(yīng)用程序運(yùn)行環(huán)境的基礎(chǔ)設(shè)施,這個運(yùn)行環(huán)境包括了事務(wù)狀態(tài)管理。應(yīng)用服務(wù)器的一個例子是EJB服務(wù)器。
          • 資源管理器(通過資源適配器[Resource Adapter],資源適配器類似于數(shù)據(jù)庫連接)為應(yīng)用程序提供了對資源的訪問。資源管理器通過實現(xiàn)一組事務(wù)資源接口來參與到分布式事務(wù)中。事務(wù)管理器使用這組事務(wù)資源接口在處理事務(wù)聯(lián)系、事務(wù)完成和事務(wù)恢復(fù)的相關(guān)工作。資源管理器的一個例子是關(guān)系數(shù)據(jù)庫服務(wù)器。
          • 基于組件的事務(wù)性應(yīng)用運(yùn)行在應(yīng)用服務(wù)器環(huán)境中,需要依賴應(yīng)用服務(wù)器通過事務(wù)屬性聲明設(shè)置所提供的事務(wù)管理支持。這種類型應(yīng)用的典型例子是EJB。除此之外,一些獨(dú)立的Java客戶端程序需要使用應(yīng)用服務(wù)器或事務(wù)管理器所提供的高層接口來控制事務(wù)界限。
          • 通訊資源管理器(CRM)支持事務(wù)上下文的傳播和事務(wù)服務(wù)的訪問請求。JTA文檔中沒有規(guī)定通信的要求。請參考JTS規(guī)范[2]獲得有關(guān)事務(wù)管理器之間互操作的詳細(xì)信息。

          從事務(wù)管理器的角度出發(fā),事務(wù)服務(wù)的具體實現(xiàn)是不需要暴露出來的,只需要定義高層接口,使得事務(wù)服務(wù)的用戶可以驅(qū)動事務(wù)界限、資源獲取、事務(wù)同步和事務(wù)恢復(fù)過程。JTA的目的是定義事務(wù)管理器所要求的本地Java接口,從而在企業(yè)級分布計算環(huán)境中支持事務(wù)管理。下圖中的小半圓代表JTA規(guī)范。


          JTS中規(guī)定的事務(wù)管理器的實現(xiàn)
           

          本節(jié)從事務(wù)管理器實現(xiàn)者的角度描述了實現(xiàn)方面的要求。如下圖,事務(wù)管理器必須實現(xiàn)JTA接口,用于支持應(yīng)用服務(wù)器和資源管理器。不要求實現(xiàn)對JDBC 1.0 Driver和非JTA資源管理器支持。也不要求實現(xiàn)對各種CORBA應(yīng)用實體的支持,如事務(wù)客戶端(Transactional Client)、事務(wù)服務(wù)器(Transactional Server)和恢復(fù)服務(wù)器(Recoverable Server)。


          Java Transaction API
           

          Java Transaction API由三部分組成:高層的應(yīng)用事務(wù)劃分接口(供事務(wù)客戶使用)、高層的事務(wù)管理器接口(供應(yīng)用服務(wù)器使用)和X/Open XA協(xié)議的標(biāo)準(zhǔn)Java映射(供事務(wù)性資源管理器使用)。

          4.1 UserTransaction接口

          Javax.transaction.UserTransaction接口使得應(yīng)用程序能夠編程控制事務(wù)邊界。這個接口可以由Java客戶端程序或者EJB來使用。

          4.1.1在EJB Server中的UserTransaction支持

          EJB中對事務(wù)的管理有兩種類型:

          1. Bean自管理事務(wù)對于自管理事務(wù)的EJB,需要從EJB上下文中獲取UserTransaction的接口引用,由自己負(fù)責(zé)完成事務(wù)的開始、提交或者回滾。
            try {javax.transaction.UserTransaction userTran = ctx.getUserTransaction();userTran.begin();… //執(zhí)行事務(wù)性的程序邏輯userTran.commit();}catch(Exception e) {	userTran.rollBack();	throw new Exception("……");}
            EJB這樣處理事務(wù)稱為編程型事務(wù)。
          2. 由容器負(fù)責(zé)事務(wù)管理對于這樣的EJB,只需在其部署描述符中指定所需的事務(wù)相關(guān)屬性,便可由EJB容器代替EJB進(jìn)行事務(wù)管理。這稱為聲明式事務(wù)。

          4.1.2 事務(wù)客戶端中的UserTransaction支持

          Java客戶端程序需要首先通過JNDI來獲得UserTransaction對象的引用,然后使用該對象的方法完成事務(wù)的開始、提交或者回滾。

          java.util.Properties env = …Context ctx = new InitialContext(env);Javax.transaction.UserTransaction userTran = (javax.transaction.UserTransaction)ctx.lookup("javax.transaction.UserTransaction");userTran.commit()try {	userTran.commit();}catch(Exception e) {	userTran.rollBack();	throw new Exception("……");}

          4.2 TransactionManager接口

          應(yīng)用服務(wù)器使用javax.transaction.TransactionManager接口來代表受控的應(yīng)用程序控制事務(wù)的邊界。例如,EJB容器為事務(wù)性EJB組件管理事務(wù)狀態(tài)。

          4.3 Transaction接口

          使用Transaction接口可以執(zhí)行與目標(biāo)對象相關(guān)聯(lián)的事務(wù)操作。

          4.4 XAResource接口

          Javax.transaction.xa.XAResource接口是基于X/Open CAE規(guī)范(分布式事務(wù)處理:XA規(guī)范)工業(yè)標(biāo)準(zhǔn)XA接口的Java映射。 XAResource接口定義了分布式事務(wù)處理環(huán)境(DTP)中資源管理器和事務(wù)管理器之間是如何交互的。資源管理器的資源適配器實現(xiàn)了XAResource接口,將事務(wù)同事務(wù)資源聯(lián)系起來,類似關(guān)系數(shù)據(jù)庫的一個連接。


          4.5 Xid接口

          Javax.transaction.xa.Xid接口是X/Open事務(wù)標(biāo)識符XID結(jié)構(gòu)的Java映射。這個接口由事務(wù)管理器和資源管理器來使用,對于應(yīng)用程序和應(yīng)用服務(wù)器而言這個接口是不可見的。

          posted @ 2006-10-23 09:42 joeyeezhang 閱讀(279) | 評論 (0)編輯 收藏

          第14章 事務(wù)

          Dale Green著

          JSP WU 譯

          一個典型的企業(yè)應(yīng)用程序在一個或多個數(shù)據(jù)庫中訪問和存儲信息。因為這些信息對于商業(yè)操作非常重要,它必須精確、實時、可靠。如果允許多個程序同時更新相同的數(shù)據(jù),就會破壞數(shù)據(jù)的完整性。如果在一個商業(yè)交易處理過程中,部分?jǐn)?shù)據(jù)被更新后系統(tǒng)崩潰也將破壞數(shù)據(jù)完整性。事務(wù)通過預(yù)防以上情況的發(fā)生確保數(shù)據(jù)的完整性。事務(wù)控制多個應(yīng)用程序?qū)?shù)據(jù)庫的并發(fā)操作。如果發(fā)生系統(tǒng)崩潰,事務(wù)確保恢復(fù)的數(shù)據(jù)崩潰前將保持一致。

          本章內(nèi)容:

          什么是事務(wù)

          容器管理事務(wù)

          事務(wù)的屬性

          回滾容器管理事務(wù)

          同步會話bean實例變量

          容器管理事務(wù)中不允許使用的方法

          Bean 管理事務(wù)

          JDBC事務(wù)

          JTA? 事務(wù)

          非提交返回事務(wù)

          在Bean管理事務(wù)中不允許使用的方法

          企業(yè)Bean事務(wù)摘要

          事務(wù)超時

          隔離級別

          更新多個數(shù)據(jù)庫

          Web 組件事務(wù)

          ?

          一.什么是事務(wù)

          模擬一個商業(yè)交易,應(yīng)用程序需要完成幾個步驟。例如,一個財物應(yīng)用程序,可能會將資金從經(jīng)常性帳戶(checking account)轉(zhuǎn)到儲蓄性賬戶(saving account),該交易的偽碼表示如下:

          begin transaction

          debit checking account

          credit savings account

          update history log

          commit transaction

          三個步驟要么全部完成,要么一個都不做。否則數(shù)據(jù)完整性將被破壞。因為事務(wù)中的所有步驟被看作一個統(tǒng)一的整體,所以事務(wù)一般被定義為一個不可分割的工作單元。

          結(jié)束事務(wù)有兩種方法:提交或者回滾。當(dāng)一個事務(wù)提交,數(shù)據(jù)修改被保存。如果事務(wù)中有一個步驟失敗,事務(wù)就回滾,這個事務(wù)中的已經(jīng)執(zhí)行的動作被撤銷。例如在上面的偽碼中,如果在處理第二步的時候硬盤驅(qū)動器崩潰,事務(wù)的第一步將被撤銷。盡管事務(wù)失敗,數(shù)據(jù)的完整性不會被破壞,因為帳目仍然保持平衡。

          前面?zhèn)未a中,begin和commit標(biāo)明了事務(wù)的界限。當(dāng)設(shè)計一個企業(yè)Bean的時候,你要決定怎樣通過容器管理或bean管理事務(wù)來指定事務(wù)界限。

          二.容器管理事務(wù)

          在容器管理事務(wù)的企業(yè)Bean中,EJB容器來設(shè)定事務(wù)界線。你能夠在任何企業(yè)Bean中使用容器管理事務(wù):會話Bean、實體Bean或者 Message-driven Bean。容器管理事務(wù)簡化了開發(fā),因為企業(yè)Bean不用編碼來顯式制定事務(wù)界限。代碼不包括開始結(jié)束事務(wù)的語句。典型的,容器會在一個企業(yè)Bean的方法被調(diào)用前立即開始一個事務(wù),在這個方法退出以前提交這個事務(wù)。每個方法都關(guān)聯(lián)一個事務(wù)。在一個方法中不允許嵌套或多個的事務(wù)存在。容器管理事務(wù)不需要所有的方法都關(guān)聯(lián)事務(wù)。當(dāng)部署一個Bean時,通過設(shè)定部署描述符中的事務(wù)屬性來決定方法是否關(guān)聯(lián)事務(wù)和如何關(guān)聯(lián)事務(wù)。

          事務(wù)的屬性

          一個事務(wù)的屬性控制了事務(wù)的使用范圍。圖 14-1說明了為什么控制事務(wù)的范圍很重要。圖中,method-A開始一個事務(wù)然后調(diào)用Bean-2中的method-B.它運(yùn)行在method-A開始的事務(wù)中還是重新執(zhí)行一個新的事務(wù)?結(jié)果要看method-B中的事務(wù)屬性。

          圖 14-1 Transaction Scope

          一個事務(wù)屬性可能有下面的屬性之一:

          ☆ Required

          ☆ RequiresNew

          ☆ Mandatory

          ☆ NotSupported

          ☆ Supports

          ☆ Never

          Required

          如果客戶端正在一個運(yùn)行的事務(wù)中調(diào)用一個企業(yè)Bean的方法,這個方法就在這個客戶端的事務(wù)中執(zhí)行。如果客戶端不關(guān)聯(lián)一個事務(wù),這個容器在運(yùn)行該方法前開始一個新的事務(wù)。

          Required屬性在許多事務(wù)環(huán)境中可以很好的工作,因此你可以把它作為一個默認(rèn)值,至少可以在早期開發(fā)中使用。因為事務(wù)的屬性是在部署描述符中聲明的,在以后的任何時候修改它們都很容易。

          RequiresNew

          如果客戶端在一個運(yùn)行的事務(wù)中調(diào)用企業(yè)Bean的方法,容器的步驟是:

          1.掛起客戶端的事務(wù)

          2.開始一個新的事務(wù)

          3.代理方法的調(diào)用

          4.方法完成后重新開始客戶端的事務(wù)

          如果客戶端不關(guān)聯(lián)一個事務(wù),容器運(yùn)行這個方法以前同樣開始一個新的事務(wù)。如果你想保證該方法在任何時候都在一個新事物中運(yùn)行,使用RequiresNew屬性。

          Mandatory

          如果客戶端在一個運(yùn)行的事務(wù)中調(diào)用企業(yè)Bean的方法,這個方法就在客戶端的事務(wù)中執(zhí)行。如果客戶端不關(guān)聯(lián)事務(wù),容器就拋出TransactionRequiredException 異常。

          如果企業(yè)Bean的方法必須使用客戶端的事務(wù),那么就使用Mandatory屬性。

          NotSupported

          如果客戶端在一個運(yùn)行的事務(wù)中調(diào)用企業(yè)Bean的方法,這個容器在調(diào)用該方法以前掛起客戶端事務(wù)。方法執(zhí)行完后,容器重新開始客戶端的事務(wù)。

          如果客戶端不關(guān)聯(lián)事務(wù),容器在方法運(yùn)行以前不會開始一個新的事務(wù)。為不需要事務(wù)的方法使用NotSupported屬性。因為事務(wù)包括整個過程,這個屬性可以提高性能。

          Supports

          如果客戶端在一個運(yùn)行的事務(wù)中調(diào)用企業(yè)Bean的方法,這個方法在客戶端的事務(wù)中執(zhí)行,如果這個客戶端不關(guān)聯(lián)一個事務(wù),容器運(yùn)行該方法前也不會開始一個新的事務(wù)。因為該屬性使方法的事務(wù)行為不確定,你應(yīng)該謹(jǐn)慎使用Supports屬性。

          Never

          如果客戶端在一個運(yùn)行的事務(wù)中調(diào)用企業(yè)Bean的方法,容器將拋出RemoteException異常。如果這個客戶端不關(guān)聯(lián)一個事務(wù),容器運(yùn)行該方法以前不會開始一個新的事務(wù)。

          Summary of Transaction Attributes(事務(wù)屬性概要)

          表 14-1 列出了事務(wù)屬性的影響。事務(wù)T1和T2都被容器控制。T1是調(diào)用企業(yè)Bean方法的客戶端的事務(wù)環(huán)境。在大多數(shù)情況下,客戶端是其它的企業(yè)Bean。T2是在方法執(zhí)行以前容器啟動的事務(wù)。在表 14-1中,“None”的意思是這個商業(yè)方法不在容器控制事務(wù)中執(zhí)行。然而,該商業(yè)方法中的數(shù)據(jù)庫操作可能在DBMS管理控制的事務(wù)中執(zhí)行。

          Setting Transaction Attributes (設(shè)定事務(wù)屬性)

          因為事務(wù)屬性被保存在配置描述符中,他們會在J2EE應(yīng)用程序開發(fā)的幾個階段被改變:創(chuàng)建企業(yè)Bean,應(yīng)用程序裝配和部署。然而, 當(dāng)創(chuàng)建這個Bean的時候指定它的屬性是企業(yè)Bean開發(fā)者的責(zé)任。只有將該組件裝配到一個更大的應(yīng)用程序時可以由開發(fā)者修改該屬性,而不要期待J2EE應(yīng)用程序部署者來指定該事務(wù)屬性。

          表 14-1 事物屬性和范圍?

          事務(wù)屬性

          客戶端事務(wù)

          商業(yè)方法事務(wù)

          Required

          None

          T2

          T1

          T1

          RequiresNew

          None

          T2

          T1

          T2

          Mandatory

          None

          error

          T1

          T1

          NotSupported

          None

          None

          T1

          None

          Supports

          None

          None

          T1

          T1

          Never

          None

          None

          T1

          Error

          你可以為整個企業(yè)Bean或者單個方法指定事務(wù)屬性。如果你為整個企業(yè)Bean和它某個方法各指定一個事務(wù)屬性,為該方法指定的事務(wù)屬性優(yōu)先。當(dāng)為單個方法指定事務(wù)屬性時,不同類型企業(yè)Bean的要求也不同。會話Bean需要為商業(yè)方法定義屬性屬性,但create方法不需要定義事務(wù)屬性。實體Bean需要為商業(yè)方法、create方法、remove方法和查找(finder)方法定義事務(wù)屬性。Message-driven Bean需要為onMessage方法指定屬性事務(wù),而且只能是Required和NotSupported其中之一。

          容器管理事務(wù)的回滾

            在以下兩中情況下,事務(wù)將回滾。第一,如果產(chǎn)生一個系統(tǒng)異常,容器將自動回滾該事務(wù)。第二,通過調(diào)用EJBContext接口SetRollbackOnly方法,Bean方法通知容器回滾該事務(wù)。如果Bean拋出一個應(yīng)用異常,事務(wù)將不會自動回滾,但可以調(diào)用SetRollbackOnly回滾。對于一個系統(tǒng)和應(yīng)用的異常,參考第5章的處理異常一節(jié)。

          下面這個例子的代碼在j2eetorial/examples/src/bank目錄下。在命令行窗口下進(jìn)入j2eetutorial/examples目錄執(zhí)行ant bank命令編譯這些代碼,執(zhí)行 ant create-bank-table命令創(chuàng)建要用到的表。一個BankApp.ear樣本文件在j2eetutorial/examples/ears目錄下。通過BnankEJB 實例的transferToSaving方法來說明setRollbackOnly方法的用法。如果余額檢查出現(xiàn)負(fù)數(shù),那么transferToSaving調(diào)用setRollBackOnly回滾事務(wù)并拋出一個應(yīng)用程序異常(InsufficientBalanceException)。updateChecking和updateSaving 方法更新數(shù)據(jù)表。如果更新失敗,這兩個方法拋出SQLException異常而transgerToSaving方法拋出EJBException異常。因為EJBException是一個系統(tǒng)異常,它使容器事務(wù)自動回滾事務(wù)。TransferTuSaving 方法的代碼如下:

          public void transferToSaving(double amount) throws

          ?? InsufficientBalanceException? {

          ? checkingBalance -= amount;

          ?? savingBalance += amount;

          ? try {

          ???? ?updateChecking(checkingBalance);

          ????? if (checkingBalance < 0.00) {

          ???????? context.setRollbackOnly();

          ???????? throw new InsufficientBalanceException();

          ????? }

          ????? updateSaving(savingBalance);

          ?? } catch (SQLException ex) {

          ?????? throw new EJBException

          ??????????("Transaction failed due to SQLException: "

          ??????????+ ex.getMessage());

          ?? }

          }

          當(dāng)一個容器回滾一個事務(wù),它總是會撤消事務(wù)中已執(zhí)行的SQL語句造成的數(shù)據(jù)改動。然而,僅僅在實體Bean中容器回滾才會改變Bean的實例變量(與數(shù)據(jù)庫狀態(tài)有關(guān)的字段)。(這是因為容器會自動調(diào)用實體Bean的ejbLoad方法,該方法從數(shù)據(jù)庫中讀入實例變量的值。)當(dāng)發(fā)生回滾,會話Bean必須顯式重新設(shè)置所有被事務(wù)改動過的實例變量。重設(shè)會話Bean的實例變量最簡單的方法是實現(xiàn)SessionSynchronization接口。

          同步會話Bean的實例變量

          SessionSynchronization接口是可選的,它允許你在Bean的實例變量和它們在數(shù)據(jù)庫中的相應(yīng)值之間保持同步。容器會在事務(wù)的幾個主要階段調(diào)用SessionSynchronization接口的對應(yīng)方法—afterBegin、beforeCompletion和afterCompletion。

          AfterBegin方法通知Bean實例一個新的事務(wù)已經(jīng)開始。容器在調(diào)用商業(yè)方法以前立即調(diào)用afterBegin方法。afterBegin方法是從數(shù)據(jù)庫中讀入實例變量值的最佳位置。例如,在BanBean類中,在afterBegin方法中從讀入了CheckingBalance和savingBalance變量的值:

          ? public void afterBegin() {

          ? System.out.println("afterBegin()");

          ?? try {

          ????? checkingBalance = selectChecking();

          ????? savingBalance = selectSaving();

          ?? } catch (SQLException ex) {

          ?????? throw new EJBException("afterBegin Exception: " +

          ?????????? ex.getMessage());

          ?? }

          }

          商業(yè)方法方法完成以后,容器調(diào)用beforeCompletion方法,不過僅僅是在事務(wù)提交以前。BeforeCompletion方法是會話Bean回滾事務(wù)的最后時機(jī)(通過調(diào)用setRollbackOnly方法).如果會話Bean還沒有實例變量的值更新數(shù)據(jù)庫,就在beforCompletion方法里實現(xiàn)。

          afterCompletion方法指出事務(wù)已經(jīng)完成。它只有一個布爾型的參數(shù),true表示事務(wù)被正確提交false表示事務(wù)回滾。如果事務(wù)回滾,會話Bean可以在該方法中從數(shù)據(jù)庫中重新讀取它的實例變量值:

          public void afterCompletion(boolean committed) {

          ? System.out.println("afterCompletion: " + committed);

          ?? if (committed == false) {

          ????? try {

          ???????? checkingBalance = selectChecking();

          ???????? savingBalance = selectSaving();

          ????? } catch (SQLException ex) {

          ????????? throw new EJBException("afterCompletion SQLException:

          ???????? " + ex.getMessage());

          ????? }

          ?? }

          }

          容器管理事務(wù)中不允許使用的方法

          你不應(yīng)該調(diào)用可能干擾容器設(shè)置的事務(wù)界線的方法,下面列出了所有禁止的方法:

          ☆ java.sql.Connection接口的commit、setAutoCommit和rollback方法

          ☆ javax.ejb.EJBContext 接口的getUserTransaction方法

          ☆ javax.transaction.UserTransaction接口的所有方法

          然而你可以在Bean管理事務(wù)中使用這些方法設(shè)置事務(wù)界限。

          三.Bean管理事務(wù)

          在一個Bean管理事務(wù)中,會話Bean或者M(jìn)essage-driven Bean是用代碼顯式設(shè)置事務(wù)界線的。實體Bean不能使用Bean管理事務(wù),只能使用容器管理的事務(wù)。雖然容器管理事務(wù)Bean需要較少的代碼,但它也有一個局限:方法執(zhí)行時,它只能關(guān)聯(lián)一個事務(wù)或不關(guān)聯(lián)任何事務(wù)。如果這個局限使你Bean編碼困難,你應(yīng)該考慮使用Bean管理事務(wù)。(譯者:實際上J2EE服務(wù)器不支持嵌套事物,那么Bean管理事務(wù)唯一的優(yōu)點就是可以在一個方法中一次啟動多個事務(wù))

          下面的偽碼很好說明了Bean管理事對商業(yè)邏輯的緊密控制。通過檢查各種條件,偽碼決定是否在商業(yè)方法中啟動或停止不同的事務(wù)。

          begin transaction

          ...

          update table-a

          ...

          if (condition-x)

          ?? commit transaction

          else if (condition-y)

          ?? update table-b

          ?? commit transaction

          else

          ?? rollback transaction

          ?? begin transaction

          ?? update table-c

          ?? commit transaction

          當(dāng)為會話Bean或Message-driver Bean的Bean管理事務(wù)編碼時,你必須決定是使用jdbc或者JTA事務(wù)。下面的內(nèi)容論述了兩種事務(wù)類型。

          JDBC 事務(wù)

          JDBC事務(wù)通過DBMS事務(wù)管理器來控制。你可能會為了使用會話Bean中的原有代碼而采用JDBC事務(wù)將這些代碼封裝到一個事務(wù)中。使用JDBC事務(wù),要調(diào)用java.sql.Connection接口的commit和rollback方法。事務(wù)啟動是隱式的。一個事務(wù)的從最近的提交、回滾或連接操作后的第一個SQL的語句開始。(這個規(guī)則通常是正確的,但可能DBMS廠商的不同而不同)

          代碼資源

          下面的例子在j2eetutorial/examples/src/ejb/warehouse目錄下。在命令行窗口中進(jìn)入j2eetutorial/examples目錄執(zhí)行ant bank命令編譯這些源文件,執(zhí)行ant create-warehouse-table命令創(chuàng)建要用到的表,一個樣本W(wǎng)arehouseApp.ear文件在j2eetutorial/example/ears 目錄下。

          下面的代碼來自WarehouseEJB例子,一個會話Bean通過使用Connection接口的方法來劃定Bean管理事務(wù)界限。ship方法以調(diào)用名為con的連接對象的setAutoCommit方法開始,該方法通知DBMS不要自動提交每個SQL語句。接下來ship 方法更新order_item和inventory數(shù)據(jù)表。如果更新成功,這個事務(wù)就會被提交。如果出現(xiàn)異常,事務(wù)就回滾。

          public void ship (String productId, String orderId, int

          quantity) {

          ? try {

          ????? con.setAutoCommit(false);

          ????? updateOrderItem(productId, orderId);

          ????? updateInventory(productId, quantity);

          ????? con.commit();

          ?? } catch (Exception ex) {

          ?????? try {

          ????????? con.rollback();

          ????????? throw new EJBException("Transaction failed: " +

          ???????????? ex.getMessage());

          ?????? } catch (SQLException sqx) {

          ?????????? throw new EJBException("Rollback failed: " +

          ????????????? sqx.getMessage());

          ?????? }

          ?? }

          }

          JTA 事務(wù)

          JTA是Java Transaction API 的縮寫。這些API 允許你用獨(dú)立于具體的事務(wù)管理器實現(xiàn)的方法確定事務(wù)界限。J2EE SDK 事務(wù)管理器通過Java事務(wù)服務(wù)(Java Transaction Service, JTS)實現(xiàn)。但是你的代碼并不直接調(diào)用JTS中的方法,而是調(diào)用JTA方法來替代,JTA方法會調(diào)用底層的JTS實現(xiàn)。

          JTA事務(wù)被J2EE?事務(wù)管理器管理。你可能需要使用一個JTA事務(wù),因為它能夠統(tǒng)一操作不同廠商的數(shù)據(jù)庫。一個特定DBMS的事務(wù)管理器不能工作在不同種類的數(shù)據(jù)庫上。然而J2EE事務(wù)管理器仍然有一個限制——它不支持嵌套事務(wù)。就是說,它不能在前一個事務(wù)結(jié)束前啟動另一個事務(wù)。

          下面例子的源代碼在j2eetutorial/examples/src/ejb/teller目錄下,在命令行窗口進(jìn)入j2eetutorial/examples目錄,執(zhí)行ant teller命令編譯這些源文件,執(zhí)行ant create-bank-teller命令創(chuàng)建要用到的表。一個樣本TellerApp.ear文件在j2eetutorial/examples/ears目錄下。

          要自己確定事務(wù)界限,可以調(diào)用javax.transaction.UserTransaction接口的begin、commit和rollback方法來確定事務(wù)界限(該接口只能在SessionBean中使用,實體Bean不允許使用用戶自定義的)。下面選自TellerBean類的代碼示范了UserTransaction的用法。begin和commit方法確定了數(shù)據(jù)庫操作的事務(wù)界限,如果操作失敗則調(diào)用rollback回滾事務(wù)并拋出EJBException異常。

          public void withdrawCash(double amount) {

          ? UserTransaction ut = context.getUserTransaction();

          ? try {

          ????? ut.begin();

          ????? updateChecking(amount);

          ????? machineBalance -= amount;

          ????? insertMachine(machineBalance);

          ????? ut.commit();

          ?? } catch (Exception ex) {

          ?????? try {

          ????? ????ut.rollback();

          ?????? } catch (SystemException syex) {

          ?????????? throw new EJBException

          ????????????? ("Rollback failed: " + syex.getMessage());

          ?????? }

          ?????? throw new EJBException

          ????????? ("Transaction failed: " + ex.getMessage());

          ??? }

          }

          非提交返回事務(wù)

          使用Bean管理事務(wù)的無狀態(tài)會話Bean在事務(wù)返回前必須提交或者返回事務(wù),而有狀態(tài)的會話Bean沒有這個限制。

          對于使用JTA事務(wù)的有狀態(tài)會話Bean,Bean實例和事務(wù)的關(guān)聯(lián)越過大量用戶調(diào)用被保持,甚至被調(diào)用的每個商業(yè)方法都打開和關(guān)閉數(shù)據(jù)庫連接,該市無關(guān)聯(lián)也不斷開,直到事務(wù)完成(或回滾)。

          對于使用JDBC事務(wù)的有狀態(tài)會話Bean,JDBC連接越過用戶調(diào)用保持Bean和事務(wù)之間的關(guān)聯(lián)。連接關(guān)閉,事務(wù)關(guān)聯(lián)將被釋放。

          在Bean管理事務(wù)中不允許使用的方法

          在Bean管理的事務(wù)中不能調(diào)用EJBContext接口的getRollbackOnly和setRollbackOnly方法,這兩個方法只能在容器管理事務(wù)中被調(diào)用。在Bean管理事務(wù)中,應(yīng)調(diào)用UserTransaction接口的getStatus和rollback方法。

          四.企業(yè)Bean事務(wù)摘要

          如果你不能確定怎么在企業(yè)Bean中使用事務(wù),可以用這個小技巧:在Bean的部署描述符中,制定事務(wù)類型為容器管理,把整個Bean(所有方法)的事務(wù)屬性設(shè)置為Required。大多數(shù)情況下,這個配置可以滿足你的事務(wù)需求。

          表14-2列出了不同類型的企業(yè)Bean所允許使用的事務(wù)類型。實體Bean只能使用容器管理事務(wù),但可以在部署描述符中配置事務(wù)屬性,并可以調(diào)用EJBContext接口的setRollbackOnly方法來回滾事務(wù)。

          表 14-2 企業(yè)Bean 允許的事務(wù)類型

          企業(yè)Bean 類型

          容器管理事務(wù)

          Bean管理事務(wù)

          ?

          JTA

          JDBC

          ?

          實體Bean

          Y

          N

          N

          ?

          會話Bean

          Y

          Y

          Y

          ?

          Message-driven

          Y

          Y

          Y

          ?

          會話Bean既可以使用容器管理事務(wù)也可以使用Bean管理事務(wù)。Bean管理事務(wù)又有兩種類型:JDBC事務(wù)和JTA事務(wù)。JDBC事務(wù)使用Connection接口的commit和rollback方法來劃分事務(wù)界限。JTA事務(wù)使用UserTransaction接口的begin、commit和rollback方法來劃分事務(wù)界限。

          在Bean管理事務(wù)的會話Bean中,混合使用JTA事務(wù)和JDBC事務(wù)是可能的。但是我不推薦這樣使用,因為這樣會造成代碼的調(diào)試和維護(hù)都很困難。

          Message-driver Bean和會話Bean一樣既可以使用容器管理事務(wù)也可以使用Bean管理事務(wù)。

          五.事務(wù)超時

          對于容器管理事務(wù),事務(wù)超時間隔是通過設(shè)置default.properties文件中ransaction.timeout屬性的值來確定的,該文件在J2EE SDK安裝目錄的config子目錄下。如下例將事務(wù)超時間隔設(shè)置為5秒鐘:

          transaction.timeout=5

          這樣,當(dāng)事務(wù)在5秒鐘內(nèi)還沒有完成,容器將回滾該事務(wù)。

          J2EE SDK安裝后,超時間隔的缺省值為0,表示不計算超時,無論事務(wù)執(zhí)行多長時間,除非異常出錯回滾,一直等待事務(wù)完成。

          只有使用容器管理事務(wù)的企業(yè)Bean才會受到transaction.timeout屬性值的影響。Bean管理的JTA事務(wù)使用UserTransaction接口的setTransactionTimeout方法來設(shè)置事務(wù)超時間隔。

          六.隔離級別

          事務(wù)不僅保證事務(wù)界限內(nèi)的數(shù)據(jù)庫操作全部完成(或回滾)同時還隔離數(shù)據(jù)庫更新語句。隔離級別描述被修改的數(shù)據(jù)對其他事物的可見度。

          假如一個應(yīng)用程序在事務(wù)中修改一個顧客的電話號碼,在事務(wù)結(jié)束前另一個應(yīng)用程序要讀取該條記錄的電話號碼。那么第二個應(yīng)用程序是讀取修改過但還沒提交的數(shù)據(jù),還是讀取未修改前的老數(shù)據(jù)呢?答案就取決于事務(wù)的隔離級別。如果事務(wù)允許其他程序讀取未提交的數(shù)據(jù),會因為不用等待事務(wù)結(jié)束而提高性能,同時也有一個缺點,如果事務(wù)回滾,其他應(yīng)用程序讀取的將是錯誤的數(shù)據(jù)。

          容器管理持久性(CMP)的實體Bean的事務(wù)級別無法修改,它們使用DBMS的默認(rèn)個理解別,通常是READ_COMMITTED。

          Bean管理持久性(BMP)的實體Bean和兩種會話Bean都可以通過在程序中調(diào)用底層DBMS提供的API來設(shè)置事務(wù)級別。例如,一個DBMS可能允許你如下調(diào)用setTransactionIsolation方法將隔離級別設(shè)置成可讀取未提交數(shù)據(jù):

          Connection con;

          ...

          con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);

          不要在事務(wù)執(zhí)行期間更改隔離級別,通常隔離級別的更改會引起DBMS產(chǎn)生一次隱式提交。因為隔離級別的控制會跟具體的DBMS廠商不同而不同,具體的信息請參考DBMS的文檔。J2EE平臺規(guī)范不包括隔離級別標(biāo)準(zhǔn)。

          七.更新多個數(shù)據(jù)庫

          J2EE事務(wù)管理器控制著除了Bean管理的JDBC事務(wù)以外的所有企業(yè)Bean事務(wù),它允許企業(yè)Bean在同一個事務(wù)中更新多個數(shù)據(jù)庫。下面示范在單個事務(wù)中更新多個數(shù)據(jù)庫的兩個應(yīng)用。

          圖14-2中,客戶端調(diào)用Bean-A的商業(yè)方法,商業(yè)方法啟動一個事務(wù),更新數(shù)據(jù)庫X和Y,Bean-A的商業(yè)方法有調(diào)用Bean-B的商業(yè)方法,Bean-B的商業(yè)方法更新數(shù)據(jù)庫Z然后返回事務(wù)的控制權(quán)給Bean-A的商業(yè)方法,由Bean-A提交該事務(wù)。三個數(shù)據(jù)庫的更新都在同一個事務(wù)中發(fā)生。

          圖 14-2 更新多個數(shù)據(jù)庫

          圖14-3中,客戶端調(diào)用Bean-A的商業(yè)方法,該商業(yè)方法啟動一個事務(wù)并更新數(shù)據(jù)庫X,然后調(diào)用另一個J2EE服務(wù)器中的Bean-B的方法,該方法更新數(shù)據(jù)庫Y。J2EE服務(wù)器保證兩個數(shù)據(jù)庫的更新都在同一個事務(wù)中進(jìn)行(筆者認(rèn)為應(yīng)該是第一個J2EE服務(wù)器的事務(wù)管理器管理整個事物)。

          圖 14-3 跨越J2EE服務(wù)器更新多個數(shù)據(jù)庫

          八.Web 組件事務(wù)

          Web組件中劃分事務(wù)界限可以使用java.sql.Connection接口和javax.transaction.UserTransaction接口中的任意一個。跟Bean管理事務(wù)的會話Bean使用一樣的兩個接口。這兩個接口的使用方法參考前面幾節(jié)的內(nèi)容。Web組件事務(wù)的例子在第10章Servlet技術(shù)第四節(jié)共享信息的訪問數(shù)據(jù)庫小節(jié)講述過。

          posted @ 2006-10-20 16:39 joeyeezhang 閱讀(325) | 評論 (0)編輯 收藏

          TCP:傳輸控制協(xié)議 SOAP:簡單對象訪問協(xié)議 XML:The Extensible Markup Language(可擴(kuò)展標(biāo)識語言) HTML:超文本標(biāo)記語言(HypertextMarkupLanguage) JNDI:Java Naming and Directory Interface LDAP:Lightweight Directory Access Protocol 輕型目錄訪問協(xié)議 JMS:Java Messaging Service Java消息服務(wù) ODBC:Open Database Connectivity JDBC:Java版本的ODBC
          LDAP:Lightweight Directory Access Protocol (version 3)輕量級目錄訪問協(xié)議
          posted @ 2006-10-07 09:39 joeyeezhang 閱讀(323) | 評論 (0)編輯 收藏

          mime大全
          <mime-mapping>
          ??????? <extension>abs</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ai</extension>
          ??????? <mime-type>application/postscript</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>aif</extension>
          ??????? <mime-type>audio/x-aiff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>aifc</extension>
          ??????? <mime-type>audio/x-aiff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>aiff</extension>
          ??????? <mime-type>audio/x-aiff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>aim</extension>
          ??????? <mime-type>application/x-aim</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>art</extension>
          ??????? <mime-type>image/x-jg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>asf</extension>
          ??????? <mime-type>video/x-ms-asf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>asx</extension>
          ??????? <mime-type>video/x-ms-asf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>au</extension>
          ??????? <mime-type>audio/basic</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>avi</extension>
          ??????? <mime-type>video/x-msvideo</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>avx</extension>
          ??????? <mime-type>video/x-rad-screenplay</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>bcpio</extension>
          ??????? <mime-type>application/x-bcpio</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>bin</extension>
          ??????? <mime-type>application/octet-stream</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>bmp</extension>
          ??????? <mime-type>image/bmp</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>body</extension>
          ??????? <mime-type>text/html</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>cdf</extension>
          ??????? <mime-type>application/x-cdf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>cer</extension>
          ??????? <mime-type>application/x-x509-ca-cert</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>class</extension>
          ??????? <mime-type>application/java</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>cpio</extension>
          ??????? <mime-type>application/x-cpio</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>csh</extension>
          ??????? <mime-type>application/x-csh</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>css</extension>
          ??????? <mime-type>text/css</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>dib</extension>
          ??????? <mime-type>image/bmp</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>doc</extension>
          ??????? <mime-type>application/msword</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>dtd</extension>
          ??????? <mime-type>text/plain</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>dv</extension>
          ??????? <mime-type>video/x-dv</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>dvi</extension>
          ??????? <mime-type>application/x-dvi</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>eps</extension>
          ??????? <mime-type>application/postscript</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>etx</extension>
          ??????? <mime-type>text/x-setext</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>exe</extension>
          ??????? <mime-type>application/octet-stream</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>gif</extension>
          ??????? <mime-type>image/gif</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>gtar</extension>
          ??????? <mime-type>application/x-gtar</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>gz</extension>
          ??????? <mime-type>application/x-gzip</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>hdf</extension>
          ??????? <mime-type>application/x-hdf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>hqx</extension>
          ??????? <mime-type>application/mac-binhex40</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>htc</extension>
          ??????? <mime-type>text/x-component</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>htm</extension>
          ??????? <mime-type>text/html</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>html</extension>
          ??????? <mime-type>text/html</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>hqx</extension>
          ??????? <mime-type>application/mac-binhex40</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ief</extension>
          ??????? <mime-type>image/ief</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jad</extension>
          ??????? <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jar</extension>
          ??????? <mime-type>application/java-archive</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>java</extension>
          ??????? <mime-type>text/plain</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jnlp</extension>
          ??????? <mime-type>application/x-java-jnlp-file</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jpe</extension>
          ??????? <mime-type>image/jpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jpeg</extension>
          ??????? <mime-type>image/jpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jpg</extension>
          ??????? <mime-type>image/jpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>js</extension>
          ??????? <mime-type>text/javascript</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jsf</extension>
          ??????? <mime-type>text/plain</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>jspf</extension>
          ??????? <mime-type>text/plain</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>kar</extension>
          ??????? <mime-type>audio/x-midi</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>latex</extension>
          ??????? <mime-type>application/x-latex</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>m3u</extension>
          ??????? <mime-type>audio/x-mpegurl</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mac</extension>
          ??????? <mime-type>image/x-macpaint</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>man</extension>
          ??????? <mime-type>application/x-troff-man</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>me</extension>
          ??????? <mime-type>application/x-troff-me</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mid</extension>
          ??????? <mime-type>audio/x-midi</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>midi</extension>
          ??????? <mime-type>audio/x-midi</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mif</extension>
          ??????? <mime-type>application/x-mif</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mov</extension>
          ??????? <mime-type>video/quicktime</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>movie</extension>
          ??????? <mime-type>video/x-sgi-movie</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mp1</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mp2</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mp3</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpa</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpe</extension>
          ??????? <mime-type>video/mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpeg</extension>
          ??????? <mime-type>video/mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpega</extension>
          ??????? <mime-type>audio/x-mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpg</extension>
          ??????? <mime-type>video/mpeg</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>mpv2</extension>
          ??????? <mime-type>video/mpeg2</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ms</extension>
          ??????? <mime-type>application/x-wais-source</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>nc</extension>
          ??????? <mime-type>application/x-netcdf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>oda</extension>
          ??????? <mime-type>application/oda</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pbm</extension>
          ??????? <mime-type>image/x-portable-bitmap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pct</extension>
          ??????? <mime-type>image/pict</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pdf</extension>
          ??????? <mime-type>application/pdf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pgm</extension>
          ??????? <mime-type>image/x-portable-graymap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pic</extension>
          ??????? <mime-type>image/pict</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pict</extension>
          ??????? <mime-type>image/pict</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pls</extension>
          ??????? <mime-type>audio/x-scpls</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>png</extension>
          ??????? <mime-type>image/png</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pnm</extension>
          ??????? <mime-type>image/x-portable-anymap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>pnt</extension>
          ??????? <mime-type>image/x-macpaint</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ppm</extension>
          ??????? <mime-type>image/x-portable-pixmap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ppt</extension>
          ??????? <mime-type>application/powerpoint</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ps</extension>
          ??????? <mime-type>application/postscript</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>psd</extension>
          ??????? <mime-type>image/x-photoshop</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>qt</extension>
          ??????? <mime-type>video/quicktime</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>qti</extension>
          ??????? <mime-type>image/x-quicktime</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>qtif</extension>
          ??????? <mime-type>image/x-quicktime</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ras</extension>
          ??????? <mime-type>image/x-cmu-raster</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>rgb</extension>
          ??????? <mime-type>image/x-rgb</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>rm</extension>
          ??????? <mime-type>application/vnd.rn-realmedia</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>roff</extension>
          ??????? <mime-type>application/x-troff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>rtf</extension>
          ??????? <mime-type>application/rtf</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>rtx</extension>
          ??????? <mime-type>text/richtext</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>sh</extension>
          ??????? <mime-type>application/x-sh</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>shar</extension>
          ??????? <mime-type>application/x-shar</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>smf</extension>
          ??????? <mime-type>audio/x-midi</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>sit</extension>
          ??????? <mime-type>application/x-stuffit</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>snd</extension>
          ??????? <mime-type>audio/basic</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>src</extension>
          ??????? <mime-type>application/x-wais-source</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>sv4cpio</extension>
          ??????? <mime-type>application/x-sv4cpio</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>sv4crc</extension>
          ??????? <mime-type>application/x-sv4crc</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>swf</extension>
          ??????? <mime-type>application/x-shockwave-flash</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>t</extension>
          ??????? <mime-type>application/x-troff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tar</extension>
          ??????? <mime-type>application/x-tar</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tcl</extension>
          ??????? <mime-type>application/x-tcl</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tex</extension>
          ??????? <mime-type>application/x-tex</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>texi</extension>
          ??????? <mime-type>application/x-texinfo</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>texinfo</extension>
          ??????? <mime-type>application/x-texinfo</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tif</extension>
          ??????? <mime-type>image/tiff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tiff</extension>
          ??????? <mime-type>image/tiff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tr</extension>
          ??????? <mime-type>application/x-troff</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>tsv</extension>
          ??????? <mime-type>text/tab-separated-values</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>txt</extension>
          ??????? <mime-type>text/plain</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ulw</extension>
          ??????? <mime-type>audio/basic</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>ustar</extension>
          ??????? <mime-type>application/x-ustar</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xbm</extension>
          ??????? <mime-type>image/x-xbitmap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xht</extension>
          ??????? <mime-type>application/xhtml+xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xhtml</extension>
          ??????? <mime-type>application/xhtml+xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xml</extension>
          ??????? <mime-type>text/xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xpm</extension>
          ??????? <mime-type>image/x-xpixmap</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xsl</extension>
          ??????? <mime-type>text/xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>xwd</extension>
          ??????? <mime-type>image/x-xwindowdump</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wav</extension>
          ??????? <mime-type>audio/x-wav</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>svg</extension>
          ??????? <mime-type>image/svg+xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>svgz</extension>
          ??????? <mime-type>image/svg+xml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>vsd</extension>
          ??????? <mime-type>application/x-visio</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wbmp</extension>
          ??????? <mime-type>image/vnd.wap.wbmp</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wml</extension>
          ??????? <mime-type>text/vnd.wap.wml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wmlc</extension>
          ??????? <mime-type>application/vnd.wap.wmlc</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wmls</extension>
          ??????? <mime-type>text/vnd.wap.wmlscript</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wmlscriptc</extension>
          ??????? <mime-type>application/vnd.wap.wmlscriptc</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>wrl</extension>
          ??????? <mime-type>x-world/x-vrml</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>Z</extension>
          ??????? <mime-type>application/x-compress</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>z</extension>
          ??????? <mime-type>application/x-compress</mime-type>
          ??? </mime-mapping>
          ??? <mime-mapping>
          ??????? <extension>zip</extension>
          ??????? <mime-type>application/zip</mime-type>
          ??? </mime-mapping>
          posted @ 2006-09-12 11:35 joeyeezhang 閱讀(484) | 評論 (0)編輯 收藏

          JavaScript就這么回事1:基礎(chǔ)知識

          1 創(chuàng)建腳本塊

          1: <script language=”JavaScript”>
          2: JavaScript code goes here
          3: </script>

          ?

          2 隱藏腳本代碼

          1: <script language=”JavaScript”>
          2: <!--
          3: document.write(“Hello”);
          4: // -->
          5: </script>


          在不支持JavaScript的瀏覽器中將不執(zhí)行相關(guān)代碼

          3 瀏覽器不支持的時候顯示

          1: <noscript>
          2: Hello to the non-JavaScript browser.
          3: </noscript>

          ?

          4 鏈接外部腳本文件

          1: <script language=”JavaScript” src="/”filename.js"”></script>


          5 注釋腳本

          1: // This is a comment
          2: document.write(“Hello”); // This is a comment
          3: /*
          4: All of this
          5: is a comment
          6: */

          ?

          6 輸出到瀏覽器

          1: document.write(“<strong>Hello</strong>”);

          ?

          7 定義變量

          1: var myVariable = “some value”;

          ?

          8 字符串相加

          1: var myString = “String1” + “String2”;

          ?

          9 字符串搜索

          1: <script language=”JavaScript”>
          2: <!--
          3: var myVariable = “Hello there”;
          4: var therePlace = myVariable.search(“there”);
          5: document.write(therePlace);
          6: // -->
          7: </script>

          ?

          10 字符串替換

          1: thisVar.replace(“Monday”,”Friday”);


          11 格式化字串

          1: <script language=”JavaScript”>
          2: <!--
          3: var myVariable = “Hello there”;
          4: document.write(myVariable.big() + “<br>”);
          5: document.write(myVariable.blink() + “<br>”);
          6: document.write(myVariable.bold() + “<br>”);
          7: document.write(myVariable.fixed() + “<br>”);
          8: document.write(myVariable.fontcolor(“red”) + “<br>”);
          9: document.write(myVariable.fontsize(“18pt”) + “<br>”);
          10: document.write(myVariable.italics() + “<br>”);
          11: document.write(myVariable.small() + “<br>”);
          12: document.write(myVariable.strike() + “<br>”);
          13: document.write(myVariable.sub() + “<br>”);
          14: document.write(myVariable.sup() + “<br>”);
          15: document.write(myVariable.toLowerCase() + “<br>”);
          16: document.write(myVariable.toUpperCase() + “<br>”);
          17:
          18: var firstString = “My String”;
          19: var finalString = firstString.bold().toLowerCase().fontcolor(“red”);
          20: // -->
          21: </script>

          ?

          12 創(chuàng)建數(shù)組

          1: <script language=”JavaScript”>
          2: <!--
          3: var myArray = new Array(5);
          4: myArray[0] = “First Entry”;
          5: myArray[1] = “Second Entry”;
          6: myArray[2] = “Third Entry”;
          7: myArray[3] = “Fourth Entry”;
          8: myArray[4] = “Fifth Entry”;
          9: var anotherArray = new Array(“First Entry”,”Second Entry”,”Third Entry”,”Fourth Entry”,”Fifth Entry”);
          10: // -->
          11: </script>

          ?

          13 數(shù)組排序

          1: <script language=”JavaScript”>
          2: <!--
          3: var myArray = new Array(5);
          4: myArray[0] = “z”;
          5: myArray[1] = “c”;
          6: myArray[2] = “d”;
          7: myArray[3] = “a”;
          8: myArray[4] = “q”;
          9: document.write(myArray.sort());
          10: // -->
          11: </script>

          ?

          14 分割字符串

          1: <script language=”JavaScript”>
          2: <!--
          3: var myVariable = “a,b,c,d”;
          4: var stringArray = myVariable.split(“,”);
          5: document.write(stringArray[0]);
          6: document.write(stringArray[1]);
          7: document.write(stringArray[2]);
          8: document.write(stringArray[3]);
          9: // -->
          10: </script>

          ?

          15 彈出警告信息

          1: <script language=”JavaScript”>
          2: <!--
          3: window.alert(“Hello”);
          4: // -->
          5: </script>

          ?

          16 彈出確認(rèn)框

          1: <script language=”JavaScript”>
          2: <!--
          3: var result = window.confirm(“Click OK to continue”);
          4: // -->
          5: </script>

          ?

          17 定義函數(shù)

          1: <script language=”JavaScript”>
          2: <!--
          3: function multiple(number1,number2) {
          4: var result = number1 * number2;
          5: return result;
          6: }
          7: // -->
          8: </script>

          ?

          18 調(diào)用JS函數(shù)

          1: <a href=”#” onClick=”functionName()”>Link text</a>
          2: <a href="/”javascript:functionName"()”>Link text</a>

          ?

          19 在頁面加載完成后執(zhí)行函數(shù)

          1: <body onLoad=”functionName();”>
          2: Body of the page
          3: </body>


          20 條件判斷

          1: <script>
          2: <!--
          3: var userChoice = window.confirm(“Choose OK or Cancel”);
          4: var result = (userChoice == true) ? “OK” : “Cancel”;
          5: document.write(result);
          6: // -->
          7: </script>

          ?

          21 指定次數(shù)循環(huán)

          1: <script>
          2: <!--
          3: var myArray = new Array(3);
          4: myArray[0] = “Item 0”;
          5: myArray[1] = “Item 1”;
          6: myArray[2] = “Item 2”;
          7: for (i = 0; i < myArray.length; i++) {
          8: document.write(myArray[i] + “<br>”);
          9: }
          10: // -->
          11: </script>

          ?

          22 設(shè)定將來執(zhí)行

          1: <script>
          2: <!--
          3: function hello() {
          4: window.alert(“Hello”);
          5: }
          6: window.setTimeout(“hello()”,5000);
          7: // -->
          8: </script>

          ?

          23 定時執(zhí)行函數(shù)

          1: <script>
          2: <!--
          3: function hello() {
          4: window.alert(“Hello”);
          5: window.setTimeout(“hello()”,5000);
          6: }
          7: window.setTimeout(“hello()”,5000);
          8: // -->
          9: </script>

          ?

          24 取消定時執(zhí)行

          1: <script>
          2: <!--
          3: function hello() {
          4: window.alert(“Hello”);
          5: }
          6: var myTimeout = window.setTimeout(“hello()”,5000);
          7: window.clearTimeout(myTimeout);
          8: // -->
          9: </script>

          ?

          25 在頁面卸載時候執(zhí)行函數(shù)

          1: <body onUnload=”functionName();”>
          2: Body of the page
          3: </body>

          JavaScript就這么回事2:瀏覽器輸出


          26 訪問document對象

          1: <script language=”JavaScript”>
          2: var myURL = document.URL;
          3: window.alert(myURL);
          4: </script>

          ?

          27 動態(tài)輸出HTML

          1: <script language=”JavaScript”>
          2: document.write(“<p>Here’s some information about this document:</p>”);
          3: document.write(“<ul>”);
          4: document.write(“<li>Referring Document: “ + document.referrer + “</li>”);
          5: document.write(“<li>Domain: “ + document.domain + “</li>”);
          6: document.write(“<li>URL: “ + document.URL + “</li>”);
          7: document.write(“</ul>”);
          8: </script>


          28 輸出換行

          1: document.writeln(“<strong>a</strong>”);
          2: document.writeln(“b”);

          ?

          29 輸出日期

          1: <script language=”JavaScript”>
          2: var thisDate = new Date();
          3: document.write(thisDate.toString());
          4: </script>

          ?

          30 指定日期的時區(qū)

          1: <script language=”JavaScript”>
          2: var myOffset = -2;
          3: var currentDate = new Date();
          4: var userOffset = currentDate.getTimezoneOffset()/60;
          5: var timeZoneDifference = userOffset - myOffset;
          6: currentDate.setHours(currentDate.getHours() + timeZoneDifference);
          7: document.write(“The time and date in Central Europe is: “ + currentDate.toLocaleString());
          8: </script>


          31 設(shè)置日期輸出格式

          1: <script language=”JavaScript”>
          2: var thisDate = new Date();
          3: var thisTimeString = thisDate.getHours() + “:” + thisDate.getMinutes();
          4: var thisDateString = thisDate.getFullYear() + “/” + thisDate.getMonth() + “/” + thisDate.getDate();
          5: document.write(thisTimeString + “ on “ + thisDateString);
          6: </script>


          32 讀取URL參數(shù)

          1: <script language=”JavaScript”>
          2: var urlParts = document.URL.split(“?”);
          3: var parameterParts = urlParts[1].split(“&”);
          4: for (i = 0; i < parameterParts.length; i++) {
          5: var pairParts = parameterParts[i].split(“=”);
          6: var pairName = pairParts[0];
          7: var pairValue = pairParts[1];
          8: document.write(pairName + “ :“ +pairValue );
          9: }
          10: </script>

          你還以為HTML是無狀態(tài)的么?

          33 打開一個新的document對象

          1: <script language=”JavaScript”>
          2: function newDocument() {
          3: document.open();
          4: document.write(“<p>This is a New Document.</p>”);
          5: document.close();
          6: }
          7: </script>

          ?

          34 頁面跳轉(zhuǎn)

          1: <script language=”JavaScript”>
          2: window.location = “http://www.liu21st.com/”;
          3: </script>

          ?

          35 添加網(wǎng)頁加載進(jìn)度窗口

          1: <html>
          2: <head>
          3: <script language='javaScript'>
          4: var placeHolder = window.open('holder.html','placeholder','width=200,height=200');
          5: </script>
          6: <title>The Main Page</title>
          7: </head>
          8: <body onLoad='placeHolder.close()'>
          9: <p>This is the main page</p>
          10: </body>
          11: </html>

          ?

          JavaScript就這么回事3:圖像

          ?

          36 讀取圖像屬性

          1: <img src="/”image1.jpg"” name=”myImage”>
          2: <a href=”# ” onClick=”window.alert(document.myImage.width)”>Width</a>
          3:


          37 動態(tài)加載圖像

          1: <script language=”JavaScript”>
          2: myImage = new Image;
          3: myImage.src = “Tellers1.jpg”;
          4: </script>


          38 簡單的圖像替換

          1: <script language=”JavaScript”>
          2: rollImage = new Image;
          3: rollImage.src = “rollImage1.jpg”;
          4: defaultImage = new Image;
          5: defaultImage.src = “image1.jpg”;
          6: </script>
          7: <a href="/”myUrl"” onMouseOver=”document.myImage.src = rollImage.src;”
          8: onMouseOut=”document.myImage.src = defaultImage.src;”>
          9: <img src="/”image1.jpg"” name=”myImage” width=100 height=100 border=0>


          39 隨機(jī)顯示圖像

          1: <script language=”JavaScript”>
          2: var imageList = new Array;
          3: imageList[0] = “image1.jpg”;
          4: imageList[1] = “image2.jpg”;
          5: imageList[2] = “image3.jpg”;
          6: imageList[3] = “image4.jpg”;
          7: var imageChoice = Math.floor(Math.random() * imageList.length);
          8: document.write(‘<img src=”’ + imageList[imageChoice] + ‘“>’);
          9: </script>


          40 函數(shù)實現(xiàn)的圖像替換

          1: <script language=”JavaScript”>
          2: var source = 0;
          3: var replacement = 1;
          4: function createRollOver(originalImage,replacementImage) {
          5: var imageArray = new Array;
          6: imageArray[source] = new Image;
          7: imageArray[source].src = originalImage;
          8: imageArray[replacement] = new Image;
          9: imageArray[replacement].src = replacementImage;
          10: return imageArray;
          11: }
          12: var rollImage1 = createRollOver(“image1.jpg”,”rollImage1.jpg”);
          13: </script>
          14: <a href=”#” onMouseOver=”document.myImage1.src = rollImage1[replacement].src;”
          15: onMouseOut=”document.myImage1.src = rollImage1[source].src;”>
          16: <img src="/”image1.jpg"” width=100 name=”myImage1” border=0>
          17: </a>


          41 創(chuàng)建幻燈片

          1: <script language=”JavaScript”>
          2: var imageList = new Array;
          3: imageList[0] = new Image;
          4: imageList[0].src = “image1.jpg”;
          5: imageList[1] = new Image;
          6: imageList[1].src = “image2.jpg”;
          7: imageList[2] = new Image;
          8: imageList[2].src = “image3.jpg”;
          9: imageList[3] = new Image;
          10: imageList[3].src = “image4.jpg”;
          11: function slideShow(imageNumber) {
          12: document.slideShow.src = imageList[imageNumber].src;
          13: imageNumber += 1;
          14: if (imageNumber < imageList.length) {
          15: window.setTimeout(“slideShow(“ + imageNumber + “)”,3000);
          16: }
          17: }
          18: </script>
          19: </head>
          20: <body onLoad=”slideShow(0)”>
          21: <img src="/”image1.jpg"” width=100 name=”slideShow”>


          42 隨機(jī)廣告圖片

          1: <script language=”JavaScript”>
          2: var imageList = new Array;
          3: imageList[0] = “image1.jpg”;
          4: imageList[1] = “image2.jpg”;
          5: imageList[2] = “image3.jpg”;
          6: imageList[3] = “image4.jpg”;
          7: var urlList = new Array;
          8: urlList[0] = “http://some.host/”;
          9: urlList[1] = “http://another.host/”;
          10: urlList[2] = “http://somewhere.else/”;
          11: urlList[3] = “http://right.here/”;
          12: var imageChoice = Math.floor(Math.random() * imageList.length);
          13: document.write(‘<a href=”’ + urlList[imageChoice] + ‘“><img src=”’ + imageList[imageChoice] + ‘“></a>’);
          14: </script>

          JavaScript就這么回事4:表單


          還是先繼續(xù)寫完JS就這么回事系列吧~
          43 表單構(gòu)成

          1: <form method=”post” action=”target.html” name=”thisForm”>
          2: <input type=”text” name=”myText”>
          3: <select name=”mySelect”>
          4: <option value=”1”>First Choice</option>
          5: <option value=”2”>Second Choice</option>
          6: </select>
          7: <br>
          8: <input type=”submit” value=”Submit Me”>
          9: </form>


          44 訪問表單中的文本框內(nèi)容

          1: <form name=”myForm”>
          2: <input type=”text” name=”myText”>
          3: </form>
          4: <a href='#' onClick='window.alert(document.myForm.myText.value);'>Check Text Field</a>


          45 動態(tài)復(fù)制文本框內(nèi)容

          1: <form name=”myForm”>
          2: Enter some Text: <input type=”text” name=”myText”><br>
          3: Copy Text: <input type=”text” name=”copyText”>
          4: </form>
          5: <a href=”#” onClick=”document.myForm.copyText.value =
          6: document.myForm.myText.value;”>Copy Text Field</a>


          46 偵測文本框的變化

          1: <form name=”myForm”>
          2: Enter some Text: <input type=”text” name=”myText” onChange=”alert(this.value);”>
          3: </form>


          47 訪問選中的Select

          1: <form name=”myForm”>
          2: <select name=”mySelect”>
          3: <option value=”First Choice”>1</option>
          4: <option value=”Second Choice”>2</option>
          5: <option value=”Third Choice”>3</option>
          6: </select>
          7: </form>
          8: <a href='#' onClick='alert(document.myForm.mySelect.value);'>Check Selection List</a>


          48 動態(tài)增加Select項

          1: <form name=”myForm”>
          2: <select name=”mySelect”>
          3: <option value=”First Choice”>1</option>
          4: <option value=”Second Choice”>2</option>
          5: </select>
          6: </form>
          7: <script language=”JavaScript”>
          8: document.myForm.mySelect.length++;
          9: document.myForm.mySelect.options[document.myForm.mySelect.length - 1].text = “3”;
          10: document.myForm.mySelect.options[document.myForm.mySelect.length - 1].value = “Third Choice”;
          11: </script>


          49 驗證表單字段

          1: <script language=”JavaScript”>
          2: function checkField(field) {
          3: if (field.value == “”) {
          4: window.alert(“You must enter a value in the field”);
          5: field.focus();
          6: }
          7: }
          8: </script>
          9: <form name=”myForm” action=”target.html”>
          10: Text Field: <input type=”text” name=”myField”onBlur=”checkField(this)”>
          11: <br><input type=”submit”>
          12: </form>


          50 驗證Select項

          1: function checkList(selection) {
          2: if (selection.length == 0) {
          3: window.alert(“You must make a selection from the list.”);
          4: return false;
          5: }
          6: return true;
          7: }


          51 動態(tài)改變表單的action

          1: <form name=”myForm” action=”login.html”>
          2: Username: <input type=”text” name=”username”><br>
          3: Password: <input type=”password” name=”password”><br>
          4: <input type=”button” value=”Login” onClick=”this.form.submit();”>
          5: <input type=”button” value=”Register” onClick=”this.form.action = ‘register.html’; this.form.submit();”>
          6: <input type=”button” value=”Retrieve Password” onClick=”this.form.action = ‘password.html’; this.form.submit();”>
          7: </form>


          52 使用圖像按鈕

          1: <form name=”myForm” action=”login.html”>
          2: Username: <input type=”text” name=”username”><br>
          3: Password: <input type=”password”name=”password”><br>
          4: <input type=”image” src="/”login.gif"” value=”Login”>
          5: </form>
          6:


          53 表單數(shù)據(jù)的加密

          1: <SCRIPT LANGUAGE='JavaScript'>
          2: <!--
          3: function encrypt(item) {
          4: var newItem = '';
          5: for (i=0; i < item.length; i++) {
          6: newItem += item.charCodeAt(i) + '.';
          7: }
          8: return newItem;
          9: }
          10: function encryptForm(myForm) {
          11: for (i=0; i < myForm.elements.length; i++) {
          12: myForm.elements[i].value = encrypt(myForm.elements[i].value);
          13: }
          14: }
          15:
          16: //-->
          17: </SCRIPT>
          18: <form name='myForm' onSubmit='encryptForm(this); window.alert(this.myField.value);'>
          19: Enter Some Text: <input type=text name=myField><input type=submit>
          20: </form>

          ?


          JavaScript就這么回事5:窗口和框架


          54 改變?yōu)g覽器狀態(tài)欄文字提示

          1: <script language=”JavaScript”>
          2: window.status = “A new status message”;
          3: </script>


          55 彈出確認(rèn)提示框

          1: <script language=”JavaScript”>
          2: var userChoice = window.confirm(“Click OK or Cancel”);
          3: if (userChoice) {
          4: document.write(“You chose OK”);
          5: } else {
          6: document.write(“You chose Cancel”);
          7: }
          8: </script>


          56 提示輸入

          1: <script language=”JavaScript”>
          2: var userName = window.prompt(“Please Enter Your Name”,”Enter Your Name Here”);
          3: document.write(“Your Name is “ + userName);
          4: </script>


          57 打開一個新窗口

          1: //打開一個名稱為myNewWindow的瀏覽器新窗口
          2: <script language=”JavaScript”>
          3: window.open(“http://www.liu21st.com/”,”myNewWindow”);
          4: </script>


          58 設(shè)置新窗口的大小

          1: <script language=”JavaScript”>
          2: window.open(“http://www.liu21st.com/”,”myNewWindow”,'height=300,width=300');
          3: </script>


          59 設(shè)置新窗口的位置

          1: <script language=”JavaScript”>
          2: window.open(“http://www.liu21st.com/”,”myNewWindow”,'height=300,width=300,left=200,screenX=200,top=100,screenY=100');
          3: </script>


          60 是否顯示工具欄和滾動欄

          1: <script language=”JavaScript”>
          2: window.open(“http:


          61 是否可以縮放新窗口的大小

          1: <script language=”JavaScript”>
          2: window.open('http://www.liu21st.com/' , 'myNewWindow', 'resizable=yes' );</script>


          62 加載一個新的文檔到當(dāng)前窗口

          1: <a href='#' onClick='document.location = '125a.html';' >Open New Document</a>


          63 設(shè)置頁面的滾動位置

          1: <script language=”JavaScript”>
          2: if (document.all) { //如果是IE瀏覽器則使用scrollTop屬性
          3: document.body.scrollTop = 200;
          4: } else { //如果是NetScape瀏覽器則使用pageYOffset屬性
          5: window.pageYOffset = 200;
          6: }</script>


          64 在IE中打開全屏窗口

          1: <a href='#' onClick=”window.open('http://www.juxta.com/','newWindow','fullScreen=yes');”>Open a full-screen window</a>


          65 新窗口和父窗口的操作

          1: <script language=”JavaScript”>
          2: //定義新窗口
          3: var newWindow = window.open(“128a.html”,”newWindow”);
          4: newWindow.close(); //在父窗口中關(guān)閉打開的新窗口
          5: </script>
          6: 在新窗口中關(guān)閉父窗口
          7: window.opener.close()


          66 往新窗口中寫內(nèi)容

          1: <script language=”JavaScript”>
          2: var newWindow = window.open(“”,”newWindow”);
          3: newWindow.document.open();
          4: newWindow.document.write(“This is a new window”);
          5: newWIndow.document.close();
          6: </script>


          67 加載頁面到框架頁面

          1: <frameset cols=”50%,*”>
          2: <frame name=”frame1” src="/”135a.html"”>
          3: <frame name=”frame2” src="/”about:blank"”>
          4: </frameset>
          5: 在frame1中加載frame2中的頁面
          6: parent.frame2.document.location = “135b.html”;


          68 在框架頁面之間共享腳本
          如果在frame1中html文件中有個腳本

          1: function doAlert() {
          2: window.alert(“Frame 1 is loaded”);
          3: }

          那么在frame2中可以如此調(diào)用該方法

          1: <body onLoad=”parent.frame1.doAlert();”>
          2: This is frame 2.
          3: </body>


          69 數(shù)據(jù)公用
          可以在框架頁面定義數(shù)據(jù)項,使得該數(shù)據(jù)可以被多個框架中的頁面公用

          1: <script language=”JavaScript”>
          2: var persistentVariable = “This is a persistent value”;
          3: </script>
          4: <frameset cols=”50%,*”>
          5: <frame name=”frame1” src="/”138a.html"”>
          6: <frame name=”frame2” src="/”138b.html"”>
          7: </frameset>


          這樣在frame1和frame2中都可以使用變量persistentVariable
          70 框架代碼庫
          根據(jù)以上的一些思路,我們可以使用一個隱藏的框架頁面來作為整個框架集的代碼庫

          1: <frameset cols=”0,50%,*”>
          2: <frame name=”codeFrame” src="/”140code.html"”>
          3: <frame name=”frame1” src="/”140a.html"”>
          4: <frame name=”frame2” src="/”140b.html"”>
          5: </frameset>

          轉(zhuǎn)自:動態(tài)網(wǎng)站制作指南 | www.knowsky.com
          posted @ 2006-09-06 22:18 joeyeezhang 閱讀(348) | 評論 (0)編輯 收藏

          javascript事件列表解說
          事件 瀏覽器支持 解說
          一般事件 onclick IE3、N2 鼠標(biāo)點擊時觸發(fā)此事件
          ondblclick IE4、N4 鼠標(biāo)雙擊時觸發(fā)此事件
          onmousedown IE4、N4 按下鼠標(biāo)時觸發(fā)此事件
          onmouseup IE4、N4 鼠標(biāo)按下后松開鼠標(biāo)時觸發(fā)此事件
          onmouseover IE3、N2 當(dāng)鼠標(biāo)移動到某對象范圍的上方時觸發(fā)此事件
          onmousemove IE4、N4 鼠標(biāo)移動時觸發(fā)此事件
          onmouseout IE4、N3 當(dāng)鼠標(biāo)離開某對象范圍時觸發(fā)此事件
          onkeypress IE4、N4 當(dāng)鍵盤上的某個鍵被按下并且釋放時觸發(fā)此事件.
          onkeydown IE4、N4 當(dāng)鍵盤上某個按鍵被按下時觸發(fā)此事件
          onkeyup IE4、N4 當(dāng)鍵盤上某個按鍵被按放開時觸發(fā)此事件
          頁面相關(guān)事件 onabort IE4、N3 圖片在下載時被用戶中斷
          onbeforeunload IE4、N 當(dāng)前頁面的內(nèi)容將要被改變時觸發(fā)此事件
          onerror IE4、N3 出現(xiàn)錯誤時觸發(fā)此事件
          onload IE3、N2 頁面內(nèi)容完成時觸發(fā)此事件
          onmove IE、N4 瀏覽器的窗口被移動時觸發(fā)此事件
          onresize IE4、N4 當(dāng)瀏覽器的窗口大小被改變時觸發(fā)此事件
          onscroll IE4、N 瀏覽器的滾動條位置發(fā)生變化時觸發(fā)此事件
          onstop IE5、N 瀏覽器的停止按鈕被按下時觸發(fā)此事件或者正在下載的文件被中斷
          onunload IE3、N2 當(dāng)前頁面將被改變時觸發(fā)此事件
          表單相關(guān)事件 onblur IE3、N2 當(dāng)前元素失去焦點時觸發(fā)此事件
          onchange IE3、N2 當(dāng)前元素失去焦點并且元素的內(nèi)容發(fā)生改變而觸發(fā)此事件
          onfocus IE3 、N2 當(dāng)某個元素獲得焦點時觸發(fā)此事件
          onreset IE4 、N3 當(dāng)表單中RESET的屬性被激發(fā)時觸發(fā)此事件
          onsubmit IE3 、N2 一個表單被遞交時觸發(fā)此事件
          滾動字幕事件 onbounce IE4、N 在Marquee內(nèi)的內(nèi)容移動至Marquee顯示范圍之外時觸發(fā)此事件
          onfinish IE4、N 當(dāng)Marquee元素完成需要顯示的內(nèi)容后觸發(fā)此事件
          onstart IE4、 N 當(dāng)Marquee元素開始顯示內(nèi)容時觸發(fā)此事件
          編輯事件 onbeforecopy IE5、N 當(dāng)頁面當(dāng)前的被選擇內(nèi)容將要復(fù)制到瀏覽者系統(tǒng)的剪貼板前觸發(fā)此事件
          onbeforecut IE5、 N 當(dāng)頁面中的一部分或者全部的內(nèi)容將被移離當(dāng)前頁面[剪貼]并移動到瀏覽者的系統(tǒng)剪貼板時觸發(fā)此事件
          onbeforeeditfocus IE5、N 當(dāng)前元素將要進(jìn)入編輯狀態(tài)
          onbeforepaste IE5、 N 內(nèi)容將要從瀏覽者的系統(tǒng)剪貼板傳送[粘貼]到頁面中時觸發(fā)此事件
          onbeforeupdate IE5、 N 當(dāng)瀏覽者粘貼系統(tǒng)剪貼板中的內(nèi)容時通知目標(biāo)對象
          oncontextmenu IE5、N 當(dāng)瀏覽者按下鼠標(biāo)右鍵出現(xiàn)菜單時或者通過鍵盤的按鍵觸發(fā)頁面菜單時觸發(fā)的事件
          oncopy IE5、N 當(dāng)頁面當(dāng)前的被選擇內(nèi)容被復(fù)制后觸發(fā)此事件
          oncut IE5、N 當(dāng)頁面當(dāng)前的被選擇內(nèi)容被剪切時觸發(fā)此事件
          ondrag IE5、N 當(dāng)某個對象被拖動時觸發(fā)此事件 [活動事件]
          ondragdrop IE、N4 一個外部對象被鼠標(biāo)拖進(jìn)當(dāng)前窗口或者幀
          ondragend IE5、N 當(dāng)鼠標(biāo)拖動結(jié)束時觸發(fā)此事件,即鼠標(biāo)的按鈕被釋放了
          ondragenter IE5、N 當(dāng)對象被鼠標(biāo)拖動的對象進(jìn)入其容器范圍內(nèi)時觸發(fā)此事件
          ondragleave IE5、N 當(dāng)對象被鼠標(biāo)拖動的對象離開其容器范圍內(nèi)時觸發(fā)此事件
          ondragover IE5、N 當(dāng)某被拖動的對象在另一對象容器范圍內(nèi)拖動時觸發(fā)此事件
          ondragstart IE4、N 當(dāng)某對象將被拖動時觸發(fā)此事件
          ondrop IE5、N 在一個拖動過程中,釋放鼠標(biāo)鍵時觸發(fā)此事件
          onlosecapture IE5、N 當(dāng)元素失去鼠標(biāo)移動所形成的選擇焦點時觸發(fā)此事件
          onpaste IE5、N 當(dāng)內(nèi)容被粘貼時觸發(fā)此事件
          onselect IE4、N 當(dāng)文本內(nèi)容被選擇時的事件
          onselectstart IE4、N 當(dāng)文本內(nèi)容選擇將開始發(fā)生時觸發(fā)的事件
          數(shù)據(jù)綁定 onafterupdate IE4、N 當(dāng)數(shù)據(jù)完成由數(shù)據(jù)源到對象的傳送時觸發(fā)此事件
          oncellchange IE5、N 當(dāng)數(shù)據(jù)來源發(fā)生變化時
          ondataavailable IE4、N 當(dāng)數(shù)據(jù)接收完成時觸發(fā)事件
          ondatasetchanged IE4、N 數(shù)據(jù)在數(shù)據(jù)源發(fā)生變化時觸發(fā)的事件
          ondatasetcomplete IE4、N 當(dāng)來子數(shù)據(jù)源的全部有效數(shù)據(jù)讀取完畢時觸發(fā)此事件
          onerrorupdate IE4、N 當(dāng)使用onBeforeUpdate事件觸發(fā)取消了數(shù)據(jù)傳送時,代替onAfterUpdate事件
          onrowenter IE5、N 當(dāng)前數(shù)據(jù)源的數(shù)據(jù)發(fā)生變化并且有新的有效數(shù)據(jù)時觸發(fā)的事件
          onrowexit IE5、N 當(dāng)前數(shù)據(jù)源的數(shù)據(jù)將要發(fā)生變化時觸發(fā)的事件
          onrowsdelete IE5、N 當(dāng)前數(shù)據(jù)記錄將被刪除時觸發(fā)此事件
          onrowsinserted IE5、N 當(dāng)前數(shù)據(jù)源將要插入新數(shù)據(jù)記錄時觸發(fā)此事件
          外部事件 onafterprint IE5、N 當(dāng)文檔被打印后觸發(fā)此事件
          onbeforeprint IE5、N 當(dāng)文檔即將打印時觸發(fā)此事件
          onfilterchange IE4、N 當(dāng)某個對象的濾鏡效果發(fā)生變化時觸發(fā)的事件
          onhelp IE4、N 當(dāng)瀏覽者按下F1或者瀏覽器的幫助選擇時觸發(fā)此事件
          onpropertychange IE5、N 當(dāng)對象的屬性之一發(fā)生變化時觸發(fā)此事件
          onreadystatechange IE4、N 當(dāng)對象的初始化屬性值發(fā)生變化時觸發(fā)此事件
          posted @ 2006-09-06 22:03 joeyeezhang 閱讀(189) | 評論 (0)編輯 收藏

          1.I love you not because who you are,but because who I am when I am with you.我愛你不是因為你是誰,而是我在你面前是誰。

          2.No man or woman is worth your tears,and the one who is,won't make you cry.沒有男人或女人值得你流淚,值得的那位不會讓你哭泣。

          3.Atrue friend is some one who reaches for your hand and touches your heart.一個真正的朋友是向你伸出手,觸動你心靈的人。

          4.The worst way to miss some one is to be sitting right beside him knowing you can't have him.想念一個人最糟糕的方式就是坐在他身旁,而知道你不能擁有他。

          5.Never frown,even when you are sad,because youn ever know who is falling in love with your smile.就算你不快樂也不要皺眉,因為你永遠(yuǎn)不知道誰會愛上你的笑容。

          6.To the world you may be one person,but to one person you may be the world.在世界上你可能只是某人,但對于某人你可能是世界。

          7.Don't cry because it is over,smile because it happened.不要因為完結(jié)而哭泣,要為曾經(jīng)發(fā)生而微笑。

          8.Make yourself a better person and know who you are before you try and know someone else and expect them to know you.在你嘗試了解他人和盼望他人了解你之前,先把你變成一個更好的人和了解自己的人。

          9.Don't try so hard,the best things come when you lease expect them to.不要太努力去找,最好的事情是在最預(yù)計不到的時候出現(xiàn)的。

          10.Life is apure flame,and we live by an invisible sun within us.生命是一束純凈的火焰,我們依靠自己內(nèi)心看不見的太陽而存在。
          posted @ 2006-09-01 16:15 joeyeezhang 閱讀(208) | 評論 (0)編輯 收藏

          NetBeans?5.0?快捷鍵和代碼模板
          在源代碼編輯器中鍵入代碼時,可以通過鍵入以下列表左列中的
          縮寫,然后按空格鍵來生成右列中的文本。
          Java?編輯器代碼模板
          En?Enumeration
          Ex?Exception
          Ob?Object
          Psf?public?static?final
          Psfb?public?static?final?boolean
          Psfi?public?static?final?int
          Psfs?public?static?final?String
          St?String
          ab?abstract
          bo?boolean
          br?break
          ca?catch?(
          cl?class
          cn?continue
          df?default:
          dowhile?do?{
          }?while?(condition);
          eq?equals
          ex?extends
          fa?false
          fi?final
          fl?float
          forc?for?(Iterator?it?=?collection.iterator();
          it.hasNext();)?{
          Object?elem?=?(Object)?it.next();
          }
          fore?for?(Object?elem?:?iterable)?{
          }
          fori?for?(int?i?=?0;?i?<?arr.length;?i++)?{
          }
          fy?finally
          ie?interface
          ifelse?if?(condition){}else?{
          }
          im?implements
          iof?instanceof
          ir?import
          le?length
          newo?Object?name?=?new?Object(args);
          pe?protected
          pr?private
          psf?private?static?final
          psfb?private?static?final?boolean
          psfi?private?static?final?int
          psfs?private?static?final?String
          pst?printStackTrace();
          psvm?public?static?void?main(String[]?args){
          }
          pu?public
          re?return
          serr?System.err.println?("|");
          sout?System.out.println?("|");
          st?static
          sw?switch?(
          sy?synchronized
          tds?Thread.dumpStack();
          th?throws
          trycatch?try?{}
          catch?(Exception?e)?{}
          tw?throw
          twn?throw?new
          wh?while?(
          whilei?while?(it.hasNext())?{
          Object?elem?=?(Object)?it.next();
          }
          JSP?編輯器代碼模板
          ag?application.getAttribute("|")
          ap?application.putAttribute("|",)
          ar?application.removeAttribute("|")
          cfgi?config.getInitParameter("|")
          jspf?<jsp:forward?page="|"/>
          jspg?<jsp:getProperty?name="|"?property=""?/>
          jspi?<jsp:include?page="|"/>
          jspp?<jsp:plugin?type="|"?code=""
          codebase=""></jsp:plugin>
          jsps?<jsp:setProperty?name="|"?property=""/>
          jspu?<jsp:useBean?id="I"?type=""/>
          oup?out.print("|")
          oupl?out.println("|")
          pcg?pageContext.getAttribute("|")
          pcgn?pageContext.getAttributeNamesInScope("|")
          pcgs?pageContext.getAttributesScope("|")
          pcr?pageContext.removeAttribute("|")
          pcs?pageContext.setAttribute("|",)
          pg?<%@page?|%>
          pga?<%@page?autoFlush="false"%>
          pgb?<%@page?buffer="|kb"%>
          pgc?<%@page?contentType="|"%>
          pgerr?<%@page?errorPage="|"%>
          pgex?<%@page?extends="|"%>
          pgie?<%@page?isErrorPage="true"%>
          pgim?<%@page?import="|"%>
          pgin?<%@page?info="|"%>
          pgit?<%@page?isThreadSafe="false"%>
          pgl?<%@page?language="java"%>
          pgs?<%@page?session="false"%>
          rg?request.getParameter("|")
          sg?session.getAttribute("|")
          sp?session.setAttribute("|",?)
          sr?session.removeAttribute("|")
          tglb?<%@taglib?uri="|"%>
          XML/DTD?編輯器代碼模板
          ?xm?<?xml?version="1.0"?encoding="UTF-8"?>
          !do?<!DOCTYPE>
          !cd?<![CDATA[|]]>
          !at?<!ATTLIST?|>
          !el?<!ELEMENT?|>
          !en?<!ENTITY?|>
          pu?PUBLIC?"|"
          sy?SYSTEM?"|"
          !no?<!NOTATION?|>
          cd?CDATA
          em?EMPTY
          en?ENTITY
          ens?ENTITIES
          fi?#FIXED
          im?#IMPLIED
          nm?NMTOKEN
          nms?NMTOKENS
          nn?NOTATION
          pc?#PCDATA
          NetBeans?5.0?快捷鍵和代碼模板
          查找、搜索和替換
          Ctrl-F3?搜索位于插入點的詞
          F3/Shift-F3?在文件中查找下一個/上一個
          Ctrl-F/H?在文件中查找/替換
          Alt-F7?查找使用實例
          Ctrl-Shift-P?在項目中查找
          Alt-Shift-U?顯示“使用實例”窗口
          Alt-Shift-H?關(guān)閉搜索結(jié)果突出顯示
          Alt-Shift-L?跳轉(zhuǎn)列表中的下一個(所有文件)
          Alt-Shift-K?跳轉(zhuǎn)列表中的上一個(所有文件)
          Ctrl-R?重新裝入窗體
          Alt-U-U?將選定內(nèi)容轉(zhuǎn)換為大寫
          Alt-U-L?將選定內(nèi)容轉(zhuǎn)換為小寫
          Alt-U-R?對選定內(nèi)容切換大小寫
          在源代碼中導(dǎo)航
          Alt-Shift-O?轉(zhuǎn)至類
          Alt-Shift-E?轉(zhuǎn)至?JUnit?測試
          Alt-O?轉(zhuǎn)至源代碼
          Alt-G?轉(zhuǎn)至聲明
          Ctrl-B?轉(zhuǎn)至超級實現(xiàn)
          Alt-K/Alt-L?后退/前進(jìn)
          Ctrl-G?轉(zhuǎn)至行
          Ctrl-F2?切換添加/刪除書簽
          F2/Shift-F2?下一個/上一個書簽
          F12/Shift-F12?下一個/上一個使用實例/編譯錯誤
          Ctrl-Shift-1/2/3?在“項目”/“文件”/“收藏夾”中選擇
          Ctrl-[?將插入記號移至匹配的方括號
          Ctrl-^?Ctrl-[(法語/比利時語鍵盤)
          用?Java?編碼
          Ctrl-I?覆蓋方法
          Alt-Shift-F/I?修復(fù)全部/選定類的導(dǎo)入
          Alt-Shift-W?以?try-catch?塊圍繞
          Ctrl-Shift-F?重新設(shè)置選定內(nèi)容的格式
          Ctrl-D/Ctrl-T?左移/右移一個制表符
          Ctrl-Shift-T/D?添加/撤消注釋行?("http://")
          Ctrl-L/K?插入下一個/上一個匹配的詞
          Esc/Ctrl-空格鍵關(guān)閉/打開代碼完成
          Ctrl-M?選擇下一個參數(shù)
          Shift-空格鍵輸入空格,不展開縮寫
          Alt-F1/Shift-F1?顯示/搜索?Javadoc
          Ctrl-Shift-M?提取方法
          Alt-U-G?將?“get”?放置到標(biāo)識符前面
          Alt-U-S?將?“set”?放置到標(biāo)識符前面
          Alt-U-I?將?“is”?放置到標(biāo)識符前面
          Ctrl-Backspace/Del?刪除上一個/當(dāng)前詞
          Ctrl-E?刪除當(dāng)前行
          Ctrl-J-S/E?開始/結(jié)束錄制宏
          Ctrl-Shift-J?插入國際化字符串
          Ctrl-數(shù)字鍵盤上的?-?折疊(隱藏)代碼塊
          Ctrl-數(shù)字鍵盤上的?+?展開已折疊的代碼塊
          Ctrl-Shift-數(shù)字鍵盤上的?-?折疊所有代碼塊
          Ctrl-Shift-數(shù)字鍵盤上的?+?展開所有代碼塊
          Alt-Enter?顯示建議/提示
          打開和切換視圖
          Ctrl-Shift-0?顯示“搜索結(jié)果”窗口
          Ctrl-0?顯示源代碼編輯器
          Ctrl-1?顯示“項目”窗口
          Ctrl-2?顯示“文件”窗口
          Ctrl-3?顯示“收藏夾”窗口
          Ctrl-4?顯示“輸出”窗口
          Ctrl-5?顯示“運(yùn)行環(huán)境”窗口
          Ctrl-6?顯示“待做事項”窗口
          Ctrl-7?顯示“導(dǎo)航”窗口
          Ctrl-Shift-7?顯示“屬性”對話框
          Ctrl-Shift-8?顯示組件面板
          Ctrl-8?顯示“版本控制”窗口
          Ctrl-9?顯示“VCS?輸出”窗口
          Shift-F4?顯示“文檔”對話框
          Alt-向左方向鍵移動到左側(cè)窗口
          Alt-向右方向鍵移動到右側(cè)窗口
          Ctrl-Tab?(Ctrl-`)?在打開的文檔之間切換
          Shift-Escape?最大化窗口(切換)
          Ctrl-F4/Ctrl-W?關(guān)閉當(dāng)前選定的窗口
          Ctrl-Shift-F4?關(guān)閉所有窗口
          Shift-F10?打開上下文菜單
          編譯、測試和運(yùn)行
          F9?編譯選定的包或文件
          F11?生成主項目
          Shift-F11?清理并生成主項目
          Ctrl-Q?設(shè)置請求參數(shù)
          Ctrl-Shift-U?創(chuàng)建?JUnit?測試
          Ctrl-F6/Alt-F6?為文件/項目運(yùn)行?JUnit?測試
          F6/Shift-F6?運(yùn)行主項目/文件
          調(diào)試
          F5?開始調(diào)試主項目
          Ctrl-Shift-F5?開始調(diào)試當(dāng)前文件
          Ctrl-Shift-F6?開始為文件調(diào)試測試?(JUnit)
          Shift-F5/Ctrl-F5?停止/繼續(xù)調(diào)試會話
          F4?運(yùn)行到文件中的光標(biāo)位置
          F7/F8?步入/越過
          Ctrl-F7?步出
          Ctrl-Alt-向上方向鍵轉(zhuǎn)至被調(diào)用的方法
          Ctrl-Alt-向下方向鍵轉(zhuǎn)至調(diào)用方法
          Ctrl-F9?計算表達(dá)式的值
          Ctrl-F8?切換斷點
          Ctrl-Shift-F8?新建斷點
          Ctrl-Shift-F7?新建監(jiān)視
          Ctrl-Shift-5?顯示?HTTP?監(jiān)視器
          Ctrl-Shift-0?顯示“搜索結(jié)果”窗口
          Alt-Shift-1?顯示“局部變量”窗口
          Alt-Shift-2?顯示“監(jiān)視”窗口
          Alt-Shift-3?顯示“調(diào)用?!贝翱?
          Alt-Shift-4?顯示“類”窗口
          Alt-Shift-5?顯示“斷點”窗口
          Alt-Shift-6?顯示“會話”窗口
          Ctrl-Shift-6?切換到“執(zhí)行”窗口
          Alt-Shift-7?切換到“線程”窗口
          Alt-Shift-8?切換到“源”窗口
          NetBeans?5.0?快捷鍵和代碼模板
          Emacs?快捷鍵
          通用快捷鍵
          Ctrl-W、Alt-W、Ctrl-Y?剪切/復(fù)制/粘貼
          Ctrl-X-U?撤消
          Ctrl-Shift-Z?重做
          Ctrl-X-H?全選
          Ctrl-X,然后按?Ctrl-S?保存
          Ctrl-X-S?全部保存
          查找、搜索和替換
          Ctrl-S/Ctrl-H?在文件中查找/替換
          Alt-S/Alt-R?在文件中查找下一個/上一個
          Alt-F7?查找使用實例
          Ctrl-Shift-P?在項目中查找
          Ctrl-Alt-F?顯示“使用實例”窗口
          Ctrl?X,然后按?Ctrl-U?將選定內(nèi)容轉(zhuǎn)換為大寫
          Ctrl-X,然后按?Ctrl-L?將選定內(nèi)容轉(zhuǎn)換為小寫
          在源代碼中導(dǎo)航
          Ctrl-I?覆蓋方法
          Alt-Shift-F?修復(fù)全部導(dǎo)入
          Alt-Shift-I?修復(fù)選定類的導(dǎo)入
          Alt-Shift-W?以?try-catch?塊圍繞
          Ctrl-Shift-F?重新設(shè)置選定內(nèi)容的格式
          Alt-Shift-O?轉(zhuǎn)至類
          Alt-Shift-E?轉(zhuǎn)至?JUnit?測試
          Alt-句點轉(zhuǎn)至聲明
          Ctrl-G?轉(zhuǎn)至行
          Ctrl-B?左移一個字符
          Ctrl-F?右移一個字符
          Alt-B/F?左移/右移一個詞
          Ctrl-N/P?下移/上移一行
          Ctrl-A/Ctrl-E?轉(zhuǎn)至行首/行尾
          Alt-V/Ctrl-V?上翻/下翻一頁
          Alt-Shift-逗號轉(zhuǎn)至文檔開頭
          Alt-Shift-句點轉(zhuǎn)至文檔結(jié)尾
          Ctrl-Shift-1/2/3?在“項目”/“文件”/“收藏夾”中選擇
          Ctrl-F2?切換添加/刪除書簽
          F2/Shift-F2?下一個/上一個書簽
          F12/Shift-F12?下一個/上一個錯誤
          用?Java?編碼
          Alt-Enter?顯示建議/提示
          Alt-0,然后按?Ctrl-X,
          再按?Tab?鍵
          左移一個制表符
          Ctrl-X-Tab?右移一個制表符
          Ctrl-C,再按?Ctrl-C?將行標(biāo)記為注釋?("http://")
          Alt-0,然后按?Ctrl-C,
          再按?Ctrl-C
          撤消對行的注釋?("http://")
          Alt-正斜杠插入下一個匹配的詞
          Ctrl-Q-Tab?插入制表符
          Ctrl-X,然后按?Shift-9/0?開始/停止錄制宏
          Alt-D?刪除下一個詞
          Alt-Backspace?刪除上一個詞
          Ctrl-D?刪除下一個字符
          Backspace?刪除上一個字符
          Alt-0,然后按?Ctrl-K?剪切光標(biāo)至行首的內(nèi)容
          Ctrl-K?剪切光標(biāo)至行尾的內(nèi)容
          Ctrl-Shift-減號折疊所有代碼塊
          Ctrl-Shift-加號展開所有代碼塊
          Ctrl-Shift-M?提取方法
          打開和切換視圖
          Ctrl-Alt-N?新建文件
          Ctrl-Shift-N?新建項目
          Ctrl-X,然后按?Ctrl-F?打開文件
          Ctrl-Shift-O?打開項目
          Ctrl-X-B?顯示“文檔”對話框
          Ctrl-X-1?最大化窗口(切換)
          Ctrl-X,然后按?Ctrl-K?關(guān)閉當(dāng)前選定的文檔
          Ctrl-X-K?(同上)
          Ctrl-X,然后按?Ctrl-C?退出?IDE
          Ctrl-Shift-0?顯示“搜索結(jié)果”窗口
          Ctrl-0?顯示源代碼編輯器
          Ctrl-1?顯示“項目”窗口
          Ctrl-2?顯示“文件”窗口
          Ctrl-3?顯示“收藏夾”窗口
          Ctrl-4?顯示“輸出”窗口
          Ctrl-5?顯示“運(yùn)行環(huán)境”窗口
          Ctrl-6?顯示“待做事項”窗口
          Ctrl-7?顯示“導(dǎo)航”窗口
          Ctrl-Shift-7?顯示“屬性”對話框
          Ctrl-8?顯示“版本控制”窗口
          Ctrl-Shift-8?顯示組件面板
          Ctrl-9?顯示“VCS?輸出”窗口
          Alt-向左方向鍵移動到左側(cè)窗口
          Alt-向右方向鍵移動到右側(cè)窗口
          Ctrl-Tab?(Ctrl-`)?在打開的文檔之間切換
          編譯、測試和運(yùn)行
          F9?編譯選定的包或文件
          F11?生成主項目
          Shift-F11?清理并生成主項目
          Ctrl-Q?設(shè)置請求參數(shù)
          Ctrl-Shift-U?創(chuàng)建?JUnit?測試
          Ctrl-F6/Alt-F6?為文件/項目運(yùn)行?JUnit?測試
          F6/Shift-F6?運(yùn)行主項目/文件
          調(diào)試
          F5?開始調(diào)試主項目
          Ctrl-Shift-F5?開始調(diào)試當(dāng)前文件
          Ctrl-Shift-F6?開始為文件調(diào)試測試?(JUnit)
          Shift-F5/Ctrl-F5?停止/繼續(xù)調(diào)試會話
          F4?運(yùn)行到文件中的光標(biāo)位置
          F7/F8?步入/越過
          Ctrl-F7?步出
          Ctrl-Alt-向上方向鍵轉(zhuǎn)至被調(diào)用的方法
          Ctrl-Alt-向下方向鍵轉(zhuǎn)至調(diào)用方法
          Ctrl-F9?計算表達(dá)式的值
          Ctrl-F8?切換斷點
          Ctrl-Shift-F8?新建斷點
          Ctrl-Shift-F7?新建監(jiān)視
          NetBeans?5.0?快捷鍵和代碼模板
          Eclipse?快捷鍵
          查找、搜索和替換
          FIND/Ctrl-Shift-F?在文件中查找/替換
          Ctrl-K/Ctrl-Shift-K?在文件中查找下一個/上一個
          Alt-F7?查找使用實例
          Ctrl-H?在項目中查找
          Alt-Shift-U?顯示“使用實例”窗口
          Ctrl-Shift-X?將選定內(nèi)容轉(zhuǎn)換為大寫
          Ctrl-Shift-Y?將選定內(nèi)容轉(zhuǎn)換為小寫
          在源代碼中導(dǎo)航
          Alt-Shift-O?轉(zhuǎn)至類
          Alt-Shift-E?轉(zhuǎn)至?JUnit?測試
          Ctrl-F3?轉(zhuǎn)至源代碼
          F3?轉(zhuǎn)至聲明
          Ctrl-L?轉(zhuǎn)至行
          向左方向鍵左移一個字符
          向右方向鍵右移一個字符
          Ctrl-向左/向右方向鍵左移/右移一個詞
          向上方向鍵/向下方向鍵下移/上移一行
          Ctrl-Shift-1/2?在“項目”/“文件”中選擇
          Ctrl-F2?切換添加/刪除書簽
          Shift-F2?上一個書簽
          Ctrl-句點下一個使用實例/編譯錯誤
          Ctrl-逗號上一個使用實例/編譯錯誤
          Ctrl-Alt-Shift-P?將插入記號移至匹配的方括號
          Alt-向左方向鍵后退
          Alt-向右方向鍵前進(jìn)
          用?Java?編碼
          Ctrl-I?覆蓋方法
          Alt-Shift-W?以?try-catch?塊圍繞
          Ctrl-Shift-O?修復(fù)全部導(dǎo)入
          Ctrl-Shift-M?修復(fù)選定類的導(dǎo)入
          Alt-Enter?顯示建議/提示
          Alt-正斜杠插入下一個匹配的詞
          Ctrl-Delete?刪除下一個詞
          Ctrl-Backspace?刪除上一個詞
          Delete?刪除下一個字符
          Backspace?刪除上一個字符
          Ctrl-D?刪除當(dāng)前行
          Ctrl-Shift-減號折疊所有代碼塊
          Ctrl-Shift-加號展開所有代碼塊
          Alt-Shift-M?提取方法
          打開和切換視圖
          Ctrl-N?新建文件
          Ctrl-Shift-N?新建項目
          Ctrl-O?打開文件
          Ctrl-Shift-O?打開項目
          Ctrl-Shift-E?顯示“文檔”對話框
          Ctrl-M?最大化窗口(切換)
          Ctrl-F4/Ctrl-W?關(guān)閉當(dāng)前選定的文檔
          Ctrl-Shift-0?顯示“搜索結(jié)果”窗口
          F12?顯示源代碼編輯器
          Ctrl-1?顯示“項目”窗口
          Ctrl-2?顯示“文件”窗口
          Ctrl-3?顯示“收藏夾”窗口
          Ctrl-4?顯示“輸出”窗口
          Ctrl-5?顯示“運(yùn)行環(huán)境”窗口
          Ctrl-6?顯示“待做事項”窗口
          Ctrl-7?顯示“導(dǎo)航”窗口
          Ctrl-Shift-7?顯示“屬性”對話框
          Ctrl-8?顯示“版本控制”窗口
          Ctrl-Tab?在打開的文檔之間切換
          編譯、測試和運(yùn)行
          F9?編譯選定的包或文件
          F11?生成主項目
          Shift-F11?清理并生成主項目
          Ctrl-Q?設(shè)置請求參數(shù)
          Ctrl-Shift-U?創(chuàng)建?JUnit?測試
          Ctrl-F6/Alt-F6?為文件/項目運(yùn)行?JUnit?測試
          Ctrl-Shift-F11?運(yùn)行主項目
          Shift-F6?運(yùn)行文件
          調(diào)試
          F11?開始調(diào)試主項目
          Ctrl-Shift-F5?開始調(diào)試當(dāng)前文件
          Ctrl-Shift-F6?開始為文件調(diào)試測試?(JUnit)
          Shift-F5/F8?停止/繼續(xù)調(diào)試會話
          Ctrl-R?運(yùn)行到文件中的光標(biāo)位置
          F5/F6?步入/越過
          Ctrl-F7?步出
          Ctrl-Alt-向上方向鍵轉(zhuǎn)至被調(diào)用的方法
          Ctrl-Alt-向下方向鍵轉(zhuǎn)至調(diào)用方法
          Ctrl-F9?計算表達(dá)式的值
          Ctrl-Shift-B?切換斷點
          Ctrl-Shift-F8?新建斷點
          Ctrl-Shift-F7?新建監(jiān)視
          更改代碼模板或快捷鍵:
          1.?從主菜單中選擇“工具”>“選項”。
          2.?對于代碼模板:
          ??在左邊欄中選擇“編輯器”。
          ??單擊“代碼模板”標(biāo)簽。
          ??從“語言”下拉列表中選擇一種語言。
          3.?對于快捷鍵:
          ??在左邊欄中選擇“鍵映射”。
          ??從“配置文件”下拉列表中選擇一個配置文件。
          4.?更改相應(yīng)項,然后單擊“確定”。
          更改代碼模板的展開方式:
          1.?從主菜單中選擇“工具”>“選項”。
          2.?在左邊欄中選擇“編輯器”。
          3.?單擊“代碼模板”標(biāo)簽。
          4.?從“語言”下拉列表中選擇一種語言。
          5.?從“展開模板”下拉列表中選擇展開鍵,然后單擊“確
          定”。
          選擇其他配置文件:
          1.?從主菜單中選擇“工具”>“選項”。
          2.?在左邊欄中選擇“鍵映射”。
          3.?從“配置文件”下拉列表中選擇一個配置文件,然
          后單擊“確定”。
          posted @ 2006-08-31 16:43 joeyeezhang 閱讀(227) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
          主站蜘蛛池模板: 廊坊市| 宁阳县| 班戈县| 西华县| 金溪县| 武山县| 蚌埠市| 南充市| 孝义市| 永济市| 泰兴市| 安徽省| 富锦市| 左权县| 祁连县| 荔波县| 平果县| 巩义市| 广水市| 信丰县| 青田县| 彭水| 庆城县| 公安县| 怀远县| 盐山县| 射洪县| 南京市| 县级市| 右玉县| 凤庆县| 井陉县| 郁南县| 安康市| 上犹县| 兴国县| 宁都县| 常宁市| 宣恩县| 曲阜市| 吴川市|