﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Zhu Jun's Tech Weblog-随笔分类-他山の玉</title><link>http://www.blogjava.net/Johncn/category/2672.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:09:43 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:09:43 GMT</pubDate><ttl>60</ttl><item><title>[Oracle] Oracle exp/imp导出导入工具的使用 [转] </title><link>http://www.blogjava.net/Johncn/archive/2005/12/26/25502.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Mon, 26 Dec 2005 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/26/25502.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/25502.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/26/25502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/25502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/25502.html</trackback:ping><description><![CDATA[<FONT face=Arial><FONT size=2><STRONG>导出工具 exp</STRONG> <BR><BR>1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin<BR><BR>exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移<BR><BR>它有三种模式：<BR>a. 用户模式： 导出用户所有对象以及对象中的数据；<BR>b. 表模式： 导出用户所有表或者指定的表；<BR>c. 整个数据库： 导出数据库中所有对象。<BR><BR>2. 导出工具exp交互式命令行方式的使用的例子<BR><BR>$exp test/test123@appdb<BR>Enter array fetch buffer size: 4096 &gt; 回车<BR>Export file: expdat.dmp &gt; m.dmp 生成导出的文件名 <BR>(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U &gt; 3<BR>Export table data (yes/no): yes &gt; 回车<BR>Compress extents (yes/no): yes &gt; 回车<BR>Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set<BR>About to export specified tables via Conventional Path ...<BR>Table(T) or Partition(T<IMG alt=Razz src="http://www.cybercorlin.net/forum/images/smilies/razz.gif" align=middle>) to be exported: (RETURN to quit) &gt; cmamenu 要导出的表名<BR>. . exporting table CMAMENU 4336 rows exported<BR>Table(T) or Partition(T<IMG alt=Razz src="http://www.cybercorlin.net/forum/images/smilies/razz.gif" align=middle>) to be exported: (RETURN to quit) &gt;要导出的表名n<BR>Table(T) or Partition(T<IMG alt=Razz src="http://www.cybercorlin.net/forum/images/smilies/razz.gif" align=middle>) to be exported: (RETURN to quit) &gt; 回车<BR>Export terminated successfully without warnings. <BR><BR>3. 导出工具exp非交互式命令行方式的例子<BR><BR>$exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y <BR><BR>说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp<BR><BR>$exp scott/tiger tables=emp query="where job='salesman' and sal&lt;1600" file=/directory/scott2.dmp <BR><BR>说明:在exp里面加上导出emp的查询条件job='salesman' and sal&lt;1600<BR><BR>(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)<BR><BR>$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log<BR><BR>参数文件username.par内容<BR>userid=username/userpassword<BR>buffer=8192000<BR>compress=n<BR>grants=y<BR><BR>说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改<BR><BR>filesize指定生成的二进制备份文件的最大字节数<BR><BR>(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)<BR><BR><STRONG>导入工具 imp</STRONG><BR><BR>1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin<BR><BR>imp导入工具将EXP形成的二进制系统文件导入到数据库中.<BR><BR>它有三种模式：<BR>a. 用户模式： 导出用户所有对象以及对象中的数据；<BR>b. 表模式： 导出用户所有表或者指定的表；<BR>c. 整个数据库： 导出数据库中所有对象。<BR><BR>只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入<BR><BR>imp步骤：<BR>(1) create table (2) insert data (3) create index (4) create triggers,constraints<BR><BR>2.导入工具imp交互式命令行方式的例子<BR>$ imp<BR>Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001<BR>(c) Copyright 1999 Oracle Corporation. All rights reserved.<BR>用户名: test<BR>口令:****<BR>连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - bit Production<BR>With the Partitioning option<BR>JServer Release 8.1.6.0.0 - Production<BR>导入文件: expdat.dmp&gt; /tmp/m.dmp<BR>输入插入缓冲区大小（最小为 8192 ) 30720&gt;<BR>经由常规路径导出由EXPORT:V08.01.06创建的文件<BR>警告: 此对象由 TEST 导出, 而不是当前用户<BR>已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<BR>只列出导入文件的内容(yes/no)：no&gt;<BR>由于对象已存在, 忽略创建错误(yes/no)：no&gt; yes<BR>导入权限(yes/no)：yes&gt;<BR>导入表数据(yes/no)：yes&gt;<BR>导入整个导出文件(yes/no)：no&gt; yes<BR>. 正在将TEST的对象导入到 SCOTT<BR>. . 正在导入表 "CMAMENU" 4336行被导入<BR>成功终止导入，但出现警告。 <BR><BR><BR>3.导入工具imp非交互式命令行方式的例子<BR><BR>$ imp system/manager fromuser=jones tables=(accts) <BR>$ imp system/manager fromuser=scott tables=(emp,dept) <BR>$ imp system/manager fromuser=scott touser=joe tables=emp <BR>$ imp scott/tiger file = expdat.dmp full=y <BR>$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log<BR>$ imp system/manager parfile=params.dat <BR>params.dat 内容 <BR>file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) <BR><BR>4.导入工具imp可能出现的问题<BR><BR>(1) 数据库对象已经存在<BR>一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等; <BR>数据库对象已经存在, 按缺省的imp参数, 则会导入失败<BR>如果用了参数ignore=y, 会把exp文件内的数据内容导入<BR>如果表有唯一关键字的约束条件, 不合条件将不被导入<BR>如果表没有唯一关键字的约束条件, 将引起记录重复<BR><BR>(2) 数据库对象有主外键约束<BR>不符合主外键约束时, 数据会导入失败 <BR>解决办法: 先导入主表, 再导入依存表<BR>disable目标导入对象的主外键约束, 导入数据后, 再enable它们<BR>(3) 权限不够<BR>如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限<BR><BR>(4) 导入大表( 大于80M ) 时, 存储分配失败<BR>默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.<BR>导入时, 如果不存在连续一个大数据块, 则会导入失败.<BR>导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.<BR><BR>(5) imp和exp使用的字符集不同<BR>如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.<BR>导入完成后再改回来.<BR><BR>(6) imp和exp版本不能往上兼容<BR>imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件<BR>根据情况我们可以用<BR>$ imp username/password@connect_string<BR>说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora<BR>定义的本地或者远端数据库的名称<BR>注意事项:<BR>UNIX: /etc/hosts 要定义本地或者远端数据库服务器的主机名<BR>win98: windowshosts 和IP地址的对应关系 <BR><BR>win2000: winntsystem32driversetchosts </FONT></FONT><img src ="http://www.blogjava.net/Johncn/aggbug/25502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-26 22:19 <a href="http://www.blogjava.net/Johncn/archive/2005/12/26/25502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE常用傻瓜问题1000问[转]</title><link>http://www.blogjava.net/Johncn/archive/2005/12/16/24224.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Fri, 16 Dec 2005 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/16/24224.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/24224.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/16/24224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/24224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/24224.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：&nbsp;&nbsp;CCBZZP&nbsp;&nbsp; (原文)&nbsp;1. Oracle安装完成后的初始口令? &nbsp; &nbsp;　internal/oracle 　　sys/change_on_install 　　system/manager 　　scott/tiger 　　sysman/oem_temp 2. ORACLE9IAS WEB CACHE的初始默认...&nbsp;&nbsp;<a href='http://www.blogjava.net/Johncn/archive/2005/12/16/24224.html'>阅读全文</a><img src ="http://www.blogjava.net/Johncn/aggbug/24224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-16 15:23 <a href="http://www.blogjava.net/Johncn/archive/2005/12/16/24224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server各种日期计算方法[转]</title><link>http://www.blogjava.net/Johncn/archive/2005/12/08/22963.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Thu, 08 Dec 2005 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/08/22963.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/22963.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/08/22963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/22963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/22963.html</trackback:ping><description><![CDATA[<P><FONT face=Arial size=2>(</FONT><A href="https://dream4ever.org/showthread.php?t=29463&amp;page=1"><FONT face=Arial size=2>原文</FONT></A><FONT face=Arial size=2>)<BR>
<HR>
<BR>　　通常，你需要获得当前日期和计算一些其他的日期，例如，你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割（年、月、日等），然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期！在这篇文 章里，我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 <BR><BR>　　在使用本文中的例子之前，你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样，这完全由哪一天是一个星期的第一天这个设置决定。第一天（DATEFIRST）设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例 子都是以星期天作为一周的第一天来建立，也就是第一天设置为7。假如你的第一天设置不一样，你可能需要调整这些例子，使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。 <BR>　　<BR>　　为了理解这些例子，我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDI FF和DATEADD函数以及时间间隔可以阅读微软联机帮助。 <BR>　　<BR>　　使用DATEDIFF和DATEADD函数来计算日期，和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如，从当前日期到你要得到的日期之间有多少时间间隔，或者，从今天到某一天（比如1900-1-1）之间有多少时间间隔，等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。 <BR>　　<BR>　　<FONT color=red><B>一个月的第一天</B></FONT> <BR>　　<BR>　　第一个例子，我将告诉你如何从当前日期去这个月的最后一天。请注意：这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔，然后进行加减来得到想要计算的日期。 <BR>　　<BR>　　这是计算一个月第一天的SQL 脚本： <BR>　　SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) <BR>　　<BR>　　我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate()，大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住：时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD，增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数，我们可以获得这个月的第一天。另外，计算出来的日期的时间部分将会是“00:00:00.000”。 <BR>　　<BR>　　这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数，然后把它加到“1900-01-01”上来获得特殊的日期，这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。<BR>本周的星期一 <BR>　　<BR>　　这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。 <BR>　　<BR>　　SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) <BR>　　<BR>　　<B><FONT color=red>一年的第一天</FONT></B> <BR>　　<BR>　　现在用年(yy)的时间间隔来显示这一年的第一天。 <BR>　　<BR>　　SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) <BR>　　<BR>　　<FONT color=red><B>季度的第一天</B> </FONT><BR>　　<BR>　　假如你要计算这个季度的第一天，这个例子告诉你该如何做。 <BR>　　<BR>　　SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) <BR>　　<BR>　　<FONT color=red><B>当天的半夜</B></FONT> <BR>　　<BR>　　曾经需要通过getdate()函数为了返回时间值截掉时间部分，就会考虑到当前日期是不是在半夜。假如这样，这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。 <BR>　　<BR>　　SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) <BR>　　<BR>　　深入DATEDIFF和DATEADD函数计算 <BR>　　<BR>　　你可以明白，通过使用简单的DATEDIFF和DATEADD函数计算，你可以发现很多不同的可能有意义的日期。 <BR>　　<BR>　　目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量，然后把它加到“1900-01-01”的时间间隔上来计算出日期。假定你修改时间间隔的数量，或者使用不同的时间间隔来调用DATEADD函数，或者减去时间间隔而不是增加，那么通过这些小的调整你可以发现和多不同的日期。 <BR>　　<BR>　　这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。 <BR><B><FONT color=red>上个月的最后一天</FONT> </B><BR>　　<BR>　　这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住，在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。 <BR>　　<BR>　　SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) <BR>　　<BR>　　计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:59:59:997”)的时间。 <BR>　　<BR>　　<B><FONT color=red>去年的最后一天</FONT></B> <BR>　　<BR>　　连接上面的例子，为了要得到去年的最后一天，你需要在今年的第一天上减去3毫秒。 <BR>　　<BR>　　SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) <BR>　　<BR>　　<FONT color=red><B>本月的最后一天</B></FONT> <BR>　　<BR>　　现在，为了获得本月的最后一天，我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月，我计算出下个月的第一天，然后减去3毫秒，这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。 <BR>　　<BR>　　SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) <BR>　　<BR>　　<FONT color=red><B>本年的最后一天</B> </FONT>　　<BR>　　你现在应该掌握这个的做法，这是计算本年最后一天脚本 <BR>　　<BR>　　SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。 <BR>　　<BR>　　<FONT color=red><B>本月的第一个星期一</B></FONT> <BR>　　<BR>　　好了，现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。 <BR>　　<BR>　　select DATEADD(wk, DATEDIFF(wk,0, <BR>　　dateadd(dd,6-datepart(day,getdate()),getdate()) <BR>　　), 0) <BR>　　<BR>　　在这个例子里，我使用了“本周的星期一”的脚本，并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天，在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。 <BR>　　<BR>　　总结 <BR>　　<BR>　　我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。通过使用这个计算日期的时间间隔的数学方法，我发现为了显示两个日期之间间隔的有用历法是有价值的。注意，这只是计算出这些日期的一种方法。要牢记，还有很多方法 可以得到相同的计算结果。假如你有其他的方法，那很不错，要是你没有，我希望这些例子可以给你一些启发，当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时。 <BR>附录，其他日期处理方法 <BR>　　<BR>　　1)<FONT color=red>去掉时分秒</FONT> <BR>　　declare @ datetime <BR>　　set @ = getdate() --'2003-7-1 10:00:00' <BR>　　SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) <BR>　　<BR>　　2）<FONT color=red>显示星期几</FONT> <BR>　　select datename(weekday,getdate()) <BR>　　<BR>　　3）如何<FONT color=red>取得某个月的天数</FONT> <BR>　　declare @m int <BR>　　set @m=2 --月份 <BR>　　select datediff(day,'2003-'+cast(@m as varchar)+'-15' ,'2003-'+cast(@m+1 as varchar)+'-15') <BR>　　另外，取得本月天数 <BR>　　select datediff(day,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate()) as varchar)+'-15' ,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate())+1 as varchar)+'-15') <BR>　　或者使用计算本月的最后一天的脚本，然后用DAY函数区最后一天 <BR>　　SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))) <BR>　　<BR>　　4）<FONT color=red>判断是否闰年</FONT>： <BR>　　SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then '平年' else '闰年' end <BR>　　或者 <BR>　　select case datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01')) <BR>　　when 28 then '平年' else '闰年' end <BR>　　<BR>　　5）<FONT color=red>一个季度多少天</FONT> <BR>　　declare @m tinyint,@time smalldatetime <BR>　　select @m=month(getdate()) <BR>　　select @m=case when @m between 1 and 3 then 1 <BR>　　when @m between 4 and 6 then 4 <BR>　　when @m between 7 and 9 then 7 <BR>　　else 10 end <BR>　　select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01' <BR>　　select datediff(day,@time,dateadd(mm,3,@time))</FONT></P><!-- / message --><!-- edit note --><img src ="http://www.blogjava.net/Johncn/aggbug/22963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-08 12:40 <a href="http://www.blogjava.net/Johncn/archive/2005/12/08/22963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在DOS下恢复回收站中的文件[转]</title><link>http://www.blogjava.net/Johncn/archive/2005/12/06/22771.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Tue, 06 Dec 2005 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/06/22771.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/22771.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/06/22771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/22771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/22771.html</trackback:ping><description><![CDATA[<P><FONT face=Arial size=2>　　在Windows无法启动的时候，我们如何恢复回收站中的文件呢？如果当时删除时并不知道删除了些什么文件，能否恢复系统运行呢？回答是肯定的，就是用经典的 DOS 命令来实现。 </FONT></P>
<P><FONT face=Arial size=2>　　比如在双启动的系统里，在Windows 98的环境下误删除了NT的系统文件，导致NT和Windows 98都无法启动。 </FONT></P>
<P><FONT face=Arial size=2>　　下面介绍一种办法可以帮你解决这个问题。 首先进入到DOS模式(如果WINDOWS不能正常启动的话，用带启动文件的软盘启动)，进入到C: RECYCLED目录，这是一个隐藏目录，如果你要恢复的文件原来在D盘，相应的目录是D:RECYCLED。用dir/a命令可以列出一堆DC开头的隐藏文件（DC1.txt, DC2.com...），这些就是被你已经删除了的文件。 </FONT></P>
<P><FONT face=Arial size=2>　　但是由于Windows在把文件移至回收站的时候，把文件名给改了，所以还需要找回原来的文件名。原来的文件名可以从RECYCLED目录下的INFO2 文件中找的(用EDIT INFO2 )。INFO2 是一个二进制文件，每一个被删除的文件在 INFO2 文件中有一段记录（800字节），其中可以找到文件名，其他的信息都不是ASCII字符，那些乱码就不必管它了。 按找到的文件名用 COPY 命令拷到目标位置即可，如： COPY DC2.EXE C:WINDOWSCOMMANDDELTREE.EXE。 </FONT></P>
<P><FONT face=Arial size=2>　　文件名是按顺序排列的，第一个文件名就是DC1.* 文件的原来的文件名，后缀名保持不变。如果被删除的是目录的话，在RECYCLED下就有一个叫DC????的目录，用同样的方法可以找回原来的目录名。 </FONT></P>
<P><FONT face=Arial size=2>　　要做好这些工作，你必须保证有一张可以启动的软盘，除有io.sys、msdos.sys 和 command.com 外，最好里面有 edit.com 、attrib.exe文件，相信懂一点DOS基础的人都知道这是拿来做什么用的。同时也敬告熟悉 Windows 95/98/ME/2000/NT的用户，把常用的DOS命令也学一学，Windows用起来的确舒服，但出了问题有时还得用DOS方法来解决。</FONT></P><img src ="http://www.blogjava.net/Johncn/aggbug/22771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-06 20:49 <a href="http://www.blogjava.net/Johncn/archive/2005/12/06/22771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Java程序作成exe文件的几种方法[转]</title><link>http://www.blogjava.net/Johncn/archive/2005/12/06/22769.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Tue, 06 Dec 2005 12:41:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/06/22769.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/22769.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/06/22769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/22769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/22769.html</trackback:ping><description><![CDATA[<TABLE class=zhi14 height=38 cellSpacing=0 cellPadding=0 width=648 align=center border=0>
<TBODY>
<TR>
<TD width=648 height=20><FONT face=Arial size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD style="WORD-BREAK: break-all" vAlign=top width=648 height=18><BR><FONT face=Arial size=2>　　<B>一、exe4j</B><BR><BR>说明：exe4j可以将Jar文件制作成exe文件，但需jre支持，也可将Jar文件放在外面。<BR><BR>软件性质：共享软件<BR><BR>下载地址：http://www.ej-technologies.com/products/exe4j/overview.html<BR><BR><B>二、JBuilder</B><BR><BR>说明：新版本的JBuilder可以直接把工程制作成各系统的可执行文件，包括Windows系统。<BR><BR>软件性质：商业软件<BR><BR>下载地址：略。我是从eMule下载的。<BR><BR><B>三、NativeJ</B><BR><BR>说明：与exe4j功能类似。<BR><BR>软件性质：共享软件<BR><BR>下载地址：http://www.dobysoft.com/products/nativej/download.html<BR><BR><B>四、Excelsior JET</B><BR><BR>说明：可以直接将Java类文件制作成exe文件，除AWT和Swing及第三方图形接口外可不需jre支持（Java5.0不行）。<BR><BR>软件性质：共享软件<BR><BR>下载地址：http://excelsior-usa.com/home.html<BR><BR><B>五、jshrink</B><BR><BR>说明：可将Jar文件打包进exe文件。同时具有混淆功能（这才是它的主要功能）。<BR><BR>软件性质：共享软件<BR><BR>下载地址：http://www.e-t.com/jshrink.html<BR><BR><B>六、InstallAnywhere</B><BR><BR>说明：打包工具，对Java打包最好用。可打包成各操作系统运行包。包括Windows系统。<BR><BR>软件性质：商业软件。<BR><BR>下载地址：http://www.zerog.com/<BR><BR><B>七、InstallShieldX</B><BR><BR>说明：与InstallAnywhere类似，但比InstallAnywhere功能强大。相对的，比较复杂，不易上手，我现在还没学会。<BR></FONT></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/Johncn/aggbug/22769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-06 20:41 <a href="http://www.blogjava.net/Johncn/archive/2005/12/06/22769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让Java程序带着jre一起上路[转]</title><link>http://www.blogjava.net/Johncn/archive/2005/12/06/22768.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Tue, 06 Dec 2005 12:40:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/06/22768.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/22768.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/06/22768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/22768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/22768.html</trackback:ping><description><![CDATA[<FONT face=Arial size=2>　　用Java开发程序，发布时总要考虑的问题就是怎么在使用者的机器上装好JRE。要考虑的问题很多：使用者有没有能力独自安装JRE，使用者已有的JRE和我们需要的版本是不是一致，会不会出现版本问题，等等。<BR><BR>使用.NET要考虑的问题就少些。现在.NET CLR似乎已经很普及了，看好多D版的Win XP都会自己安装最新的.NET CLR，而且似乎它的安装界面也比JRE友好些。彻底解决安装JRE的问题的方案，就是让我们的应用程序自己背着JRE！这样，我们的程序就像传统的Win32应用程序一样，双击就可以执行，不用管所在的机器上是否有JRE，是什么版本的JRE，无论怎样，我有我自己的！要做到这一点，其实非常容易。<BR><BR>王森在他的《Java深度历险》（强力推荐这本书，内容少而精）的第一章就解释了JDK，JRE，JVM之间的关系。解释了我们执行java.exe时发生的事情。其中提到，java.exe依照一套逻辑来寻找可以用的JRE，首先查找自己所在的目录下有没有JRE（据王森讲这样说不确切，我没有JDK全部的源代码，在此无从考证）；其次查找自己的父目录下有没有JRE；最后才是查询Windows的注册表。<BR><BR>通常我们在安装好了JRE的机器上的任何一个目录下都可以执行java.exe。因为它在安装时被复制到了windows的system32目录下，而后者无论如何都会在path环境变量中。这个java.exe最终必然会访问注册表来确定真正的JRE的所在地。若我们要求每一个应用程序都自带JRE，必然不能走这条路。但，逻辑的第二条讲，java.exe会在它的父目录下查找JRE，解决方案就在这一条中。<BR><BR>假设我们的应用程序打好了包，叫做MyApp.jar，放在MyApp的目录下。我们在MyApp目录下，可以执行java –jar MyApp.jar来运行我们的程序。我们安装的是JRE 1.5，在C:\Program Files\Java\jre1.5.0下。现在，我们只需要简单的将jre1.5.0目录搬到MyApp目录下，顺便改个容易写的名字比如叫jre。现在，我们的应用程序就象这样：<BR><BR>MyApp<BR>MyApp.jar<BR>Jre<BR>Jre1.5.0目录下的全部内容<BR><BR>Java.exe就在jre目录下的bin目录中。根据第二条逻辑，java.exe会在它的父目录中查找jre，实验证实，它会查找lib目录，而lib就在jre目录下。因此，这样java.exe就会确定jre的所在然后正常执行java程序，不会去管我们是否安装了JRE，注册表中是否有注册项这些杂事了。<BR><BR>试一下，在命令行下进入MyApp的目录下，假设它在C盘，将path指向MyApp下的JRE：<BR>set path=c:\MyApp\jre\bin<BR><BR>然后运行：<BR>java –verbose –jar MyApp.jar<BR><BR>加上verbose参数以确定我们确实用了这一套被搬出了家的JRE。<BR><BR>程序可以运行，并且在命令行输出的前几行，可以看到：<BR><BR>[Opened C:\MyApp\jre\lib\rt.jar]<BR>[Opened C:\MyApp\jre\lib\jsse.jar]<BR>[Opened C:\MyApp\jre\lib\jce.jar]<BR>[Opened C:\MyApp\jre\lib\charsets.jar]<BR><BR>因此程序读取的确实是它的私有的JRE。<BR><BR>至此，我们似乎完成了任务。但是现在我们的私有JRE仍不完美，缺点是太大。JRE 1.5有接近70MB，作为我们的私有的JRE，好多内容都是可以抛弃的。Jre目录下的license都可以不要，bin下的执行文件只需要保留java.exe或者javaw.exe，lib下只要保留rt，jsse，jce，charsets几个库就可以了。除了i386和zi两个子目录外，其余的子目录都可以不要。Zi下只需要保留自己地区的子目录和其下的一些文件就可以。Lib下除了库之外的属性文件等等都要保留。这样清理一番，JRE仍然有接近50MB。还可以继续清理几个库文件里面不需要的内容，这需要仔细的整理，会很费功夫。最好能写出一个自动工具帮助我们整理它们。从Sun公司上下到的JMF里面附带的用Java写的媒体播放器就自带了JRE，只有几个MB。<BR><BR>清理过后需要运行几遍我们的应用程序，以确保我们的JRE不缺少东西。<BR><BR>如果我们希望能有一个程序直接启动我们的应用程序，那就还要费些功夫。最简单的方法是弄出一个快捷方式来，但是快捷方式的路径不能是相对的，不方便我们安装。我想到的方案就是用Win32程序包装一下。在VS.NET下写一个Win32小程序：<BR><BR>int PASCAL WinMain( HINSTANCE hInstance,<BR>HINSTANCE hPrevInstance,<BR>LPSTR lpszCmdLine,<BR>int nCmdShow ){　　STARTUPINFO si;<BR>PROCESS_INFORMATION pi;<BR>ZeroMemory( &amp;si, sizeof(si) );<BR>si.cb = sizeof(si);<BR>ZeroMemory( &amp;pi, sizeof(pi) );<BR>// Start the child process.<BR>if( !CreateProcess( "jre\\bin\\javaw.exe",//执行的程序名<BR>"jre\\bin\\javaw.exe -jar MyApp.jar", // 带参数的执行程序<BR>NULL,<BR>// Process handle not inheritable.<BR>NULL,<BR>// Thread handle not inheritable.<BR>FALSE,<BR>// Set handle inheritance to FALSE.<BR>0,<BR>// No creation flags.<BR>NULL,<BR>// Use parent's environment block.<BR>NULL,<BR>// Use parent's starting directory.<BR>&amp;si,<BR>// Pointer to STARTUPINFO structure.<BR>&amp;pi )<BR>// Pointer to PROCESS_INFORMATION structure.　　)<BR>{　　　　　　ErrorExit( "CreateProcess failed." );<BR>}　　 // Wait until child process exits.　　WaitForSingleObject( pi.hProcess, INFINITE );<BR>// Close process and thread handles.<BR>CloseHandle( pi.hProcess );<BR>CloseHandle( pi.hThread );}<BR><BR>基本上是按照MSDN文档中的例子照搬的。将它编译成一个EXE文件，我们的任务才全部完成。双击这个EXE文件，我们的程序启动了，看起来和传统的Win32程序没有两样，JRE完全被隐藏在底层。<BR><BR>P.S. 使用了这个方案后，我用Wise Installation System制作安装程序，发现一个非常奇怪的问题，安装结束后，安装程序似乎非要运行一个叫做GLJ什么什么，后缀是TMP的程序，还需要JVM，结果就报错JVM.DLL找不到。安装总是不成功。我已经禁掉了OCX / DLL / EXE自注册和卸载支持，为什么还不对？有谁知道是为什么吗？ </FONT><img src ="http://www.blogjava.net/Johncn/aggbug/22768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-06 20:40 <a href="http://www.blogjava.net/Johncn/archive/2005/12/06/22768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet 上传文件(转)</title><link>http://www.blogjava.net/Johncn/archive/2005/12/02/22214.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Fri, 02 Dec 2005 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/12/02/22214.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/22214.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/12/02/22214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/22214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/22214.html</trackback:ping><description><![CDATA[（<A href="http://http://max.51sunny.net/blogview.asp?logID=48">原文</A>）<BR>　　编程思路：下面的UploadServlet.java&nbsp;，其主要功能为从InputStream&nbsp;中读取文件内容，将上传文件保存在根目录下，且文件名与上传文件的文件名一致。<BR><SPAN id=Codehighlighter1_119_1995_Open_Text><SPAN id=Codehighlighter1_961_1995_Open_Text><SPAN id=Codehighlighter1_1054_1995_Open_Text><SPAN id=Codehighlighter1_1493_1995_Open_Text><SPAN id=Codehighlighter1_1954_1995_Open_Text>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.io.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.servlet.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.servlet.http.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;UploadServlet&nbsp;</SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000">&nbsp;HttpServlet<BR><IMG id=Codehighlighter1_119_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_2130_Open_Text.style.display='none'; Codehighlighter1_119_2130_Closed_Image.style.display='inline'; Codehighlighter1_119_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_119_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_2130_Closed_Text.style.display='none'; Codehighlighter1_119_2130_Open_Image.style.display='inline'; Codehighlighter1_119_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_119_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_119_2130_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">default&nbsp;maximum&nbsp;allowable&nbsp;file&nbsp;size&nbsp;is&nbsp;1000k</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;MAX_SIZE&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1024000</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">instance&nbsp;variables&nbsp;to&nbsp;store&nbsp;root&nbsp;and&nbsp;success&nbsp;message</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">String&nbsp;rootPath,&nbsp;successMessage;<BR><IMG id=Codehighlighter1_293_351_Open_Image onclick="this.style.display='none'; Codehighlighter1_293_351_Open_Text.style.display='none'; Codehighlighter1_293_351_Closed_Image.style.display='inline'; Codehighlighter1_293_351_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_293_351_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_293_351_Closed_Text.style.display='none'; Codehighlighter1_293_351_Open_Image.style.display='inline'; Codehighlighter1_293_351_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_293_351_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</SPAN><SPAN id=Codehighlighter1_293_351_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;init&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;servlet&nbsp;is&nbsp;initialized.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;init(ServletConfig&nbsp;config)&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;ServletException<BR><IMG id=Codehighlighter1_416_798_Open_Image onclick="this.style.display='none'; Codehighlighter1_416_798_Open_Text.style.display='none'; Codehighlighter1_416_798_Closed_Image.style.display='inline'; Codehighlighter1_416_798_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_416_798_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_416_798_Closed_Text.style.display='none'; Codehighlighter1_416_798_Open_Image.style.display='inline'; Codehighlighter1_416_798_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_416_798_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_416_798_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.init(config);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">get&nbsp;path&nbsp;in&nbsp;which&nbsp;to&nbsp;save&nbsp;file</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">rootPath&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;config.getInitParameter(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">RootPath</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(rootPath&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_541_559_Open_Image onclick="this.style.display='none'; Codehighlighter1_541_559_Open_Text.style.display='none'; Codehighlighter1_541_559_Closed_Image.style.display='inline'; Codehighlighter1_541_559_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_541_559_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_541_559_Closed_Text.style.display='none'; Codehighlighter1_541_559_Open_Image.style.display='inline'; Codehighlighter1_541_559_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_541_559_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_541_559_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>rootPath&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_561_662_Open_Image onclick="this.style.display='none'; Codehighlighter1_561_662_Open_Text.style.display='none'; Codehighlighter1_561_662_Closed_Image.style.display='inline'; Codehighlighter1_561_662_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_561_662_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_561_662_Closed_Text.style.display='none'; Codehighlighter1_561_662_Open_Image.style.display='inline'; Codehighlighter1_561_662_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_561_662_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_561_662_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">Get&nbsp;message&nbsp;to&nbsp;show&nbsp;when&nbsp;upload&nbsp;is&nbsp;complete.&nbsp;Used&nbsp;only&nbsp;if<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>a&nbsp;success&nbsp;redirect&nbsp;page&nbsp;is&nbsp;not&nbsp;supplied.</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>successMessage&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;config.getInitParameter(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">SuccessMessage</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(successMessage&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_752_796_Open_Image onclick="this.style.display='none'; Codehighlighter1_752_796_Open_Text.style.display='none'; Codehighlighter1_752_796_Closed_Image.style.display='inline'; Codehighlighter1_752_796_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_752_796_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_752_796_Closed_Text.style.display='none'; Codehighlighter1_752_796_Open_Image.style.display='inline'; Codehighlighter1_752_796_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_752_796_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_752_796_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>successMessage&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">File&nbsp;upload&nbsp;complete!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_800_882_Open_Image onclick="this.style.display='none'; Codehighlighter1_800_882_Open_Text.style.display='none'; Codehighlighter1_800_882_Closed_Image.style.display='inline'; Codehighlighter1_800_882_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_800_882_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_800_882_Closed_Text.style.display='none'; Codehighlighter1_800_882_Open_Image.style.display='inline'; Codehighlighter1_800_882_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_800_882_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</SPAN><SPAN id=Codehighlighter1_800_882_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;doPost&nbsp;reads&nbsp;the&nbsp;uploaded&nbsp;data&nbsp;from&nbsp;the&nbsp;request&nbsp;and&nbsp;writes<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;it&nbsp;to&nbsp;a&nbsp;file.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;doPost(HttpServletRequest&nbsp;request,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>HttpServletResponse&nbsp;response)<BR><IMG id=Codehighlighter1_961_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_961_2130_Open_Text.style.display='none'; Codehighlighter1_961_2130_Closed_Image.style.display='inline'; Codehighlighter1_961_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_961_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_961_2130_Closed_Text.style.display='none'; Codehighlighter1_961_2130_Open_Image.style.display='inline'; Codehighlighter1_961_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_961_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_961_2130_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>ServletOutputStream&nbsp;out</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>DataInputStream&nbsp;in</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>FileOutputStream&nbsp;fileOut</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_1054_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_1054_2130_Open_Text.style.display='none'; Codehighlighter1_1054_2130_Closed_Image.style.display='inline'; Codehighlighter1_1054_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1054_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1054_2130_Closed_Text.style.display='none'; Codehighlighter1_1054_2130_Open_Image.style.display='inline'; Codehighlighter1_1054_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_1054_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1054_2130_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_1056_1160_Open_Image onclick="this.style.display='none'; Codehighlighter1_1056_1160_Open_Text.style.display='none'; Codehighlighter1_1056_1160_Closed_Image.style.display='inline'; Codehighlighter1_1056_1160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1056_1160_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1056_1160_Closed_Text.style.display='none'; Codehighlighter1_1056_1160_Open_Image.style.display='inline'; Codehighlighter1_1056_1160_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_1056_1160_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_1056_1160_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">set&nbsp;content&nbsp;type&nbsp;of&nbsp;response&nbsp;and&nbsp;get&nbsp;handle&nbsp;to&nbsp;output<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>stream&nbsp;in&nbsp;case&nbsp;we&nbsp;are&nbsp;unable&nbsp;to&nbsp;redirect&nbsp;client</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>response.setContentType(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">text/plain</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>out&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;response.getOutputStream();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">get&nbsp;content&nbsp;type&nbsp;of&nbsp;client&nbsp;request</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">String&nbsp;contentType&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;request.getContentType();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">\ncontentType=&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;contentType);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">make&nbsp;sure&nbsp;content&nbsp;type&nbsp;is&nbsp;multipart/form-data</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(contentType&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;contentType.indexOf(<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">multipart/form-data</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_1493_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_1493_2130_Open_Text.style.display='none'; Codehighlighter1_1493_2130_Closed_Image.style.display='inline'; Codehighlighter1_1493_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1493_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1493_2130_Closed_Text.style.display='none'; Codehighlighter1_1493_2130_Open_Image.style.display='inline'; Codehighlighter1_1493_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_1493_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1493_2130_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">open&nbsp;input&nbsp;stream&nbsp;from&nbsp;client&nbsp;to&nbsp;capture&nbsp;upload&nbsp;file</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">in&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DataInputStream(request.getInputStream());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">get&nbsp;length&nbsp;of&nbsp;content&nbsp;data</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;formDataLength&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;request.getContentLength();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">\nContentLength=&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;formDataLength);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">allocate&nbsp;a&nbsp;byte&nbsp;array&nbsp;to&nbsp;store&nbsp;content&nbsp;data</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">&nbsp;dataBytes[]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[formDataLength];<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">read&nbsp;file&nbsp;into&nbsp;byte&nbsp;array</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;bytesRead&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;totalBytesRead&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;sizeCheck&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">&nbsp;(totalBytesRead&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;formDataLength)<BR><IMG id=Codehighlighter1_1954_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_1954_2130_Open_Text.style.display='none'; Codehighlighter1_1954_2130_Closed_Image.style.display='inline'; Codehighlighter1_1954_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1954_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1954_2130_Closed_Text.style.display='none'; Codehighlighter1_1954_2130_Open_Image.style.display='inline'; Codehighlighter1_1954_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_1954_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1954_2130_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">check&nbsp;for&nbsp;maximum&nbsp;file&nbsp;size&nbsp;violation</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">sizeCheck&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;totalBytesRead&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;in.available();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(sizeCheck&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;MAX_SIZE)<BR><IMG id=Codehighlighter1_2067_2129_Open_Image onclick="this.style.display='none'; Codehighlighter1_2067_2129_Open_Text.style.display='none'; Codehighlighter1_2067_2129_Closed_Image.style.display='inline'; Codehighlighter1_2067_2129_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2067_2129_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2067_2129_Closed_Text.style.display='none'; Codehighlighter1_2067_2129_Open_Image.style.display='inline'; Codehighlighter1_2067_2129_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_2067_2129_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_2067_2129_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Sorry,&nbsp;file&nbsp;is&nbsp;too&nbsp;large&nbsp;to&nbsp;upload.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN></DIV></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>编程技巧说明：<BR><BR>　　首先定义上传文件最大字节为1024K(1M)，上传文件保存在根目录(/)下，从请求的InputStream&nbsp;读取实体数据，根据请求头Content-Type&nbsp;和contenLength&nbsp;等值，从实体数据中解析出表单Form&nbsp;数据中的filename&nbsp;和Content-Type&nbsp;等值，然后将实体数据中真正属于上传文件的内容保存到服务器上的根目录文件中。<BR><BR>　　其中用到涉及中文输出：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">String&nbsp;fileStr</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String(dataBytes,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ISO8859_1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>fileOut</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;FileOutputStream(rootPath</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">fileName);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>fileOut.write(fileStr.getBytes(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ISO8859_1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">),</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,fileStr.legth());&nbsp;</SPAN></DIV>　　UploadFile.html&nbsp;的源代码如下：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;!</SPAN><SPAN style="COLOR: #ff00ff">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//IETF//DTD&nbsp;HTML//EN"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">html</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">head</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">meta&nbsp;</SPAN><SPAN style="COLOR: #ff0000">http-equiv</SPAN><SPAN style="COLOR: #0000ff">="Content-Type"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;content</SPAN><SPAN style="COLOR: #0000ff">="text/html;&nbsp;charset=gb_2312-80"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">title</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">Upload&nbsp;a&nbsp;File</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">title</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">head</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">body</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">文件上传&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">h2</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">提示：您的浏览器必须能支持文件上传！</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">h2</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">form&nbsp;</SPAN><SPAN style="COLOR: #ff0000">action</SPAN><SPAN style="COLOR: #0000ff">="servlet/uploadServlet"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;method</SPAN><SPAN style="COLOR: #0000ff">="POST"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;enctype</SPAN><SPAN style="COLOR: #0000ff">="multipart/form-data"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">div&nbsp;</SPAN><SPAN style="COLOR: #ff0000">align</SPAN><SPAN style="COLOR: #0000ff">="left"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">pre</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">发送文件:</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="file"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;size</SPAN><SPAN style="COLOR: #0000ff">="40"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="upl-file"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">BR</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="submit"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="开始发送"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;now</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="reset"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="重&nbsp;设"</SPAN><SPAN style="COLOR: #0000ff">&gt;&lt;/</SPAN><SPAN style="COLOR: #800000">pre</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">div</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">form</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">body</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">html</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN></DIV>　　小结：<BR><BR>　　(1)&nbsp;Servlet&nbsp;编程要求读者已经掌握了Java&nbsp;语言程序设计，最好对面向对象也有一定的了解。Java&nbsp;语言程序设计最主要的是对Java&nbsp;的类库的使用，同样掌握Servlet&nbsp;编程也要求熟练使用Sun&nbsp;公司提供的JSDK。<BR><BR>　　(2)&nbsp;一个好的Servlet&nbsp;程序必须要考虑得全面。由于Servlet&nbsp;在服务器上执行，为客户提供服务，有时可能会有多个客户同时向一个服务器发请求，这就要求Servlet&nbsp;程序必须能够保证良好的并发性。允许Servlet&nbsp;并发执行，就要解决Servlet&nbsp;中变量和同步访问以及共享的问题，尤其要特别注意服务器的一些昂贵的资源。另一方面，Servlet&nbsp;要把处理结果返回给客户，要求Servlet&nbsp;充分考虑响应的速度和响应结果的简洁明了，同时对客户的错误请求有一定的容错性。<BR><BR>　　(3)&nbsp;解决Servlet&nbsp;中文输出问题<BR><BR>　　当Servlet&nbsp;输出的文档中有中文时，需要在Servlet&nbsp;中使用下面的语句来指明：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">response.setContentType(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">text/html;charset=gb2312</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;</SPAN></DIV>　　在JSP中使用：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG id=Codehighlighter1_2_45_Open_Image onclick="this.style.display='none'; Codehighlighter1_2_45_Open_Text.style.display='none'; Codehighlighter1_2_45_Closed_Image.style.display='inline'; Codehighlighter1_2_45_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_2_45_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_45_Closed_Text.style.display='none'; Codehighlighter1_2_45_Open_Image.style.display='inline'; Codehighlighter1_2_45_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</SPAN><SPAN id=Codehighlighter1_2_45_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_2_45_Open_Text><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@page&nbsp;contentType</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">text/html;charset=gb2312</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN></SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN></DIV>　　这两者是等效的。<BR><BR>　　如果在Servlet&nbsp;中文显示有问题，可从以下几方面来考虑：<BR><BR>　　*&nbsp;修改区域设置---在控制面板中选择区域设置，如设为英语(美国)。<BR><BR>　　*&nbsp;在编译Servlet&nbsp;时加入代码选项，如：javac&nbsp;-encoding&nbsp;iso8859-1&nbsp;ghqServlet.java<BR><BR>　　*&nbsp;在源程序中加入编码转换函数，如：out.println(new&nbsp;String("请输入用户名").getBytes("GBK"),"ISO8859_1"));<BR><BR>　　或者使用下面的方法：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">String&nbsp;Str="请输入用户名";<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Byte[]&nbsp;tempByte=Str.getBytes("ISO8859_1");<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;tempStr=new&nbsp;String(tempByte);&nbsp;</SPAN></DIV>
<P>　　这样tempStr&nbsp;中的中文就可以正确显示了。<BR><BR>　　由于Servlet&nbsp;采用不同的引擎，其中文的解决方法可能不同；因此，当出现中文显示问题时，建议一定要多实验，最终总会得到解决。<BR><BR>　　(4)&nbsp;Java&nbsp;Servlet&nbsp;程序弥补了&nbsp;Applet&nbsp;程序的不足，&nbsp;Servlet&nbsp;主要应用在HTTP&nbsp;Servlet&nbsp;接收请求(HttpServletRequest接口)和产生响应(HttpServletResponse接口)、使用Cookies&nbsp;及会话管理(HttpSession&nbsp;接口)应用、Java&nbsp;Servlet&nbsp;在网络上的编程应用如利用Servlet&nbsp;上传和下载文件、Servlet&nbsp;的数据库编程、在Servlet&nbsp;中发送和接受邮件以及Java&nbsp;Servlet&nbsp;在RMI和XML等方面的应用，因此Servlet&nbsp;的编程应用还是比较广泛的。<BR><BR>　　通常&nbsp;Servlet&nbsp;可以使用以下的方法调用：<BR><BR>　　*&nbsp;客户通过访问&nbsp;Servlet&nbsp;产生的文档来调用<BR><BR>　　Server&nbsp;得到一个访问文档的请求后，查找配置参数，就会发现所需文档不是一个静态文档，而是由&nbsp;Servlet&nbsp;对象产生的，于是服务器就会把请求传给&nbsp;Servlet，Servlet&nbsp;调用&nbsp;"service"&nbsp;方法产生输出。这种方法与传统的调用&nbsp;CGI&nbsp;的方法类似。<BR><BR>　　*&nbsp;直接通过&nbsp;URL&nbsp;调用&nbsp;Servlet<BR><BR>　　客户(浏览器)使用以下格式的&nbsp;URL&nbsp;调用：<BR><BR><A href="http://servlet_host_name/servlet/" target=_blank>http://Servlet_Host_Name/servlet/</A>&lt;servlet&nbsp;URL&gt;<BR><BR>&lt;servlet&nbsp;URL&gt;是指向&nbsp;Servlet&nbsp;位置的普通的URL，它的格式如下所示：<BR><BR>name?para1=value1&amp;para2=value2...<BR><BR>　　其中，name&nbsp;是&nbsp;Servlet&nbsp;的名字，"?"&nbsp;后面跟的是一串参数，para1&nbsp;是第一个参数名，value1是它的值，para1&nbsp;是第二个参数名，value2是它的值，以此类推。通常Servlet&nbsp;存放的位置可能与服务器不在同一台机器上，这时服务器就要动态加载、初始化和执行Servlet&nbsp;类。<BR><BR>　　*&nbsp;通过&nbsp;SSI(Server-Side&nbsp;Includes)&nbsp;标志调用<BR><BR>　　任何一个以.sthml&nbsp;为扩展名的文件都是服务器要分析的文件。在该文件中，如果出现了Servlet标志，那么服务器就会运行该Servlet，并把它的输出结果插入标志所指示的地方。<BR><BR>　　*&nbsp;把&nbsp;Servlet&nbsp;放在/servlet/目录下<BR><BR>　　如果一个&nbsp;Servlet&nbsp;的类文件被放在/servlet/目录下，那么就可以直接使用它的类名调用它。&nbsp;<BR><BR>　　*&nbsp;通过&nbsp;Filter&nbsp;Chain&nbsp;调用<BR><BR>　　这种方法一般要把&nbsp;Servlet&nbsp;配置成当一个特定的&nbsp;MIME&nbsp;类型被设置为响应时再调用。<BR><BR>　　但Servlet&nbsp;也有它的缺点：<BR><BR>　　*&nbsp;在复杂的HTML&nbsp;网页中，加入的动态部分如果用Servlet&nbsp;来处理的话，那对程序员来说简直是一场噩梦。<BR><BR>　　*&nbsp;Servlet&nbsp;要进行编译、放入执行码等复杂的调用过程。<BR><BR>　　正是由于Servlet存在的缺点，才出现使用JSP&nbsp;技术来解决上面的问题，这也正是JSP&nbsp;的优点。</P>
<P>
<HR>
</P><img src ="http://www.blogjava.net/Johncn/aggbug/22214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-12-02 11:09 <a href="http://www.blogjava.net/Johncn/archive/2005/12/02/22214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算机硬件笑话(转)</title><link>http://www.blogjava.net/Johncn/archive/2005/11/24/21314.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Thu, 24 Nov 2005 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/11/24/21314.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/21314.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/11/24/21314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/21314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/21314.html</trackback:ping><description><![CDATA[<DIV class=postTitle><FONT face=Arial size=2>显示器说：偶好惨啊，每天给人看。 <BR><BR>键盘说：偶更惨呢，每天给人打。 <BR><BR>鼠标说：偶才惨呢，每天给人摸。 <BR><BR>机箱说：你们有偶惨吗？每天给人按肚脐眼。 <BR><BR>光驱说：偶多惨，每天给人插。 <BR><BR>软驱说：偶更惨，现在都没人插偶了。 <BR><BR>优盘说：谁有偶惨？这边插完就去那边插，一不小心还要被感染。 <BR><BR>主板说：不要以为偶被很多东西插会很爽，其实偶最惨，他们插进来后一般就都不动了，那叫一个难受啊。 <BR><BR>声卡说：偶插上主板不动不说还得整天叫。 <BR><BR>插头转换器说：你们都别说了！唉！偶前面在插别人，后面还要被人插，到底谁最惨啊！<BR>
<HR>
<BR></FONT></DIV><img src ="http://www.blogjava.net/Johncn/aggbug/21314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-11-24 17:40 <a href="http://www.blogjava.net/Johncn/archive/2005/11/24/21314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX 上手篇(转)</title><link>http://www.blogjava.net/Johncn/archive/2005/11/22/21016.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Tue, 22 Nov 2005 11:02:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/11/22/21016.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/21016.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/11/22/21016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/21016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/21016.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: (原文)From MoztwWiki本文章為 Mozilla Developer Center 的 AJAX:Getting Started&nbsp;(http://developer.mozilla.org/en/docs/AJAX:Getting_Started) 的翻譯。原文的作者與編修歷史可在它的歷史頁&nbsp;(http://developer.mozil...&nbsp;&nbsp;<a href='http://www.blogjava.net/Johncn/archive/2005/11/22/21016.html'>阅读全文</a><img src ="http://www.blogjava.net/Johncn/aggbug/21016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-11-22 19:02 <a href="http://www.blogjava.net/Johncn/archive/2005/11/22/21016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>熬夜保健(转)</title><link>http://www.blogjava.net/Johncn/archive/2005/09/09/12576.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Fri, 09 Sep 2005 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/09/09/12576.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/12576.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/09/09/12576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/12576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/12576.html</trackback:ping><description><![CDATA[现在养成了晚上睡不着,早晨起不来的习惯,感觉这样对身体多多少少有些不好,所以将在网上看到的这篇文章(原文地址: <A href="http://totodo.blogdriver.com/totodo/556180.html">http://totodo.blogdriver.com/totodo/556180.html</A>)贴出来,以供和我有"同好"的朋友参考一下,毕竟身体健康是一切的前提:<BR>
<HR>
网站上有很多“熬夜族”，为了工作，为了生计，辛苦的工作，现收集一些关于熬夜的保健知识，希望对大家健康有帮助。<BR><BR><BR>信息<BR>“日出而作，日落而息。”这是长期以来人类适应环境的结果。熬夜会损害身体健康。因为，人体肾上腺皮质激素和生长激素都是在夜间睡眠时才分泌的。前者在黎明前分泌，具有促进人体糖类代谢、保障肌肉发育的功能；后者在入睡后方才产生，既促进青少年的生长发育。也能延缓中老年人衰老。故一天中睡眠最佳时间是晚上10时到凌晨6时。<BR><BR>经常熬夜的人，应采取哪能些自我保健措施呢？一是加强营养，应选择量少质高的蛋白质、脂肪和维生素B族食物如牛奶、牛肉、猪肉、鱼类、豆类等，也可吃点干果如核桃、大枣、桂圆、花生等，这样可以起到抗疲劳的功效。二是加强锻炼身体。可根据自己的年龄和兴趣进行锻炼，提高身体素质。熬夜中如感到精力不足或者欲睡，就应做一会儿体操、太极拳或到户外活动一下。三是调整生理节律。常年熬夜者应根据作息时间表，并不断修改至适应。四是消除思想负担。常熬夜者切忌忧虑和恐惧，应树立信心，在夜晚工作中保持愉快的心情和高昂的情绪。<BR><BR>==========================================<BR><BR>熬夜族的饮食保健<BR>　　夜工作者要供给充足的维生素A，因维生素A可调节视网膜感光物质———视紫的合成，能提高熬夜工作者对昏暗光线的适应力，而防止视觉疲劳。<BR><BR>　　熬夜工作者劳动强度大，耗能多，应注意优质蛋白质的补充。动物蛋白质最好能达到蛋白质供应总量的一半。因为动物蛋白质含人体必需氨基酸，这对于保证熬夜工作者提高工作效率和身体健康是有好处的。<BR><BR>==========================================<BR>熬夜一族的自我保健<BR>生活在节奏紧张的现代社会，没有熬过夜的人是幸运的人。熬夜会使身体的正常节律性发生紊乱，对视力、肠胃及睡眠都造成影响。那么，经常熬夜的人应该怎样自我保健呢？ <BR>　　 <BR>　　熬夜的人多半是做文字工作或经常操作电脑的人，在昏黄灯光下苦战一夜容易使眼肌疲劳、视力下降。卫生部北京医院营养科的主管营养师李长平大夫告诉记者，维生素A及维生素B对预防视力减弱有一定效果，维生素A可调节视网膜感光物质——视紫的合成，能提高熬夜工作者对昏暗光线的适应力，防止视觉疲劳。所以要多吃胡萝卜、韭菜、鳗鱼等富含维生素A的食物，以及富含维生素B的瘦肉、鱼肉、猪肝等动物性食品。 <BR>　　 <BR>　　此外，还应适当补充热量，吃一些水果、蔬菜及蛋白质食品如肉、蛋等来补充体力消耗，但千万不要大鱼大肉地猛吃。李长平大夫认为，吃一些花生米、杏仁、腰果、胡桃等干果类食品，它们含有丰富的蛋白质、维生素B、维生素E、钙和铁等矿物质以及植物油，而胆固醇的含量很低，对恢复体能有特殊的功效。 <BR>　　 <BR>　　除了在饮食上下功夫，熬夜一族要加强身体锻炼。熬夜中如感到精力不足或者欲睡，就应做一会儿体操或到户外活动一下。由于熬夜会占去正常睡眠的时间，因此在补充睡眠上不妨见机行事。如下班回家时，在车上闭目养神片刻，或在单位午休时为自己安排一小会儿午睡等，可恢复体力，使精神振作。 <BR><BR>==========================================<BR><BR>熬夜工作有何技巧？<BR>　　熬夜加班，也要有技巧，才能依然身体硬朗。否则，铁打的身体，也受不了如此的日夜操劳呢！因此，想要熬夜的您，千万记住：<BR><BR>　　1.不要吃泡面来填饱肚子，以免火气太大。最好尽量以水果、土司、面包、清粥小菜来充饥。<BR><BR>　　2.开始熬夜前，来一颗维他命Ｂ群营养丸。维他命Ｂ能够解除疲劳，增强人体抗压力。<BR><BR>　　3.提神饮料，最好以绿茶为主，可以提神，又可以消除体内多余的自由基，让您神清气爽。但是胃肠不好的人，最好改喝枸杞子泡水的茶，可以解压，还可以明目呢！<BR><BR>　　4.熬夜前千万记得卸妆，或是先把脸洗干净，以免厚厚的粉层或油渍，在熬夜的煎熬下，引发满脸痘痘。<BR><BR>　　5.熬夜之后，第二天中午时千万记得打个小盹。<BR>==============================================<BR><BR>熬夜的生活这样过<BR>现代人由于工作或职业的原因，都有过昼夜颠倒的时候。昼夜节律颠倒对人体的生理功能和代谢都会产生一定的负面影响。 <BR>　　在正常情况下，人体在白天与夜间的生理节律有明显的不同。白天主要以交感神经活动和物质代谢的分解过程为主，而夜间则以副交感神经活动和物质代谢的合成过程为主。生物化学的观察结果也证明，不同酶的活性和内分泌激素的代谢在昼夜间也有很大的差别。<BR><BR>熬夜须知<BR><BR>　　1、熬夜时要吃热的东西（如热方便面）。<BR><BR>　　2、晚饭不能吃太饱。<BR><BR>　　3、注意保暖，不要冻着肚子。<BR><BR>　　4、一定要有足够多的白开水。<BR><BR>　　5、熬夜无论多累中间不可上床休息。<BR><BR>　　6、若乏困可喝咖啡或茶水之类的刺激性饮品来提神，但要注意应饮热的，浓度不要太高，以免伤胃。<BR><BR>　　7、熬夜时，应时时做深长呼吸。<BR><BR>　　8、至少要熬到天亮，即凌晨5点左右，并不断的想象太阳升起时的辉煌和气势。<BR><BR>　　9、早饭一定要吃饱，一定不要吃凉的食物。<BR><BR>　　10、凌晨7、8点钟，若要睡觉，一定要收心，即使不上床睡觉，也要坐在椅子上收心。<BR><BR>熬夜最佳作息表<BR><BR>　　有的人喜欢熬夜，但其结果往往是把自己搞的精疲力尽，效率低下，长久下去还会伤害身体。其实，科学的、间断性的熬夜有时会使某些类型的人获得意想不到的效果。熬夜后，在凌晨4、5点钟入睡，熬了一整夜，你一定感到很累，所以睡觉时会睡得特别香、特别沉，你会休息得特别好。熬夜可以使你集中较长的时间，专攻一项难度较大的工作。<BR><BR>　　执行本作息表的先决条件是你晚上9、10点钟时感到精力过剩，根本不想睡觉。一般人轻易不要用本作息表。<BR><BR>　　10：00起床<BR><BR>　　10：00—11：00散步、听音乐<BR><BR>　　11：00—11：20吃饭，喝热汤、多青菜、有肉<BR><BR>　　11：30—19：30看书、做练习<BR><BR>　　19：30—20：00吃饭，有肉、多菜、九成饱<BR><BR>　　20：00—凌晨4：30工作、学习<BR><BR>　　凌晨4：30—10：00睡觉<BR><BR>熬夜最佳饮食<BR><BR>　　经常夜里工作的人，除了创造良好的工作条件和保证足够充分的睡眠之外，还应科学地安排好自己的一日三餐。<BR><BR>　　在一日三餐的安排上，首先应保证有足够的热能摄入。比如，为增进食欲，可在食品的烹调制作上力求做到食物品种多样化，色、香、味俱全，美味可口；为使一天的热能分配合理并防止过饥过饱的情况，就需要合理安排就餐时间和每餐膳食热量应占全天膳食总热量的百分比。<BR><BR>　　晚餐对于熬夜的人很重要，可占膳食总热量的30％－50％，可食用些高蛋白食物，进餐时间安排在劳动前一两小时为宜；中餐热量一般可占膳食总热量的20％至25％，进餐时间可安排在午后3时前后；早餐热量一般可占膳食总热量的15％－20％，并且应该以容易消化吸收的碳水化合物为主。在保证足够热能摄入的基础上，还应注意保证有足够的优质蛋白质、无机盐和维生素的摄入。所以适当摄入乳、蛋、鱼、瘦肉、猪肝、大豆及其制品，多吃蔬菜、水果，少吃纯糖和含脂肪高的食物，并应控制食盐的摄入量。<BR><BR>==========================================<BR><BR>熬夜虚劳药膳调养<BR>随着生活节奏的加快，越来越多的人加入了熬夜的行列。不过，如何保证熬夜的质量，又减少对身体健康的影响呢？<BR><BR>　　在熬夜时，喝许多浓茶或咖啡来刺激神经的兴奋是不可取的。因为咖啡因只能使人精神一时，而过后则会使人体大脑处于抑制状态，产生昏昏欲睡的感觉。<BR><BR>　　中医认为，经常熬夜的人容易导致阴亏阳亢而产生阴虚内热的症状，不妨使用药膳适当进行调养，使精力充沛。<BR><BR>　　生地炖鸭蛋：每次用生地20克、鸭蛋1至2个，加水适量隔水炖之，蛋熟后去壳，再放入汁中炖20分钟，冰糖调味，食蛋饮汁，每日1次或每周2至3次。有滋阴清热、生津止渴等功效，适用于熬夜后口燥咽干、牙龈肿痛者食用。<BR><BR>　　猪腰炖杜仲：每次用杜仲25克、猪腰子1个，水适量隔水炖1小时，每日或隔2至3日服食1次，有滋补肝肾，强壮筋骨之功效，适用于熬夜后腰酸背痛、四肢乏力者服用。<BR><BR>　　莲子百合煲瘦肉：每次用莲子(去芯)20克、百合20克、猪瘦肉100克，加水适量同煲，肉熟烂后加盐调味食用，每日1次。有清心润肺、益气安神之功效，适宜于熬夜后干咳、失眠、心烦、心悸等症者食用。<BR><BR>　　粉葛生鱼汤：每次用粉葛250克洗净切成小块，生鱼一条去腮及内脏，加水适量共煲，鱼熟后放入姜丝、油盐调味，食鱼饮汤，每月或隔日1次。有舒筋活络、益气和血、解肌痛等功效，适用于劳力过度熬夜后的肌内酸痛、颈肌胀痛者服用。<BR><BR>　　夏枯草煲瘦肉：每次用夏枯草10克、猪瘦肉50至100克，水适量共煲，肉熟后加盐少许调味，吃肉喝汁，每日1次。有清肝火，降血压之功效，适用于患有高血压病人熬夜后头晕头痛及眼红者服用。<BR><BR>==========================================<BR><BR>熬夜与饮食<BR>　　随着现代经济的发展，生活节奏的加快，越来越多的人加入了熬夜的行列。如何保证熬夜的质量，又减少对身体健康的影响，在饮食的调养上值得注意。<BR><BR>　　在熬夜时，假如想要夜间不会被累坏的话，必须使你的交感神经功能如同白天一样活跃才行。妨碍交感神经功能兴奋的是热能来源的米饭和面食。因此，在晚餐时，请不要吃米饭和面食，只吃鱼、肉类、蔬菜等副食即可。至于米饭或面食则隔1天早晨才吃。不过，这一种晚餐在经过3小时后就会开始饥饿。因此，饥饿的时候就要喝牛奶，或者是吃鸡蛋、水果。只要这样做，你就能够维持自己旺盛的精力。值得提醒的是，在熬夜时，喝许多浓茶或咖啡来刺激神经的兴奋是不可取的。因为咖啡因只能使神经一时兴奋，而过后则会使人体大脑处于抑制状态，产生昏昏欲睡的感觉。<BR><BR>　　中医认为，经常熬夜的人容易导致阴亏阳亢而产生阴虚内热的症状，不妨使用药膳适当进行调养，使精力充沛。<BR><BR>　　①、生地炖鸭蛋：每次用生地20克、鸭蛋l？2个，加水适量隔水炖之，蛋熟后去壳，再放入汁中炖20分钟，冰糖调味，食蛋饮汁，每日1次或每周2？3次。有滋阴清热、生津止渴等功效。适用于熬夜后口燥咽干、牙龈肿痛。手足心热者食用。<BR><BR>　　②、猪腰炖杜仲：每次用杜仲25克，猪腰子1个，水适量，隔水炖1小时，每日或隔2？3日服食1次，有滋补肝肾、强壮筋骨之功效。适用于熬夜后腰酸背痛、四肢乏力者服用。<BR><BR>　　③、莲子百合煲瘦肉：每次用莲子（去芯）20克，百合20克，猪瘦肉100克，加水适量同煲，肉熟烂后盐调味食用，每日1次。有清心润肺、益气安神之功效。适宜于熬夜后干咳。失眠、心烦、心悸等症者食用。<BR><BR>　　④、粉葛生鱼汤：每次用粉葛250克洗净切成小块，生鱼1条，去腮及内脏，加水适量共煲，鱼熟后放入姜丝、油盐调味，食鱼饮汤，每日或隔日1次。有舒筋活络、益气和血、解肌痛等功效。适用于劳力过度熬夜后的肌肉酸痛、颈肌胀痛者服用。<BR><BR>　　⑤、夏枯草煲瘦肉：每次用夏枯草10克，猪瘦肉50-100克，水适量共煲，肉熟后加盐少许调味，吃肉喝汁，每日1次。有清肝火、降血压之功效。适用于患有高血压病熬夜后头晕、头痛及眼红者服用。<BR><BR>==========================================<BR><BR>合理饮食帮你熬夜<BR><BR><BR>现代人由于工作或职业的原因，都有过昼夜颠倒的时候。昼夜节律颠倒对人体的生理功能和代谢都会产生一定的负面影响。 <BR><BR>在正常情况下，人体在白天与夜间的生理节律有明显的不同。白天主要以交感神经活动和物质代谢的分解过程为主，而夜间则以副交感神经活动和物质代谢的合成过程为主。生物化学的观察结果也证明，不同酶的活性和内分泌激素的代谢在昼夜间也有很大的差别。 <BR><BR>所以经常夜里工作的人，除了创造良好的工作条件和保证足够充分的睡眠之外，还应科学地安排好自己的一日三餐。 <BR><BR>在一日三餐的安排上，首先应保证有足够的热能摄入。比如，为增进食欲，可在食品的烹调制作上力求做到食物品种多样化，色、香、味俱全，美味可口；为使一天的热能分配合理并防止过饥过饱的情况，就需要合理安排就餐时间和每餐膳食热量应占全天膳食总热量的百分比。 <BR><BR>晚餐对于熬夜的人很重要，可占膳食总热量的30%～50%，可食用些高蛋白食物，进餐时间安排在劳动前一两小时为宜；中餐热量一般可占膳食总热量的20%～25%，进餐时间可安排在午后3时前后；早餐热量一般可占膳食总热量的15%～20%，并且应该以容易消化吸收的碳水化合物为主。在保证足够热能摄入的基础上，还应注意保证有足够的优质蛋白质、无机盐和维生素的摄入。所以适当摄入乳、蛋、鱼、瘦肉、猪肝、大豆及其制品，多吃蔬菜、水果，少吃纯糖和含脂肪高的食物，并应控制食盐的摄入量。 <BR><BR>==========================================<BR><BR>熬夜如何营养饮食<BR>　　现代人由于工作或职业的原因，都有过昼夜颠倒的时候。昼夜节律颠倒对人体的生理功能和代谢都会产生一定的负面影响。　<BR><BR>　　在正常情况下，人体在白天与夜间的生理节律有明显的不同。白天主要以交感神经活动和物质代谢的分解过程为主，而夜间则以副交感神经活动和物质代谢的合成过程为主。生物化学的观察结果也证明，不同酶的活性和内分泌激素的代谢在昼夜间也有很大的差别。　<BR><BR>　　所以经常夜里工作的人，除了创造良好的工作条件和保证足够充分的睡眠之外，还应科学地安排好自己的一日三餐。<BR><BR>　　在一日三餐的安排上，首先应保证有足够的热能摄入。比如，为增进食欲，可在食品的烹调制作上力求做到食物品种多样化，色、香、味俱全，美味可口；为使一天的热能分配合理并防止过饥过饱的情况，就需要合理安排就餐时间和每餐膳食热量应占全天膳食总热量的百分比。<BR><BR>　　晚餐对于熬夜的人很重要，可占膳食总热量的30%～50%，可食用些高蛋白食物，进餐时间安排在劳动前一两小时为宜；中餐热量一般可占膳食总热量的20%～25%，进餐时间可安排在午后3时前后；早餐热量一般可占膳食总热量的15%～20%，并且应该以容易消化吸收的碳水化合物为主。在保证足够热能摄入的基础上，还应注意保证有足够的优质蛋白质、无机盐和维生素的摄入。所以适当摄入乳、蛋、鱼、瘦肉、猪肝、大豆及其制品，多吃蔬菜、水果，少吃纯糖和含脂肪高的食物，并应控制食盐的摄入量。(<BR><BR>==========================================<BR>熬夜的人怎么吃? <BR>　　熬夜的人，最先想到的就是喝咖啡或喝茶提神，营养师表示，咖啡因的确会让人精神振奋。 <BR><BR> 不过，美国圣路加医院（St.Luke's Hospital）睡眠医药研究中心的实验发现，咖啡因对提升工作效率不见得有效，即使有用，也仅能维持短时间。 <BR><BR>咖啡因虽然提神，相对地会消耗体内与神经、肌肉协调有关的维生素B群，缺乏维生素B群的人本来就比较容易累，更可能形成恶性循环，养成酗茶、酗咖啡的习惯，需要量愈来愈多，效果却愈来愈差。因此，必须熬夜时，多补充些维生素B群，反而比较有效。 <BR><BR>熬夜时，有人认为吃甜食可以补充热量，其实甜食也是熬夜大忌。晚餐后或熬夜时，不要吃太多甜食，高糖虽有高热量，虽在一定程度上让人兴奋，却会消耗维生素B群，导致反效果，也容易引来肥胖问题。 <BR><BR> 整体说来，熬夜的预防保健仍取决于日常饮食，必须均衡摄取6大类食物。但为了熬夜，晚餐时多吃富含维生素B群的食物，绝对有必要！维生素B群成员颇多，包括叶酸、烟硷酸、维生素B6、维生素B12等，它们不仅参与新陈代谢，提供能量，保护神经细胞，对安定神经、舒缓焦虑也有助益。 <BR><BR>深绿色叶菜类及豆类植物，都含丰富叶酸盐，有助于细胞修补，预防感染和贫血；肝脏、鱼、全谷类、大豆食品、蔬果中有维生素B6或烟硷酸，可以维持皮肤健康、减缓老化；至于与记忆力、注意力有关的维生素B12，在红肉、牛奶、乳酪中都吃得到。<img src ="http://www.blogjava.net/Johncn/aggbug/12576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-09-09 16:21 <a href="http://www.blogjava.net/Johncn/archive/2005/09/09/12576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为卓越建立好习惯 </title><link>http://www.blogjava.net/Johncn/archive/2005/09/03/11902.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Sat, 03 Sep 2005 14:51:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/09/03/11902.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/11902.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/09/03/11902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/11902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/11902.html</trackback:ping><description><![CDATA[<DIV class=storycontent>
<P>（原文地址：<A href="http://www.txjstudio.com/WordPress/?p=255">http://www.txjstudio.com/WordPress/?p=255</A>）<BR>
<HR>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从书上看来的，开卷有益。让卓越成为一种习惯！</P>
<P>　　<STRONG>人按习惯做事</STRONG></P>
<P>　　人按习惯做事，为什么？因为习惯具有力量，习惯的力量叫做惯性。成功是一种习惯，失败也是一种习惯。所以习惯有好坏之分，好的习惯助人成功，坏的习惯使人受挫。所以有必要建立好习惯，克服坏习惯。</P>
<P>　　如果有时候你锁门，有时候你不锁门，结果有一次你最后一个走出家门，匆忙之中上了飞机或者火车之后，你突然想起来了一个问题：“门锁上了没有？”使得你忧心忡忡，甚至怀疑自己是否患了“精神强迫症”。其实如果你养成了一个习惯，就可以相信习惯的力量会帮助你解除担心。</P>
<P>　　行为科学的研究表明：如果每次你都能按某种方式行事的话，那么就会出现这样的情形：你如今的行事方式将慢慢占据你的脑海。重复次数越多，你过去的行事方式就越来越模糊，而新行事方式将越来越占据主导地位。</P>
<P>　　<STRONG>思想决定命运</STRONG></P>
<P>　　习惯分两类：思维习惯和行为习惯，改变行为之前先改变思维习惯，思维发生在行为之前。一个人很复杂，但是也很简单，简单到什么程度呢？只要知道了这个人的思想，就可以预知他的行为。如果他能够接受你的思想，那么他的行为就在你的预测范围之内。<BR><A id=more-255></A><BR>　　警察看谁都像小偷，老师看谁都像学生。所以有“秀才遇到兵，有理说不清”，“慈不掌兵”之说。由于从事一种职业时间长了，就养成了思维定势和行为习惯，所以就有职业习惯。</P>
<P>　　当你改变了自己的信念，你就改变了自己的行为。拒绝或接受变化，取决于你选择相信什么。</P>
<P>　　想法使事情具有形状和力量。想法可以激励人去搬山，想法比锁链和监狱更能禁锢人。人的构成有两部分：有形和无形，即肉体和思维。这两部分互相影响，而且要保持一致人才不至于痛苦，内外不协调会导致人不舒服。这就是内外协调，表里一致。所以思想、行为、习惯、命运之间就有了高度的联系。办事认真，对原则不喜欢妥协的人可以做审计；对数据敏感而不觉枯燥的人可以做会计；善于同人打交道，能够在短时间内把陌生人变成熟人、把熟人变成朋友的人可以去做营销员。这就是性格同命运的关系。</P>
<P>　　一个刚刚毕业来到企业的大学生，喜欢抽烟，又舍不得把好烟分给别人抽，因此在他的烟盒内装有两种档次的香烟，高档的自己抽，低档的给别人抽。结果这个人的结局比较尴尬，没有几个朋友，没有晋升，没有影响力。所以习惯岂止决定命运，习惯就是命运。</P>
<P>　　只是看到了好的行为和听到了好的思想不等于是你的好行为和思维，就像武术动作虽然好看，但不经过演练那个动作你做不来一样。习惯的建立在于重复，包括思维和行为。思维改变了，才可能改变行为。重复可以建立起一种习惯。</P>
<P>　　<STRONG>改变习惯需要动力</STRONG></P>
<P>　　意识产生动机，动机产生行为，这需要有动力。改变习惯同样需要有动力，动力来自哪里？动力有几种呢？</P>
<P>　　一个智者把三个胆量不同的人领到了山涧的旁边，跟他们说：谁能够跳过这个山涧，我承认谁胆子大。第一大胆的人跳了过来，得到了智者的赞美。其他两个人不跳。这时智者拿出一块金子，说谁能够跳过去我承认谁胆子大，第二大胆的人跳了过去。第三大胆的人还是不跳。这时此人后面出现了一头狮子，此人发现如果不跳生命即将结束，一用力，也跳了过来。这三个人都能够跳过来，但使得他们能够跳过来的这个行为发生的动力不同。</P>
<P>　　使人的行为发生的动力有两类：恐惧和诱因。行为发生了，是因为诱因足够，行为没有发生，是因为恐惧不够。如果一种习惯改变了，是因为诱因足够，如果一种习惯没有改变，则是因为恐惧不足。</P>
<P>　　恐惧比诱因有更大的动力。你可以不为金钱利益所动，但是你害怕失去：害怕失去自由、害怕失去健康、害怕失去爱。所以马基雅维里说：恐惧比感激更能够维系忠诚。</P>
<P>　　改变习惯需要动力，动力分为诱因或恐惧。不管是国外还是国内，在古代的时候，君主都是以武力来实现统治，即利用臣民对自己的恐惧达到统治的目的，而不是对臣民好一点，让他们产生感激来维系忠诚。因为感激是不可靠的，出于感激，人们只会在满足自己的情况下，再考虑对方。而恐惧就不一样了，它甚至可以让你先满足对方的要求，再考虑自己。</P>
<P>　　一个人要改变习惯真的很难，一个不喜欢学习的人要让他每天都去学习，他会觉得很不舒服。但是到了快要考试的时候，他就有了压力，考试不及格怎么办？如果考得好的话可以拿奖学金，对以后的推荐上研究生、出国、找工作都很有好处，面对恐惧和诱惑双重影响，他就会逼着自己改变习惯，因为他有了动力。</P>
<P>　　森林公园为了保护鹿，把狼赶走了。但是一些鹿却得病而死。得病的原因是缺少运动，为什么缺少运动？因为没有了天敌——狼，所以不用奔跑了。后来森林管理人员又把狼引进了公园，这样鹿们又恢复了健康。</P>
<P>　　<STRONG>学会放弃和选择</STRONG></P>
<P>　　如果你手里已经握了一个杯子，试图用同一只手握住另外一只杯子，是不可能的。只有先放下一只，才能拿到另外一只。</P>
<P>　　所以，为了有更好的成功与未来，有必要克服不好的习惯，建立好习惯。这些需要从改变思维做起，才能使我们拥有一个更加完美的人生。这样的人生目标，可以通过缔造高的情商实现。高情商的人首先是能够清楚地认识自我，掌握一些自我情绪调控的工具，通过调控自我的情绪来影响自己的行为，然后再影响别人——影响朋友、影响家人、影响下属、影响上司、影响同级。能够影响陌生人，把陌生人变成熟人，把熟人变成朋友，一旦变成了朋友关系，就有了广泛的人脉，有了人脉就有了财脉。能够影响别人就有了影响力，当有了影响力以后，就拥有了领导力，就有了个人权力，有了个人权力，就有可能获得职位权力，就会在一个组织中获得更多的资源支持。我们不可能一开始就做管理别人的人，但我们可以成为能够影响别人的人。影响别人的前提条件是我们要拥有能够影响别人的素质和内涵，缔造基于情商的影响力，就是为你塑造这样的素质和内涵。</P>
<P>　　习惯是一种选择，假如在某种情况下，每次你都有这种反应，导致你以后这样做起来很容易，就形成了习惯，而不管是好习惯还是坏习惯。因此，你可以选择对自己有利的好习惯。想使一个行为成为习惯需要两个前提：强迫它重复发生和建立情感触发器。</P>
<P>　　<STRONG>建立习惯的六个步骤</STRONG></P>
<P>　　<FONT color=#000080>习惯的建立需要六个步骤：<STRONG>做出承诺、现在行动、关注结果、不断重复、反馈纠偏、不要自责。</STRONG></FONT></P>
<P>　　做出承诺：向朋友承诺你建立习惯的决心，有了这样的表白你就会坚持，因为你不会在朋友面前说话不算数。在做出承诺时要使用第一人称：我。不能说“人其实要自信”，而是要说“我要自信”。</P>
<P>　　现在行动：行动等于“行了就动”，否则会被惰性和其他事情冲淡，不能唱“明日歌”。</P>
<P>　　关注结果：看到新习惯带来的好结果，自己是一个鼓励。《谁动了我的奶酪》中的小矮人唧唧，在寻找新奶酪的路径中，用大量想像中的奶酪来激励自己。如果你的目标结果可以衡量，那么这个结果会具有更大的激励作用。</P>
<P>　　不断重复：改变习惯是一个不舒服的过程，习惯的建立在于重复。习惯就是由于经常这样做所以变得容易的动作。</P>
<P>　　反馈纠偏：当你发现自己又出现老习惯的时候，及时觉醒。例如你要戒烟，当一段时间后你又把香烟放到嘴上的时候，你是有负罪感还是惬意？如果你真的对自己改变习惯高度承诺，那么就要立刻回到戒烟的轨道上来。</P>
<P>　　不要自责：出现反复的行为时，不要责怪自己。不要对自己说这样的话：我软弱、我没有毅力、我不行、我是一个失败者。这是一种暗示，它们影响潜意识。要对自己说：我很强、我没有问题、我会成功、我能行、我很有力量。</P>
<P>　　在建立习惯的过程中，要用正面的词汇和图像，少用负面的词汇和图像，用现在时而不是将来时。肯定你的行为而不是意愿，如“我要提高演讲能力”就是意愿，而 “我说话要清楚并且用词准确”就是行为。因为我们能够控制的是行为而不是意愿。一次只做一件事情，人不能同时做太多的事情。要用想像中的细节来鼓励自己。例如为了克服演讲时的紧张，可以这样想像：无数双眼睛在用欣赏的眼光看着我、无数双耳朵在倾听我的每一个词汇、热烈的掌声在为我欢呼等。目标不要遥不可及，虽然高目标总会使得人进步，但是如果改变习惯的目标太高而难以实现，你的潜意识就会惊慌，从而导致你本人整体慌乱。所以有时候追求完美并不合适。</P>
<P>　　<STRONG>像心情好那样去行动</STRONG></P>
<P>　　如果你不自信，但是装作自信，别人都看到了你的自信，并且赞美你和认可你的自信，你也会真的以为自己是自信的，以后就会表现得更加自信。像你已经养成那个习惯一样去行动，像不吸烟者那样去逛商店，像已经苗条的人那样去饮食。你必须从你的词汇库中除去一些词汇，这些词汇有：试一试、不能、但是。</P>
<P>　　模仿什么样人的行为，你就会获得什么样人的心情。</P>
<P>　　模仿成功者的行为，你会得到成功者的心态，所以说成功是可以模仿的。像心情好那样去行动，你就会获得好心情。</P>
<P>　　<STRONG>自我感觉要好</STRONG></P>
<P>　　一旦达到某个目标，人们就会感到身心舒畅，但问题是你可能永远达不到目标。把快乐建立在还不曾拥有的事情上，无异于剥夺自己创造快乐的权力。记住，快乐是天赋权利。首先就要有良好的感觉，让它使自己在塑造自我的整个旅途中充满快乐，而不要等到成功的最后一刻才去感受属于自己的欢乐。人在压力下智商下降，人在不快乐的情况下思考力下降。所以，在生活中找到能够使你愉快的事情，并以此站稳脚跟，你就能够获得好心情，对自我的感觉也会好一些。再以此为基础，向更高一点的目标努力，你会在好心情下实现一路风光。</P>
<P>　　如果你活给别人看，你就会很痛苦。如果你今天相信自己做得还不错，不在乎别人怎么看你，你就真的可以活得很自在。</P>
<P>　　有人在看到别人感觉良好时会产生嫉妒，所以把“自我感觉良好”作为贬义词送给别人。要知道实现自我感觉良好也是一件不容易的事，妒忌和挖苦只能使得人际关系恶化，破坏自己的好心情。改善人际关系和对方态度的途径是：认同和肯定对方。认同和肯定反而会使得对方谦虚，同时也会使得自己获得好心情。</P>
<P>　　<STRONG>建立好习惯</STRONG></P>
<P>　　在每个人的身上，都存在着这样一种神奇的力量，它可以使你精神焕发，也可以使你萎靡不振；它可以使你冷静理智，也可以使你暴躁易怒；它可以使你从容安详地生活，也可以使你惶惶然而不可终日。总之，它可以加强你，也可以削弱你，可以使你的生活充满甜蜜与欢乐，也可以使你的生活抑郁、沉闷、黯淡无光。</P>
<P>　　这种能使我们的感受产生变化的神奇力量，就是情绪。情绪活动是无时不在、无处不在的，人人皆有情绪。许多人至今对情绪的重要认识不足，把情绪活动仅仅看做是一种因外部条件所引起的偶然的感情变化，是一种无关紧要的、暂时的精神状态，听其自然，很少进行有意识的控制与调节，结果是积极健康的情绪得不到很好的保护，消极不良的情绪也得不到及时的调解，从而使人常常受到不良情绪的压抑与伤害。所以人们应学会控制与调节自己的情绪。</P>
<P>　　我们把控制与调节情绪的能力称为情商。情商包括区分自己与他人的能力，调节自己与他人的能力，运用情绪信息去引导思维的能力。注重培养情商不仅对日常生活有益，而且有助于提高你的领导力。</P>
<P>　　领导力就是影响他人的能力，领导者是具有影响力的人，领导者拥有追随者，领导者拥有权力。权力是现在采取行动的能力。一个领导者首先应该是一个自信的人，心胸豁达的人。懂得赞美鼓励别人、拥有激情和良好心态的人，才有可能感染别人、影响别人。要培养个人魅力，成为一个优秀的领导者，需要从现在起建立好习惯。</P>
<P>　　对于跳高运动员来说，眼睛要看着远处，才会跳得够远。戴高乐说过：眼睛所看到的地方，就是你会达到的地方。伟大的人之所以伟大，是因为他们要做出伟大的事情，所以树立培养高情商的目标，培养高情商的思维习惯，就可以获得完美人生。</P>
<P><EM>（摘自《情商与影响力》一书清华大学经济管理学院吴维库著）</EM> </P></DIV><img src ="http://www.blogjava.net/Johncn/aggbug/11902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-09-03 22:51 <a href="http://www.blogjava.net/Johncn/archive/2005/09/03/11902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Database] ORACLE SEQUENCE的简单介绍(转自：Java视线论坛)</title><link>http://www.blogjava.net/Johncn/archive/2005/09/03/11863.html</link><dc:creator>ZhuJun</dc:creator><author>ZhuJun</author><pubDate>Fri, 02 Sep 2005 17:08:00 GMT</pubDate><guid>http://www.blogjava.net/Johncn/archive/2005/09/03/11863.html</guid><wfw:comment>http://www.blogjava.net/Johncn/comments/11863.html</wfw:comment><comments>http://www.blogjava.net/Johncn/archive/2005/09/03/11863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Johncn/comments/commentRss/11863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Johncn/services/trackbacks/11863.html</trackback:ping><description><![CDATA[<P>原文地址：<A href="http://www.javaeye.com/allbloglist.php?page=29">http://www.javaeye.com/allbloglist.php?page=29</A></P>
<P><!--StartFragment --><SPAN class=postdetails>在oracle中sequence就是所谓的序列号，每次取的时候它会自动增加，一般用在需要按序列号排序的地方。 <BR><STRONG>1、Create Sequence</STRONG> <BR>你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限， <BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">CREATE</SPAN><SPAN style="COLOR: #000000">&nbsp;SEQUENCE&nbsp;emp_sequence&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>INCREMENT&nbsp;</SPAN><SPAN style="COLOR: #0000ff">BY</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">1</SPAN><SPAN style="COLOR: #000000">　&nbsp;</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">&nbsp;每次加几个&nbsp;</SPAN><SPAN style="COLOR: #008080"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">START&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WITH</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">1</SPAN><SPAN style="COLOR: #000000">　　&nbsp;</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">&nbsp;从1开始计数&nbsp;</SPAN><SPAN style="COLOR: #008080"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">NOMAXVALUE　　　&nbsp;</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">&nbsp;不设置最大值&nbsp;</SPAN><SPAN style="COLOR: #008080"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">NOCYCLE　　　　　</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">&nbsp;一直累加，不循环&nbsp;</SPAN><SPAN style="COLOR: #008080"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">CACHE&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">10</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
<P>一旦定义了emp_sequence，你就可以用CURRVAL，NEXTVAL <BR>CURRVAL=返回 sequence的当前值 <BR>NEXTVAL=增加sequence的值，然后返回 sequence 值 <BR>比如： </P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">emp_sequence.CURRVAL&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>emp_sequence.NEXTVAL</SPAN></DIV></DIV>
<P>可以使用sequence的地方： <BR>- 不包含子查询、snapshot、VIEW的 SELECT 语句 <BR>- INSERT语句的子查询中 <BR>- NSERT语句的VALUES中 <BR>- UPDATE 的 SET中 <BR><BR>可以看如下例子： <BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">INSERT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">INTO</SPAN><SPAN style="COLOR: #000000">&nbsp;emp&nbsp;</SPAN><SPAN style="COLOR: #0000ff">VALUES</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>(empseq.nextval,&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">LEWIS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">CLERK</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">7902</SPAN><SPAN style="COLOR: #000000">,&nbsp;SYSDATE,&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">1200</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">NULL</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">20</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;empseq.currval&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;DUAL;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">INSERT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">INTO</SPAN><SPAN style="COLOR: #000000">&nbsp;emp&nbsp;</SPAN><SPAN style="COLOR: #0000ff">VALUES</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>(empseq.nextval,&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">LEWIS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">CLERK</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">7902</SPAN><SPAN style="COLOR: #000000">,&nbsp;SYSDATE,&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">1200</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">NULL</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">20</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;empseq.currval&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;DUAL;&nbsp;</SPAN></DIV></DIV>
<P><BR>但是要注意的是： <BR>- 第一次NEXTVAL返回的是初始值；随后的NEXTVAL会自动增加你定义的INCREMENT BY值，然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值，但是在第一次NEXTVAL初始化之后才能使用CURRVAL，否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值，所以如果你在同一个语句里面使用多个NEXTVAL，其值就是不一样的。明白？ <BR><BR>- 如果指定CACHE值，ORACLE就可以预先在内存里面放置一些sequence，这样存取的快些。cache里面的取完后，oracle自动再取一组到cache。 使用cache或许会跳号， 比如数据库突然不正常down掉（shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 <BR><BR><STRONG>2、Alter Sequence</STRONG> <BR>你或者是该sequence的owner，或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值，必须 drop sequence 再 re-create . <BR>Alter sequence 的例子 <BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">ALTER</SPAN><SPAN style="COLOR: #000000">&nbsp;SEQUENCE&nbsp;emp_sequence&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>　　INCREMENT&nbsp;</SPAN><SPAN style="COLOR: #0000ff">BY</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">10</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>　　MAXVALUE&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">10000</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>　　CYCLE&nbsp;　　</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">&nbsp;到10000后从头开始&nbsp;</SPAN><SPAN style="COLOR: #008080"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">　　NOCACHE&nbsp;;&nbsp;</SPAN></DIV></DIV>
<P><BR><BR>影响Sequence的初始化参数： <BR>SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。 <BR><BR><STRONG>3. Drop Sequence <BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">DROP</SPAN><SPAN style="COLOR: #000000">&nbsp;SEQUENCE&nbsp;order_seq;&nbsp;</SPAN></DIV></DIV></STRONG></SPAN><img src ="http://www.blogjava.net/Johncn/aggbug/11863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Johncn/" target="_blank">ZhuJun</a> 2005-09-03 01:08 <a href="http://www.blogjava.net/Johncn/archive/2005/09/03/11863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>