<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Minggo</title>
  <link>http://minggo.livejournal.com/</link>
  <description>Minggo - LiveJournal.com</description>
  <lastBuildDate>Fri, 10 Nov 2006 08:04:13 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>minggo</lj:journal>
  <lj:journalid>8524123</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/36130153/8524123</url>
    <title>Minggo</title>
    <link>http://minggo.livejournal.com/</link>
    <width>48</width>
    <height>48</height>
  </image>

<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/14761.html</guid>
  <pubDate>Fri, 10 Nov 2006 08:04:13 GMT</pubDate>
  <title>cvs [server aborted]: cannot find .: No such file or directory</title>
  <link>http://minggo.livejournal.com/14761.html</link>
  <description>&lt;font face=&quot;Courier New&quot;&gt;更新一个cvs项目的根目录时，出现以下错误:&lt;br /&gt;cvs [server aborted]: cannot find .: No such file or directory&lt;br /&gt;&lt;br /&gt;应该只和cvsroot及winnt\temp(%windir%\temp)目录有关——毕竟只用到这两个目录而已。检查之后发现winnt\temp没有对cvs用户帐号的权限。设置之后问题解决。&lt;br /&gt;&lt;br /&gt;虽然cvsuser只是一个停用了的cvs用户绑定帐号，但是权限管理方面仍然遵循着ntfs的规则。这么说来停用的意义应该仅仅是限制登录。&lt;/font&gt;</description>
  <comments>http://minggo.livejournal.com/14761.html</comments>
  <category>cvsnnt</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/14515.html</guid>
  <pubDate>Wed, 27 Sep 2006 09:04:13 GMT</pubDate>
  <title>安装MS SQL SERVER时报错的问题</title>
  <link>http://minggo.livejournal.com/14515.html</link>
  <description>&lt;p&gt;--&amp;nbsp; MS SQL SERVER的问题&lt;br /&gt;在安装MS SQL SERVER的时候，安装完成开始启动服务是报错：&lt;br /&gt;&amp;nbsp; --&amp;gt;安装程序配置服务器失败。参考服务器错误日志和C:\\WINNT\\sqlstp.log了解更多信息&amp;lt;--&lt;/p&gt;&lt;p&gt;在sqlstp.log中有如下：&lt;br /&gt;--&amp;gt;正在启动?&lt;/p&gt;&lt;p&gt;Chinese_PRC_CI_AS&lt;/p&gt;&lt;p&gt;-m -Q -T4022 -T3659&lt;/p&gt;&lt;p&gt;正在与服务?&lt;/p&gt;&lt;p&gt;driver={sql server};server=WEBPHY-BACKUP;UID=sa;PWD=;database=master&lt;/p&gt;&lt;p&gt;[Microsoft][ODBC SQL Server Driver][SQL Server]用户 \&apos;sa\&apos; 登?&lt;/p&gt;&lt;p&gt;driver={sql server};server=WEBPHY-BACKUP;UID=sa;PWD=;database=master&lt;/p&gt;&lt;p&gt;[Microsoft][ODBC SQL Server Driver][SQL Server]用户 \&apos;sa\&apos; 登?&lt;/p&gt;&lt;p&gt;driver={sql server};server=WEBPHY-BACKUP;UID=sa;PWD=;database=master&lt;/p&gt;&lt;p&gt;[Microsoft][ODBC SQL Server Driver][SQL Server]用户 \&apos;sa\&apos; 登?&lt;/p&gt;&lt;p&gt;SQL Server 配置?&lt;/p&gt;&lt;p&gt;###############################################################################&lt;/p&gt;&lt;p&gt;16:43:05 Process Exit Code: (-1) &amp;lt;--&lt;/p&gt;&lt;p&gt;确定后多出：&lt;br /&gt;--&amp;gt;16:43:05 Process Exit Code: (-1) &lt;br /&gt;16:54:38 安装程序配置服务器失败。参考服务器错误日志和 C:\\WINNT\\sqlstp.log 了解更多信息。&lt;br /&gt;16:54:41 Action CleanUpInstall:&lt;br /&gt;16:54:41 C:\\WINNT\\TEMP\\SqlSetup\\Bin\\scm.exe&amp;nbsp; -Silent 1 -Action 4 -Service SQLSERVERAGENT&lt;br /&gt;16:54:41 Process Exit Code: (1060) 指定的服务并未以已安装的服务存在。&lt;/p&gt;&lt;p&gt;16:54:41 C:\\WINNT\\TEMP\\SqlSetup\\Bin\\scm.exe&amp;nbsp; -Silent 1 -Action 4 -Service MSSQLSERVER&lt;br /&gt;16:54:41 Process Exit Code: (0) &lt;br /&gt;16:54:41 StatsGenerate returned: 2&lt;br /&gt;16:54:41 StatsGenerate (0x0,0x1,0xf00000,0x400,2052,303,0x0,0x1,0,0,0&lt;br /&gt;16:54:41 StatsGenerate -1,Administrator)&lt;br /&gt;16:54:41 Installation Failed.&amp;lt;--&lt;/p&gt;&lt;p&gt;请教是什么原因？谢！ &lt;/p&gt;&lt;p&gt;答：&lt;/p&gt;&lt;p&gt;先把SQL&amp;nbsp; Server卸载，再把安装时产生的“Microsoft&amp;nbsp; SQL&amp;nbsp; Server”文件夹删掉,在运行注册表,把HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft&amp;nbsp; SQL&amp;nbsp; Server，和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft&amp;nbsp; SQL&amp;nbsp; Server全部删掉，(注意要把Microsoft&amp;nbsp; SQL&amp;nbsp; Server文件夹整个删掉),然后重起。&amp;nbsp; &lt;br /&gt;再装就应该没有问题了！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Win2k 装不上 SQL Server 2000 问题很常见.&lt;br /&gt;//&amp;nbsp;&amp;nbsp; (1)配置服务器时中断.&lt;br /&gt;//&amp;nbsp;&amp;nbsp; (2)注册 ActiveX 时中断.&lt;br /&gt;//&amp;nbsp;&amp;nbsp; (3)显示到100%的时候中断. &lt;br /&gt;当然重新安装 Windows 2000 完全可以安装 SQL Server 2000.&lt;/p&gt;&lt;p&gt;安全起见:&lt;br /&gt;1&amp;gt;先备份您的注册表.&lt;br /&gt;2&amp;gt;备份您的数据[进不了SQL Server 2000,可以备份 Program &lt;br /&gt;Files\\Microsoft SQL Server\\MSSQL\\Data 文件夹的文件.]&lt;/p&gt;&lt;p&gt;您必须知道:&lt;br /&gt;Windows 2000 Server 可以安装SQL Server 2000的任何版本.&lt;br /&gt;Windows 2000 Professional&amp;nbsp; 仅可以安装SQL Server 2000的个人&lt;br /&gt;版.&lt;/p&gt;&lt;p&gt;有两种办法:&lt;br /&gt;1:先卸载您的 SQL Server 2000,必要的时候删除 Program &lt;br /&gt;Files\\Microsoft SQL Server 文件夹.&lt;br /&gt;2:放入 SQL Server 2000 光盘.&lt;br /&gt;3:在&quot;开始&quot;--&quot;运行&quot;键入 &quot;F:\\x86\\setup.exe k=dbg&quot; (F是光盘)&lt;br /&gt;&amp;nbsp;&amp;nbsp; [此命令的意思单步运行安装 SQL Server 2000]&lt;br /&gt;4:98%安装不成功,没有任何的提示.可能是:&lt;br /&gt;&amp;nbsp;&amp;nbsp; (1)配置服务器时中断.&lt;br /&gt;&amp;nbsp;&amp;nbsp; (2)注册 ActiveX 时中断.&lt;br /&gt;&amp;nbsp;&amp;nbsp; (3)显示到100%的时候中断. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;这样一来,您只能使用下面的办法了!否则,您只有 FORMAT了!&lt;br /&gt;1 打开注册表 &lt;br /&gt;&amp;nbsp;&amp;nbsp; 在&quot;开始&quot;--&quot;运行&quot;键入 &quot;regedit&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;2 按下列顺序点击打开&lt;br /&gt;&amp;nbsp;&amp;nbsp; + HKEY_LOCAL_MACHINE &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + SOFTWART&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + Microsoft&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + Windows&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + CurrentVersion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + Setup&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ExceptionComponents&lt;br /&gt;3 将 ExceptionComponents 下面的文件夹全部删除!&lt;br /&gt;&amp;nbsp;&amp;nbsp; 如 {60BFF50D-FB2C-4498-A577-C9548C390BB9}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {60BFF50D-FB2C-4498-A577-C9548C390BB9}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {60BFF50D-FB2C-4498-A577-C9548C390BB9}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {60BFF50D-FB2C-4498-A577-C9548C390BB9}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .......&lt;/p&gt;&lt;p&gt;4 重新启动:&lt;br /&gt;5 重新安装 SQL Server 2000 &lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/14515.html</comments>
  <category>sqlserver bug</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/14145.html</guid>
  <pubDate>Wed, 27 Sep 2006 07:57:17 GMT</pubDate>
  <title>关于Sql Server企业管理器MMC 不能打开文件的解决方法</title>
  <link>http://minggo.livejournal.com/14145.html</link>
  <description>&lt;div class=&quot;postTitle&quot;&gt;打开SqlServer的企业管理器，突然出现如下错误(不知是什么原因造成的）：&lt;/div&gt;&lt;div class=&quot;postText&quot;&gt;&lt;p&gt;—————————&lt;br /&gt;Microsoft Management Console&lt;br /&gt;—————————&lt;br /&gt;MMC 不能打开文件 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC。&lt;/p&gt;&lt;p&gt;这可能是由于文件不存在，不是一个 MMC 控制台，或者用后来版本的 MMC 创建。也可能是由于您没有访问此文件的足够权限。&lt;br /&gt;—————————&lt;br /&gt;确定&amp;nbsp;&amp;nbsp; &lt;br /&gt;—————————&lt;/p&gt;&lt;p&gt;难道只能重装sql server,不甘心，终于在网上找到了解决办法：&lt;/p&gt;&lt;p&gt;运行mmc，控制台–添加/删除管理单元–添加–找到Microsoft SQL 企业管理器–添加–关闭–确定（注：此处点击添加完后就可以关闭了，不要等待响应，如果你多次点击了添加，后来可以看到n多个sql企业管理器。。。），再回到控制台–选项–控制台模式选择”用户模式完全访问”–将下面的选择全部取消。最后，从控制台–另存为–存储为:C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC（即SqlServer的安装目录下的binn文件夹）。&lt;/p&gt;&lt;p&gt;实在不行的话，重新注册DLL &lt;/p&gt;&lt;p&gt;运行：regsvr32 C:\Windows\system32\msxml3.dll&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://community.paain.net/Exper&quot;&gt;http://community.Paain.net/Exper&lt;/a&gt; … 8.xml?temp=.9712641&lt;/p&gt;&lt;p&gt;如果要重装必须删除文件比较彻底（包括删除SqlServer的整个安装目录和注册表MSSql的项）的话，应该也是可以了的。 &lt;/p&gt;&lt;/div&gt;</description>
  <comments>http://minggo.livejournal.com/14145.html</comments>
  <category>sqlserver bug</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/13964.html</guid>
  <pubDate>Tue, 08 Aug 2006 02:23:44 GMT</pubDate>
  <title>解析文本中的&amp;lt;IMG标签</title>
  <link>http://minggo.livejournal.com/13964.html</link>
  <description>&lt;p&gt;import java.util.regex.Matcher;&lt;br /&gt;import java.util.regex.Pattern;&lt;/p&gt;&lt;p&gt;public class ss {&lt;/p&gt;&lt;p&gt;&amp;nbsp;public static void main(String[] arg) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Pattern p = Pattern.compile(&quot;&amp;lt;img[^&amp;gt;]*&amp;gt;&quot;,Pattern.CASE_INSENSITIVE);&lt;br /&gt;&amp;nbsp;&amp;nbsp; Matcher m = p.matcher(&quot;one&amp;lt;b&amp;gt;dsfasdfasd&amp;lt;/b&amp;gt; &amp;lt;IMG sdfsd src=&apos;/www/UploadFile/200608070424195331.gif&apos; border=0&amp;gt; &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/TBODY&amp;gt;&amp;lt;/TABLE&amp;gt; +cat two cats in the yard&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; StringBuffer sb = new StringBuffer();&lt;br /&gt;&amp;nbsp;&amp;nbsp; m.find();&lt;br /&gt;&amp;nbsp;&amp;nbsp; String img=m.group();&lt;br /&gt;&amp;nbsp;&amp;nbsp; Pattern p1= Pattern.compile(&quot;(src)=[\&quot;\&apos;]?.+[\&quot;\&apos;]?[^&amp;gt;]\\s&quot;,Pattern.CASE_INSENSITIVE);&lt;br /&gt;&amp;nbsp;&amp;nbsp; Matcher m2=p1.matcher(img);&lt;br /&gt;&amp;nbsp;&amp;nbsp; m2.find();&lt;br /&gt;&amp;nbsp;&amp;nbsp; String src=m2.group();&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.out.println(src);&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.appendReplacement(sb, &quot;dog&quot;);&lt;br /&gt;//&amp;nbsp;&amp;nbsp; m.appendTail(sb);&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.out.println(sb.toString());&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/13964.html</comments>
  <category>字符解析</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/13627.html</guid>
  <pubDate>Mon, 07 Aug 2006 14:46:27 GMT</pubDate>
  <title>解决灰鸽子病毒Backdoor.Gpigeon.uql</title>
  <link>http://minggo.livejournal.com/13627.html</link>
  <description>&lt;p&gt;　电脑防毒之家:WWW.PCAV.CN提醒你保护好你的电脑 &lt;/p&gt;&lt;p&gt;问:每次开机在任务管理器里面都有一个IEXPLORE.EXE的进程，管理器里面结束不掉，但是我并没有启动浏览器，内存占用6M多，msconfig也看不到这个启动项，服务里面有个灰鸽子客户端工具，我已经把它禁用了，我用瑞星杀也提示删除成功，病毒名字是Backdoor.Gpigeon.uql 　但是下次开机还有，每次开机都会有这个进程，什么方法可以删???&lt;/p&gt;&lt;p&gt;解决方法:&lt;/p&gt;&lt;p&gt;修复&lt;br /&gt;R3 - URLSearchHook: (no name) - {982CB676-38F0-4D9A-BB72-D9371ABE876E} - (no file)&lt;br /&gt;R3 - URLSearchHook: (no name) - {BAB1AC41-6FF7-4F2E-A04E-5C592CCFEA7D} - (no file)&lt;br /&gt;O6 - HKCU\Software\Policies\Microsoft\Internet Explorer\Restrictions present&lt;br /&gt;O6 - HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel present&lt;br /&gt;O23 - NT 服务: Remote Packet Capture Protocol v.0 (experimental) (rpcapd) - Unknown owner - %ProgramFiles%\WinPcap\rpcapd.exe&quot; -d -f &quot;%ProgramFiles%\WinPcap\rpcapd.ini (file missing)&lt;/p&gt;&lt;p&gt;O23 - NT 服务: GrayPigeon - Unknown owner - C:\WINNT\Hacker.com.cn.exe&lt;br /&gt;鸽子..安全模式...打开注册表编辑器，展开：HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services&lt;br /&gt;搜索GrayPigeon 删除...&lt;br /&gt;删除&lt;br /&gt;C:\WINNT\Hacker.com.cn.exe&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/13627.html</comments>
  <category>灰鸽子 病毒</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/13364.html</guid>
  <pubDate>Wed, 02 Aug 2006 03:43:59 GMT</pubDate>
  <title>Windows XP下安装SQL2000企业版</title>
  <link>http://minggo.livejournal.com/13364.html</link>
  <description>&lt;p&gt;方法如下：&lt;/p&gt;&lt;p&gt;一．在SQL服务器的安装盘中找到MSDE这个目录，并且点击setup.exe安装它，过程简单直接下一步就ＯＫ了。&lt;/p&gt;&lt;p&gt;二. 重启系统WINDOWSXP,这下就可以看到SQL服务的图标出现了。&lt;/p&gt;&lt;p&gt;三. 再拿出SQL服务器版的安装光盘，直接安装客户端工具（这个不要多说吧？最简单的方法就是直接点击光盘根目录下的autorun.exe)安装时不要选择MDSN的帮助文件&lt;/p&gt;&lt;p&gt;根据提示安装，自检过程中知道系统不是SERVER版，会提示只安装客户端工具。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;四. 打开企业管理器，试用SA用户连一下看看，是不是发现SA用户登陆失败？因为你还没有与信任SQL SERVER连接相关联。还好这个只要对系统注册表稍加修改就可以啦：&lt;/p&gt;&lt;p&gt;在运行中输入regedit打开注册表编辑器，找到[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER]，这个项里面&lt;/p&gt;&lt;p&gt;有一个键值LoginMode，默认下，值是1，现在将值改为2，重启电脑。&lt;/p&gt;&lt;p&gt;五. 再打开企业管理，再连接试试，是不是OK了！ &lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/13364.html</comments>
  <category>tips</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/12776.html</guid>
  <pubDate>Wed, 28 Jun 2006 13:05:07 GMT</pubDate>
  <title>tomcat中文URL问题</title>
  <link>http://minggo.livejournal.com/12776.html</link>
  <description>在conf/server.xml &lt;br /&gt;&lt;div class=&apos;ljparseerror&apos;&gt;[&lt;b&gt;Error:&lt;/b&gt; Irreparable invalid markup (&apos;&amp;lt;connector [...] ....&amp;gt;&apos;) in entry.  Owner must fix manually.  Raw contents below.]&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width: 95%; overflow: auto&quot;&gt;在conf/server.xml &lt;br /&gt;&amp;lt;Connector prot=&amp;quot;8080&amp;quot; &lt;br /&gt;.... &lt;br /&gt;加入 &lt;br /&gt;URIEncoding=&amp;quot;UTF-8&amp;quot; useBodyEncodingForURI=&amp;quot;true&amp;quot;/&amp;gt; &lt;br /&gt;就可以使用中文url了&lt;/div&gt;&lt;/div&gt;</description>
  <comments>http://minggo.livejournal.com/12776.html</comments>
  <category>tomcat 中文</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/12064.html</guid>
  <pubDate>Mon, 22 May 2006 08:10:32 GMT</pubDate>
  <title>反盗版方法</title>
  <link>http://minggo.livejournal.com/12064.html</link>
  <description>......&lt;br /&gt;简单的版权实现可以这样&lt;br /&gt;1，实现一个LicenseService&lt;br /&gt;2，其他重要的模块都Call这个Service来判断是否盗版&lt;br /&gt;&lt;br /&gt;软件注册的时候，在本地的文件（&amp;gt;1）中嵌入一些版权信息（或者水印），嵌入算法需要Call公钥加密/散列算法。&lt;br /&gt;不必太复杂，防君子不防小人。</description>
  <comments>http://minggo.livejournal.com/12064.html</comments>
  <category>反盗版</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/11700.html</guid>
  <pubDate>Tue, 25 Apr 2006 03:52:58 GMT</pubDate>
  <title>web页打印</title>
  <link>http://minggo.livejournal.com/11700.html</link>
  <description>&lt;p&gt;导出excel打印 &lt;br /&gt;private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Clear(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Buffer= true; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.AppendHeader(&quot;Content-Disposition&quot;,&quot;attachment;filename=Borrow.xls&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.ContentEncoding=System.Text.Encoding.GetEncoding(&quot;gb2312&quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; Response.ContentType = &quot;application/ms-excel&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.EnableViewState = false; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo(&quot;ZH-CN&quot;,true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); &lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; Table3.RenderControl(oHtmlTextWriter);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; Response.Charset=&quot;gb2312&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(oStringWriter.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.End();&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;红色为导出文件名和要导出页面中的table&lt;br /&gt;首先在网页中添加： &lt;/p&gt;&lt;p&gt;&amp;lt;OBJECT id=&quot;WebBrowser&quot; height=&quot;0&quot; width=&quot;0&quot; classid=&quot;CLSID:8856F961-340A-11D0-A96B-00C04FD705A2&quot; &lt;br /&gt;VIEWASTEXT&amp;gt; &lt;br /&gt;&amp;lt;/OBJECT&amp;gt; &lt;/p&gt;&lt;p&gt;然后就可以依次加入功能按钮了： &lt;/p&gt;&lt;p&gt;&amp;lt;input onclick=&quot;document.all.WebBrowser.ExecWB(6,1)&quot; type=&quot;button&quot; value=&quot;打印&quot;&amp;gt; &amp;lt;input onclick=&quot;document.all.WebBrowser.ExecWB(6,6)&quot; type=&quot;button&quot; value=&quot;直接打印&quot;&amp;gt; &lt;br /&gt;&amp;lt;input onclick=&quot;document.all.WebBrowser.ExecWB(8,1)&quot; type=&quot;button&quot; value=&quot;页面设置&quot;&amp;gt; &lt;br /&gt;&amp;lt;input onclick=&quot;document.all.WebBrowser.ExecWB(7,1)&quot; type=&quot;button&quot; value=&quot;打印预览&quot;&amp;gt;&amp;amp;nbsp;&amp;lt;INPUT type=&quot;button&quot; value=&quot;关闭窗口&quot; onclick=&quot;javascript:window.close()&quot;&amp;gt; &lt;/p&gt;&lt;p&gt;将这两块东西放到&amp;lt;center class=noprint&amp;gt;&amp;lt;/center&amp;gt;就不会打印这些按钮了。当然要定义noprint了： &lt;/p&gt;&lt;p&gt;&amp;lt;style media=&quot;print&quot;&amp;gt;.Noprint {}{ DISPLAY: none }&amp;lt;/style&amp;gt;只要把不想打印的东西的css设置成noprint就可以了。 &lt;/p&gt;&lt;p&gt;现在就实现了基本的web打印，需要注意的情况如下： &lt;/p&gt;&lt;p&gt;必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行设置成提示或者启用，否则会报错，导致不可用。 &lt;br /&gt;如果在vs.net编辑环境下编辑该页面，它经常自动的给object添加多余的参数，有了这些东西，打印就会出错，所以要记得最后保存的时候删除它们。 &lt;br /&gt;为了简便并且达到最好的效果，我们可以在一个页面实现编辑和打印，这时候会需要很多的textbox，我们把它的css设置成.edittext &lt;br /&gt;{ &lt;br /&gt;overflow-y:visible; &lt;br /&gt;width: 100%; &lt;br /&gt;border-top: none; &lt;br /&gt;border-right: none; &lt;br /&gt;border-bottom: none; &lt;br /&gt;border-left: none; &lt;br /&gt;}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。 &lt;/p&gt;&lt;p&gt;还有一些小经验就是在设置标格宽度的时候，对于A4纸张，横打用920，竖打用640，效果最好。 &lt;br /&gt;1、控制&quot;纵打&quot;、 横打”和“页面的边距。 &lt;br /&gt;（1）&amp;lt;script defer&amp;gt; &lt;br /&gt;function SetPrintSettings() { &lt;br /&gt;　// -- advanced features &lt;br /&gt;　factory.printing.SetMarginMeasure(2) // measure margins in inches &lt;br /&gt;　factory.SetPageRange(false, 1, 3) // need pages from 1 to 3 &lt;br /&gt;　factory.printing.printer = &quot;HP DeskJet 870C&quot; &lt;br /&gt;　factory.printing.copies = 2 &lt;br /&gt;　factory.printing.collate = true &lt;br /&gt;　factory.printing.paperSize = &quot;A4&quot; &lt;br /&gt;　factory.printing.paperSource = &quot;Manual feed&quot;&amp;nbsp; &lt;/p&gt;&lt;p&gt;　// -- basic features &lt;br /&gt;　factory.printing.header = &quot;This is MeadCo&quot; &lt;br /&gt;　factory.printing.footer = &quot;Advanced Printing by scriptX&quot; &lt;br /&gt;　factory.printing.portrait = false &lt;br /&gt;　factory.printing.leftMargin = 1.0 &lt;br /&gt;　factory.printing.topMargin = 1.0 &lt;br /&gt;　factory.printing.rightMargin = 1.0 &lt;br /&gt;　factory.printing.bottomMargin = 1.0 &lt;br /&gt;} &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;/p&gt;&lt;p&gt;（2） &lt;br /&gt;&amp;lt;script language=&quot;javascript&quot;&amp;gt; &lt;br /&gt;　　function printsetup(){ &lt;br /&gt;　　// 打印页面设置 &lt;br /&gt;　　wb.execwb(8,1); &lt;br /&gt;　　} &lt;br /&gt;　　function printpreview(){ &lt;br /&gt;　　// 打印页面预览 &lt;br /&gt;　　　　 &lt;br /&gt;　　wb.execwb(7,1); &lt;br /&gt;　　　　　 &lt;br /&gt;　　　　 &lt;br /&gt;　　} &lt;/p&gt;&lt;p&gt;　　function printit() &lt;br /&gt;　　{ &lt;br /&gt;　　if (confirm(&apos;&apos;确定打印吗？&apos;&apos;)) { &lt;br /&gt;　　wb.execwb(6,6) &lt;br /&gt;　　} &lt;br /&gt;　　} &lt;br /&gt;　　&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;lt;OBJECT classid=&quot;CLSID:8856F961-340A-11D0-A96B-00C04FD705A2&quot; &lt;/p&gt;&lt;p&gt;height=0 id=wb name=wb width=0&amp;gt;&amp;lt;/OBJECT&amp;gt; &lt;br /&gt;&amp;lt;input type=button name=button_print value=&quot;打印&quot; &lt;/p&gt;&lt;p&gt;onclick=&quot;javascript:printit()&quot;&amp;gt; &lt;br /&gt;&amp;lt;input type=button　name=button_setup value=&quot;打印页面设置&quot; &lt;/p&gt;&lt;p&gt;onclick=&quot;javascript:printsetup();&quot;&amp;gt; &lt;br /&gt;&amp;lt;input type=button　name=button_show value=&quot;打印预览&quot; &lt;/p&gt;&lt;p&gt;onclick=&quot;javascript:printpreview();&quot;&amp;gt; &lt;br /&gt;&amp;lt;input type=button name=button_fh value=&quot;关闭&quot; &lt;/p&gt;&lt;p&gt;onclick=&quot;javascript:window.close();&quot;&amp;gt; &lt;/p&gt;&lt;p&gt;------------------------------------------------ &lt;br /&gt;关于这个组件还有其他的用法，列举如下： &lt;br /&gt;WebBrowser.ExecWB(1,1) 打开 &lt;br /&gt;Web.ExecWB(2,1) 关闭现在所有的IE窗口，并打开一个新窗口 &lt;br /&gt;Web.ExecWB(4,1) 保存网页 &lt;br /&gt;Web.ExecWB(6,1) 打印 &lt;br /&gt;Web.ExecWB(7,1) 打印预览 &lt;br /&gt;Web.ExecWB(8,1) 打印页面设置 &lt;br /&gt;Web.ExecWB(10,1) 查看页面属性 &lt;br /&gt;Web.ExecWB(15,1) 好像是撤销，有待确认 &lt;br /&gt;Web.ExecWB(17,1) 全选 &lt;br /&gt;Web.ExecWB(22,1) 刷新 &lt;br /&gt;Web.ExecWB(45,1) 关闭窗体无提示 &lt;/p&gt;&lt;p&gt;2、分页打印 &lt;br /&gt;&amp;lt;HTML&amp;gt; &lt;br /&gt;&amp;lt;HEAD&amp;gt; &lt;br /&gt;&amp;lt;STYLE&amp;gt;　　 &lt;br /&gt;　　P {}{page-break-after: always} &lt;br /&gt;&amp;lt;/STYLE&amp;gt; &lt;br /&gt;&amp;lt;/HEAD&amp;gt; &lt;br /&gt;&amp;lt;BODY&amp;gt; &lt;br /&gt;&amp;lt;%while not rs.eof%&amp;gt; &lt;br /&gt;&amp;lt;P&amp;gt;&amp;lt;%=rs(0)%&amp;gt;&amp;lt;/P&amp;gt; &lt;br /&gt;&amp;lt;%rs.movenext%&amp;gt; &lt;br /&gt;&amp;lt;%wend%&amp;gt; &lt;br /&gt;&amp;lt;/BODY&amp;gt; &lt;br /&gt;&amp;lt;/HTML&amp;gt; &lt;/p&gt;&lt;p&gt;3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号 &lt;br /&gt;（1）ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉，打印就不出来了。 &lt;br /&gt;（2）&amp;lt;HTML&amp;gt; &lt;br /&gt;&amp;lt;HEAD&amp;gt; &lt;br /&gt;&amp;lt;TITLE&amp;gt; New Document &amp;lt;/TITLE&amp;gt; &lt;br /&gt;&amp;lt;META NAME=&quot;Generator&quot; CONTENT=&quot;EditPlus&quot;&amp;gt; &lt;br /&gt;&amp;lt;META NAME=&quot;Author&quot; CONTENT=&quot;YC&quot;&amp;gt; &lt;br /&gt;&amp;lt;script language=&quot;VBscript&quot;&amp;gt; &lt;br /&gt;dim hkey_root,hkey_path,hkey_key &lt;br /&gt;hkey_root=&quot;HKEY_CURRENT_USER&quot; &lt;br /&gt;hkey_path=&quot;\Software\Microsoft\Internet Explorer\PageSetup&quot; &lt;br /&gt;&apos;&apos;//设置网页打印的页眉页脚为空 &lt;br /&gt;function pagesetup_null() &lt;br /&gt;　　on error resume next &lt;br /&gt;　　Set RegWsh = CreateObject(&quot;Wscript.Shell&quot;) &lt;br /&gt;　　hkey_key=&quot;\header&quot;　　 &lt;br /&gt;　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,&quot;&quot; &lt;br /&gt;　　hkey_key=&quot;\footer&quot; &lt;br /&gt;　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,&quot;&quot; &lt;br /&gt;end function &lt;br /&gt;&apos;&apos;//设置网页打印的页眉页脚为默认值 &lt;br /&gt;function pagesetup_default() &lt;br /&gt;　　on error resume next &lt;br /&gt;　　Set RegWsh = CreateObject(&quot;Wscript.Shell&quot;) &lt;br /&gt;　　hkey_key=&quot;\header&quot;　　 &lt;br /&gt;　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,&quot;&amp;amp;w&amp;amp;b页码，&amp;amp;p/&amp;amp;P&quot; &lt;br /&gt;　　hkey_key=&quot;\footer&quot; &lt;br /&gt;　　RegWsh.RegWrite hkey_root+hkey_path+hkey_key,&quot;&amp;amp;u&amp;amp;b&amp;amp;d&quot; &lt;br /&gt;end function &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/HEAD&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;lt;BODY&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt; &lt;br /&gt;&amp;lt;br/&amp;gt;&amp;lt;p align=center&amp;gt; &lt;br /&gt;&amp;lt;input type=&quot;button&quot; value=&quot;清空页码&quot; onclick=pagesetup_null()&amp;gt; &amp;lt;input type=&quot;button&quot; value=&quot;恢复页吗&quot; onclick=pagesetup_default()&amp;gt;&amp;lt;br/&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;lt;/p&amp;gt; &lt;br /&gt;&amp;lt;/BODY&amp;gt; &lt;br /&gt;&amp;lt;/HTML&amp;gt; &lt;br /&gt;4、浮动帧打印 &lt;br /&gt;&amp;lt;script LANGUAGE=javascript&amp;gt; &lt;br /&gt;function button1_onclick() { &lt;br /&gt;　　var odoc=window.iframe1.document; &lt;br /&gt;　　var r=odoc.body.createTextRange(); &lt;br /&gt;　　var stxt=r.htmlText; &lt;br /&gt;　　alert(stxt) &lt;br /&gt;　　var pwin=window.open(&quot;&quot;,&quot;print&quot;); &lt;br /&gt;　　pwin.document.write(stxt); &lt;br /&gt;　　pwin.print(); &lt;br /&gt;} &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;4、用FileSystem组件实现WEB应用中的本地特定打印 &lt;br /&gt;&amp;lt;script Language=VBscript&amp;gt; &lt;br /&gt;function print_onclick //打印函数 &lt;br /&gt;dim label &lt;br /&gt;label=document.printinfo.label.value //获得HTML页面的数据 &lt;br /&gt;set objfs=CreateObject(&quot;scripting.FileSystemObject&quot;) //创建FileSystem组件对象的实例 &lt;br /&gt;set objprinter=objfs.CreateTextFile (&quot;LPT1:&quot;,true) //建立与打印机的连接 &lt;br /&gt;objprinter.Writeline(&quot;__________________________________&quot;) //输出打印的内容 &lt;br /&gt;objprinter.Writeline(&quot;| |&quot;) &lt;br /&gt;objprinter.Writeline(&quot;| 您打印的数据是：&quot;&amp;amp;label&amp;amp; &quot; |”) &lt;br /&gt;objprinter.Writeline(&quot;| |&quot;) &lt;br /&gt;objprinter.Writeline(&quot;|_________________________________|&quot;) &lt;br /&gt;objprinter.close //断开与打印机的连接 &lt;br /&gt;set objprinter=nothing &lt;br /&gt;set objfs=nothing // 关闭FileSystem组件对象 &lt;br /&gt;end function &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;服务器端脚本： &lt;br /&gt;&amp;lt;%……… &lt;br /&gt;set conn=server.CreateObject (&quot;adodb.connection&quot;) &lt;br /&gt;conn.Open &quot;DSN=name;UID=XXXX;PWD=XXXX;&quot; &lt;br /&gt;set rs=server.CreateObject(&quot;adodb.recordset&quot;) &lt;br /&gt;rs.Open(“select ……”),conn,1,1 &lt;br /&gt;……….%&amp;gt; //与数据库进行交互 &lt;br /&gt;HTML页面编码： &lt;br /&gt;&amp;lt;HTML&amp;gt; &lt;br /&gt;……… &lt;br /&gt;&amp;lt;FORM ID=printinfo NAME=&quot;printinfo&quot; &amp;gt; &lt;br /&gt;&amp;lt;INPUT type=&quot;button&quot; value=&quot;打印&amp;gt;&amp;gt;&quot; id=print name=print &amp;gt; //调用打印函数 &lt;br /&gt;&amp;lt;INPUT type=hidden id=text1 name=label value=&amp;lt;%=………%&amp;gt;&amp;gt; //保存服务器端传来的数据 &lt;br /&gt;……… &lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//打印分页&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;lt;p&amp;nbsp; style=&quot;page-break-after:always&quot;&amp;gt;page1&amp;lt;/p&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;p&amp;nbsp; style=&quot;page-break-after:always&quot;&amp;gt;page2&amp;lt;/p&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//设置打印&lt;br /&gt;&amp;nbsp;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;object id=&quot;factory&quot; style=&quot;display:none&quot; viewastext &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; classid=&quot;clsid:1663ed61-23eb-11d2-b92f-008048fdd814&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; codebase=&quot;&lt;a href=&quot;&quot;&gt;http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360&lt;/a&gt;&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;gt;&amp;lt;/object&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=button value=页面设置 onclick=&quot;factory.printing.PageSetup()&quot;&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=button value=打印预览 onclick=&quot;factory.printing.Preview()&quot;&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;script language=javascript&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;function window.onload() &amp;lt;br /&amp;gt;&lt;br /&gt;{ &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; // -- advanced features &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.SetMarginMeasure(2) // measure margins in inches &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.SetPageRange(false, 1, 3) // need pages from 1 to 3 &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.printer = &quot;HP DeskJet 870C&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.copies = 2 &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.collate = true &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.paperSize = &quot;A4&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.paperSource = &quot;Manual feed&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; // -- basic features &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.header = &quot;居左显示&amp;amp;b居中显示&amp;amp;b居右显示页码，第&amp;amp;p页/共&amp;amp;P页&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.footer = &quot;（自定义页脚）&quot; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.portrait = false &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.leftMargin = 0.75 &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.topMargin = 1.5 &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.rightMargin = 0.75 &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; factory.printing.bottomMargin = 1.5 &amp;lt;br /&amp;gt;&lt;br /&gt;} &amp;lt;br /&amp;gt;&lt;br /&gt;function Print(frame) { &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; factory.printing.Print(true, frame) // print with prompt &amp;lt;br /&amp;gt;&lt;br /&gt;} &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=button value=&quot;打印本页&quot; onclick=&quot;factory.printing.Print(false)&quot;&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=button value=&quot;页面设置&quot; onclick=&quot;factory.printing.PageSetup()&quot;&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=button value=&quot;打印预览&quot; onclick=&quot;factory.printing.Preview()&quot;&amp;gt;&amp;lt;br&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;a href=&quot;&lt;a href=&quot;&quot;&gt;http://www.meadroid.com/scriptx/docs/printdoc.htm?static&lt;/a&gt;&quot;&amp;nbsp; target=_blank&amp;gt;具体使用手册，更多信息，点这里&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;[Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行] &lt;br /&gt;//自带的打印预览 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;WebBrowser.ExecWB(1,1) 打开&amp;nbsp; &lt;br /&gt;Web.ExecWB(2,1) 关闭现在所有的IE窗口，并打开一个新窗口&amp;nbsp; &lt;br /&gt;Web.ExecWB(4,1) 保存网页&amp;nbsp; &lt;br /&gt;Web.ExecWB(6,1) 打印&amp;nbsp; &lt;br /&gt;Web.ExecWB(7,1) 打印预览&amp;nbsp; &lt;br /&gt;Web.ExecWB(8,1) 打印页面设置&amp;nbsp; &lt;br /&gt;Web.ExecWB(10,1) 查看页面属性&amp;nbsp; &lt;br /&gt;Web.ExecWB(15,1) 好像是撤销，有待确认&amp;nbsp; &lt;br /&gt;Web.ExecWB(17,1) 全选&amp;nbsp; &lt;br /&gt;Web.ExecWB(22,1) 刷新&amp;nbsp; &lt;br /&gt;Web.ExecWB(45,1) 关闭窗体无提示&amp;nbsp; &lt;br /&gt;&amp;lt;style media=print&amp;gt;&amp;nbsp; &lt;br /&gt;.Noprint{}{display:none;}&amp;lt;!--用本样式在打印时隐藏非打印项目--&amp;gt;&amp;nbsp; &lt;br /&gt;.PageNext{}{page-break-after: always;}&amp;lt;!--控制分页--&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;/style&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;object&amp;nbsp; id=&quot;WebBrowser&quot;&amp;nbsp; width=0&amp;nbsp; height=0&amp;nbsp; classid=&quot;CLSID:8856F961-340A-11D0-A96B-00C04FD705A2&quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;/object&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;lt;center class=&quot;Noprint&quot; &amp;gt; &lt;br /&gt;&amp;lt;input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;/p&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;p&amp;gt; &amp;lt;input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;/center&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//去掉打印时的页眉页脚 &lt;br /&gt;&amp;nbsp;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;script&amp;nbsp; language=&quot;JavaScript&quot;&amp;gt;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;var HKEY_Root,HKEY_Path,HKEY_Key; &amp;lt;br /&amp;gt;&lt;br /&gt;HKEY_Root=&quot;HKEY_CURRENT_USER&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;HKEY_Path=&quot;&lt;a href=&quot;&quot;&gt;\\Software\\Microsoft\\Internet&lt;/a&gt; Explorer\\PageSetup\\&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;//设置网页打印的页眉页脚为空 &amp;lt;br /&amp;gt;&lt;br /&gt;function PageSetup_Null() &amp;lt;br /&amp;gt;&lt;br /&gt;{ &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;try &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;{ &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var Wsh=new ActiveXObject(&quot;WScript.Shell&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; HKEY_Key=&quot;header&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,&quot;&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; HKEY_Key=&quot;footer&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,&quot;&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;} &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;catch(e){} &amp;lt;br /&amp;gt;&lt;br /&gt;} &amp;lt;br /&amp;gt;&lt;br /&gt;//设置网页打印的页眉页脚为默认值 &amp;lt;br /&amp;gt;&lt;br /&gt;function&amp;nbsp; PageSetup_Default() &amp;lt;br /&amp;gt;&lt;br /&gt;{&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;try &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;{ &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; var Wsh=new ActiveXObject(&quot;WScript.Shell&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; HKEY_Key=&quot;header&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,&quot;&amp;amp;w&amp;amp;b页码,&amp;amp;p/&amp;amp;P&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; HKEY_Key=&quot;footer&quot;; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp; Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,&quot;&amp;amp;u&amp;amp;b&amp;amp;d&quot;); &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;} &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;catch(e){} &amp;lt;br /&amp;gt;&lt;br /&gt;} &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;button&quot; value=&quot;清空页码&quot; onclick=PageSetup_Null()&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type=&quot;button&quot; value=&quot;恢复页码&quot; onclick=PageSetup_Default()&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;[Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行] &lt;br /&gt;//无模式的提示框 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;function modelessAlert(Msg) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; window.showModelessDialog(&quot;javascript:alert(\&quot;&quot;+escape(Msg)+&quot;\&quot;);window.close();&quot;,&quot;&quot;,&quot;status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;&quot;); &lt;br /&gt;} &lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/11700.html</comments>
  <category>web页 打印</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/11499.html</guid>
  <pubDate>Tue, 25 Apr 2006 03:40:50 GMT</pubDate>
  <title>包括目前常用的web程序开发的代码,原理其实就是设置文件头(Header)信息而已</title>
  <link>http://minggo.livejournal.com/11499.html</link>
  <description>&lt;p&gt;包括目前常用的web程序开发的代码,原理其实就是设置文件头(Header)信息而已&lt;br /&gt;&amp;lt;!--- cf页面代码,只要把下面代码放到页面里就可以了---&amp;gt;&lt;br /&gt;&amp;lt;cfheader name=&quot;Content-Type&quot; value=&quot;application/unknown&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfheader name=&quot;content-disposition&quot; value=&quot;attachment; filename=aaa.xls&quot;&amp;gt; &lt;br /&gt;jsp页面代码是我从cf代码得到启发的!&lt;br /&gt;&amp;lt;%&lt;br /&gt;//jsp页面代码,只要把下面代码放到页面里就可以了; &lt;br /&gt;response.setContentType(&quot;application/unknown;charset=gbk&quot;);&lt;br /&gt;response.addHeader(&quot;content-disposition&quot;,&quot;attachment;filename=aaa.xls&quot;);&lt;br /&gt;%&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&apos;asp 或 asp.net 页面代码,只要把下面代码放到页面里就可以了;&lt;br /&gt;response.ContentType = &quot;application/msexcel&quot; &lt;br /&gt;response.AddHeader &quot;content-disposition&quot;,&quot;attachment; filename=aaa.xls&quot; &lt;br /&gt;%&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;//php页面代码,只要把下面代码放到页面里就可以了;&lt;br /&gt;header(&quot;Content-type: application/msexcel&quot;); &lt;br /&gt;header(&quot;Content-Disposition: attachment; filename=aaa.xls&quot;); &lt;br /&gt;?&amp;gt; &lt;br /&gt;说明一下:&lt;br /&gt;filename=aaa.xls这个是默认下载的文件名；&lt;br /&gt;application/unknown这个是指定当前页面生成的文件类型，这可以对应着windows里的MIME类型名称；&lt;br /&gt;如是指定是word文档，你可以设置“application/msword”，指定是excel文档，你可设置“application/msexcel”。 &lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/11499.html</comments>
  <category>jsp 内容类型处理</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/10560.html</guid>
  <pubDate>Fri, 07 Apr 2006 13:43:43 GMT</pubDate>
  <title>-小东西- 线程 搞不清白的时候参考一下咯</title>
  <link>http://minggo.livejournal.com/10560.html</link>
  <description>&lt;pre style=&quot;font-family:courier new&quot;&gt;
/**
 * @author root
 *
 */
public class ThreadMain {
	private String name = &quot;Zhongwm&quot;;

	public void doSomeThing() {
		try {
                                    /*synchronized (name) {*/
			MyThread mt = (MyThread) Thread.currentThread();
			if (mt.getC() == 1) {
				mt.sleep(100L);
				System.out.println(&quot;Hello &quot; + name);
				name = &quot;Cheny&quot;;
			} else {
				mt.sleep(3000L);
				System.out.println(&quot;Hello &quot; + name);
			}
                                    /*}*/
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ThreadMain main = new ThreadMain();
		MyThread mt1 = new MyThread(main, 1);
		MyThread mt2 = new MyThread(main, 2);
		mt2.start();
		mt1.start();
	}

}
class MyThread extends Thread {
	private int c=0;
	private ThreadMain main=null;
	public MyThread() {
		
	}
	
	public MyThread(ThreadMain main,int c) {
		this.main=main;
		this.c=c;
	}
	
	public int getC() {
		return c;
	}

	public void run() {
		main.doSomeThing();
	}
	
	

}
&lt;/pre&gt;</description>
  <comments>http://minggo.livejournal.com/10560.html</comments>
  <category>java thread</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/10323.html</guid>
  <pubDate>Thu, 06 Apr 2006 01:38:54 GMT</pubDate>
  <title>(转)通过ClassLoader管理组件依赖</title>
  <link>http://minggo.livejournal.com/10323.html</link>
  <description>&lt;div&gt;Java的类加载机制是非常强大的。你可以利用外部第三方的组件而不需要头文件或静态连接。你只需要简单的把组件的JAR文件放到classpath下的目录中。运行时引用完全是动态处理的。但如果这些第三方组件有自己的依赖关系时会怎么样呢？通常这需要开发人员自己解决所有需要的相应版本的组件集，并且确认他们被加到classpath中。&lt;br /&gt;　　&lt;br /&gt;　　&lt;b&gt;JAR清单文件&lt;/b&gt;&lt;br /&gt;　　&lt;br /&gt;　　实际上你不需要这样做，Java的类加载机制可以更优雅地解决这个问题。一种方案是需要每一个组件的作者在JAR清单中定义内部组件的依赖关系。这里清单是指一个被包含在JAR中的定义文件元数据的文本文件（META-INF/MANIFEST.MF）。最常用的属性是Main-Class，定义了通过java –jar方式定位哪个类会被调用。然而，还有一个不那么有名的属性Class-Path可以用来定义他所依赖的其他JAR。Java缺省的ClassLoader会检查这些属性并且自动附加这些特定的依赖到classpath中。&lt;br /&gt;　　&lt;br /&gt;　　让我们来看一个例子。考虑一个实现交通模拟的Java应用，他由三个JAR组成：&lt;br /&gt;　　&lt;br /&gt;　　·simulator-ui.jar：基于Swing的视图来显示模拟的过程。&lt;br /&gt;　　·simulator.jar:用来表示模拟状态的数据对象和实现模拟的控制类。&lt;br /&gt;　　·rule-engine.jar:常用的第三方规则引擎被用来建立模拟规则的模型。&lt;br /&gt;　　simulator-ui.jar依赖simulator.jar，而simulator.jar依赖rule-engine.jar。&lt;br /&gt;　　&lt;br /&gt;　　而通常执行这个应用的方法如下：&lt;br /&gt;　　$ java -classpath&lt;br /&gt;　　simulator-ui.jar:simulator.jar:rule-engine.jar&lt;br /&gt;　　com.oreilly.simulator.ui.Main&lt;br /&gt;　　&lt;br /&gt;　　编者注：上面的命令行应该在同一行键入；只是由于网页布局的限制看起来好像是多行。&lt;br /&gt;　　&lt;br /&gt;　　但我们也可以在JAR的清单文件中定义这些信息，simulator-ui的MANIFEST.MF如下：&lt;br /&gt;　　&lt;br /&gt;　　Main-Class: com.oreilly.simulator.ui.Main&lt;br /&gt;　　Class-Path: simulator.jar&lt;br /&gt;　　&lt;br /&gt;　　而simulator的MANIFEST.MF包含：&lt;br /&gt;　　Class-Path: rule-engine.jar&lt;br /&gt;　　&lt;br /&gt;　　rule-engine.jar或者没有清单文件，或者清单文件为空。&lt;br /&gt;　　&lt;br /&gt;　　现在我们可以这样做：&lt;br /&gt;　　$ java -jar simulator-ui.jar&lt;br /&gt;　　&lt;br /&gt;　　Java会自动解析清单的入口来取得主类及修改classpath，甚至可以确定simulator-ui.jar的路径和解释所有与这个路径相关的Class-Path属性，所以我们可以简单按照下面的方式之一来做：&lt;br /&gt;　　$ java -jar ../simulator-ui.jar&lt;br /&gt;　　$ java -jar /home/don/build/simulator-ui.jar&lt;br /&gt;　　&lt;br /&gt;　　&lt;b&gt;依赖冲突&lt;/b&gt;&lt;br /&gt;　　&lt;br /&gt;　　Java的Class-Path属性的实现相对于手工定义整个classpath是一个大的改善。然而，两种方式都有自己的限制。一个重要的限制就是你只能加载组件的一个特定版本。这看起来是很显然的因为许多编程环境都有这个限制。但是在大的包含多个第三方依赖的多JAR项目中依赖冲突是很常见的。&lt;br /&gt;　　&lt;br /&gt;　　例如，你正在开发一个通过查询多个搜索引擎并比较他们的结果的搜索引擎。Google和Amazon的Alexa都支持使用SOAP作为通讯机制的网络服务API，也都提供了相应的Java类库方便访问这些API。让我们假设你的JAR- metasearch.jar，依赖于google.jar和amazon.jar，而他们都依赖于公共的soap.jar。&lt;br /&gt;　　&lt;br /&gt;　　现在是没有问题，但如果将来SOAP协议或API发生改变时会怎么样呢？很可能这两个搜索引擎不会选择同时升级。可能在某一天你访问Amazon时需要SOAP1.x版本而访问Google时需要SOAP2.x版本，而这两个版本的SOAP并不能在同一个进程空间中共存。在这里，我们可能包含下面的JAR依赖：&lt;br /&gt;　　&lt;br /&gt;　　$ cat metasearch/META-INF/MANIFEST.MF&lt;br /&gt;　　Main-Class: com.onjava.metasearch.Main&lt;br /&gt;　　Class-Path: google.jar amazon.jar&lt;br /&gt;　　&lt;br /&gt;　　$ cat amazon/META-INF/MANIFEST.MF&lt;br /&gt;　　Class-Path: soap-v1.jar&lt;br /&gt;　　&lt;br /&gt;　　$ cat google/META-INF/MANIFEST.MF&lt;br /&gt;　　Class-Path: soap-v2.jar&lt;br /&gt;　　&lt;br /&gt;　　上面正确地描述了依赖关系，但这里并没有包含什么魔法--这样设置并不会像我们期望地那样工作。如果soap-v1.jar和soap-v2.jar定义了许多相同的类，我们肯定这是会出问题的。&lt;br /&gt;　　$ java -jar metasearch.jar&lt;br /&gt;　　SOAP v1: remotely invoking searchAmazon&lt;br /&gt;　　SOAP v1: remotely invoking searchGoogle&lt;br /&gt;　　&lt;br /&gt;　　你可以看到，soap-v1.jar被首先加在classpath中，因此实际上也只有他会被使用。上面的例子等价于：&lt;br /&gt;　　$ java -classpath&lt;br /&gt;　　metasearch.jar:amazon.jar:google.jar:soap-v1.jar:soap-v2.jar&lt;br /&gt;　　# WRONG!&lt;br /&gt;　　&lt;br /&gt;　　编者注：上面的命令行应该在同一行键入；只是由于网页布局的限制看起来好像是多行。&lt;br /&gt;　　&lt;br /&gt;　　有趣的是如果Yahoo也发布了一个网络服务API，而他看起来并没有依赖于现有的SOAP/XML-RPC类库。在较小的项目中，组件依赖冲突常被用来作为在你只要手工包装方案或者只需要一两个类时而不使用让你不使用全量组件（如集合类库）的原因之一。手工包装方案有他的用处，但使用已有的组件是更普遍的方式。而且复制其他组件的类到你的代码库永远不是一个好主意。实际上你已经与组件的开发产生分岐而且没有机会在有问题修复或安全升级时合并他。&lt;br /&gt;　　&lt;br /&gt;　　许多大的项目，如主要的商业组件，已经采用将他们使用的整个组件构建到他们的JAR内部。为了这么做，他们改变了包名使其唯一（如com/acme/foobar/org/freeware/utility），而且直接在他们的JAR中包含类。这样做的好处是可以防止在这些组件中多个版本的冲突，但这也是有代价的。这么做对开发人员来说完全隐藏了对第三方的依赖。但如果这种方式大规模的应用，将会导致效率的降低（包括JAR文件的大小和加载多个JAR版本到进程中的效率降低）。这种方式的问题在于如果两个组件依赖于同一个版本的第三方组件时，就没有协调机制来确定共享的组件只被加载一次。这个问题我们会在下一节进行研究。除了效率的降低外，很可能你这种绑定第三方软件的方式会与那些软件的许可协议冲突。&lt;br /&gt;　　&lt;br /&gt;　　另一种解决这个问题的方式是每一个组件的开发人员显式的在他的包名中编码一个版本号。Sun的javac代码就采用这个方式—一个com.sun.tools.javac.Main类会简单地转发给com.sun.tools.javac.v8.Maino。每次一个新的Java版本发布，这个代码的包名就改变一次。这就允许一个组件的多个发布版本可以共存在同一个类加载器中并且这使得版本的选择是显式的。但这也不是一个非常好的解决方案，因为或者客户需要准确知道他们计划使用的版本而且必须改变他们的代码来转换到新的版本，或者他们必须依赖于一个包装类来转发方案调用给最新的版本（在这种情况下，这些包装类就会承受我们上面提到的相同问题）。&lt;br /&gt;　　&lt;br /&gt;　　&lt;b&gt;加载多个发布版本&lt;/b&gt;&lt;br /&gt;　　&lt;br /&gt;　　这里我们遇到的问题在大多数项目中也存在，所有的类都会被加载到一个全局命名空间。如果每一个组件有自己的命名空间而且他会加载所有他依赖的组件到这个命名空间而不影响进程的其他部分，那又会怎么样呢？实际上我们可以在Java中这么做！类名不需要是唯一的，只要类名和其所对应的ClassLoader的组合是唯一的就可以了。这意味着ClassLoader类似于命名空间，而如果我们可以加载每一个组件在自己的ClassLoader中，他就可以控制如何满足依赖。他可以代理类定位给其他的包含他的依赖组件所需要的特定版本的ClassLoader。如图1。&lt;br /&gt;　　 &lt;center&gt;　&lt;img style=&quot;CURSOR: pointer&quot; src=&quot;http://static.flickr.com/44/123996050_00c59f45db.jpg?v=0&quot;&gt;&lt;br /&gt;　　Figure 1. Decentralized class loaders&lt;/center&gt;&lt;br /&gt;　　&lt;br /&gt;　　然而这个架构并不比绑定每一个依赖的JAR在自己的JAR中好多少。我们需要的是一个可以确保每一个组件版本仅被一个类加载器加载的中央集权。图2中的架构可以确定每一个组件版本仅被加载一次。&lt;br /&gt;　　 &lt;center&gt;　&lt;img style=&quot;CURSOR: pointer&quot; src=&quot;http://static.flickr.com/44/123995953_6658787bff.jpg?v=0&quot;&gt;&lt;br /&gt;　　Figure 2. Class loaders with mediator&lt;/center&gt;&lt;br /&gt;　　&lt;br /&gt;　　为了实现这种方式，我们需要创建两个不同类型的类加载器。每一个ComponentClassLoader需要扩展Java的URLClassLoader来提供需要的逻辑来从一个JAR中获取.class文件。当然他也会执行两个其他的任务。在创建的时候，他会获取JAR清单文件并定位一个新属性Restricted-Class-Path。不像Sun提供的Class-Path属性，这个属性暗示特定的JAR应该只对这个组件有效。&lt;br /&gt;　　public class ComponentClassLoader extends URLClassLoader {&lt;br /&gt;　　// ...　public ComponentClassLoader (MasterClassLoader master, File file)&lt;br /&gt;　　{&lt;br /&gt;　　// ...　　JarFile jar = new JarFile(file);&lt;br /&gt;　　Manifest man = jar.getManifest();&lt;br /&gt;　　Attributes attr = man.getMainAttributes();&lt;br /&gt;　　List l = new ArrayList();&lt;br /&gt;　　String str = attr.getValue(&quot;Restricted-Class-Path&quot;);&lt;br /&gt;　　if (str != null) {&lt;br /&gt;　　StringTokenizer tok = new StringTokenizer(str);&lt;br /&gt;　　while (tok.hasMoreTokens()) {&lt;br /&gt;　　l.add(new File(file.getParentFile(),&lt;br /&gt;　　tok.nextToken());&lt;br /&gt;　　}&lt;br /&gt;　　}&lt;br /&gt;　　this.dependencies = l;&lt;br /&gt;　　}　public Class loadClass (String name, boolean resolve)&lt;br /&gt;　　throws ClassNotFoundException　{&lt;br /&gt;　　try {&lt;br /&gt;　　// Try to load the class from our JAR.&lt;br /&gt;　　return loadClassForComponent(name, resolve);&lt;br /&gt;　　} catch (ClassNotFoundException ex) {}&lt;br /&gt;　　// Couldn&apos;t find it -- let the master look for it&lt;br /&gt;　　// in another components.&lt;br /&gt;　　return master.loadClassForComponent(name,&lt;br /&gt;　　resolve, dependencies);&lt;br /&gt;　　}&lt;br /&gt;　　public Class loadClassForComponent (String name,&lt;br /&gt;　　boolean resolve)&lt;br /&gt;　　throws ClassNotFoundException&lt;br /&gt;　　{&lt;br /&gt;　　C&lt;/div&gt;</description>
  <comments>http://minggo.livejournal.com/10323.html</comments>
  <category>classloader</category>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/10006.html</guid>
  <pubDate>Fri, 10 Mar 2006 01:34:46 GMT</pubDate>
  <title>String.prototype.trim in javascript</title>
  <link>http://minggo.livejournal.com/10006.html</link>
  <description>利用Javascript中每个对象(Object)的prototype属性我们可以为Javascript中的内置对象添加我们自己的方法和属性。&lt;br /&gt;　　以下我们就用这个属性来为String对象添加三个方法：Trim,LTrim,RTrim(作用和VbScript中的同名函数一样)&lt;br /&gt;String.prototype.Trim = function()&lt;br /&gt;{&lt;br /&gt;return this.replace(/(^\s*)|(\s*$)/g, &quot;&quot;);&lt;br /&gt;}&lt;br /&gt;String.prototype.LTrim = function()&lt;br /&gt;{&lt;br /&gt;return this.replace(/(^\s*)/g, &quot;&quot;);&lt;br /&gt;}&lt;br /&gt;String.prototype.Rtrim = function()&lt;br /&gt;{&lt;br /&gt;return this.replace(/(\s*$)/g, &quot;&quot;);&lt;br /&gt;}&lt;br /&gt;　　怎么样，简单吧，下面看一个使用的实例：&lt;br /&gt;&amp;lt;script language=javascript&amp;gt;&lt;br /&gt;String.prototype.Trim = function()&lt;br /&gt;{&lt;br /&gt;return this.replace(/(^\s*)|(\s*$)/g, &quot;&quot;);&lt;br /&gt;}&lt;br /&gt;var s = &quot; leading and trailing spaces &quot;;　&lt;br /&gt;window.alert(s + &quot; (&quot; + s.length + &quot;)&quot;);　&lt;br /&gt;s = s.Trim();　&lt;br /&gt;window.alert(s + &quot; (&quot; + s.length + &quot;)&quot;);　&lt;br /&gt;&amp;lt;/script&amp;gt;　</description>
  <comments>http://minggo.livejournal.com/10006.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/9878.html</guid>
  <pubDate>Thu, 09 Mar 2006 11:20:00 GMT</pubDate>
  <title>Escape special characters</title>
  <link>http://minggo.livejournal.com/9878.html</link>
  <description>Arbitrary text placed in an HTML tag often needs to be altered, to ensure that the resulting HTML remains valid. &lt;p&gt;Problem characters can include &lt;ul&gt;&lt;li&gt;&amp;lt; &lt;li&gt;&amp;gt; &lt;li&gt;&quot; &lt;li&gt;&apos; &lt;li&gt;\ &lt;li&gt;&amp;amp; &lt;/li&gt;&lt;/ul&gt;These characters can be replaced with HTML character entities. For example, &lt;tt&gt;&amp;lt;&lt;/tt&gt; can be replaced with &lt;tt&gt;&amp;amp;lt;&lt;/tt&gt;. &lt;p&gt;Query strings (&lt;tt&gt;Blah=1&amp;amp;Name=Bob&lt;/tt&gt;) often need to be escaped as well. If the query string contains special characters, it will need to be &quot;URL encoded&quot;. (See the &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLEncoder.html&quot;&gt;javadoc&lt;/a&gt; for the &lt;tt&gt;URLEncoder&lt;/tt&gt; class for further information.) This will ensure the query string conforms with valid HTTP. &lt;p&gt;There is often a second issue, however, with regard to query strings. If a query string is placed in an &lt;tt&gt;HREF&lt;/tt&gt; attribute, then even a URL encoded query string is often not of valid form. This is because &lt;tt&gt;URLEncoder&lt;/tt&gt; produces valid &lt;i&gt;HTTP&lt;/i&gt;, but it does not in general produce text which is a valid &lt;i&gt;HTML attribute&lt;/i&gt; - the ampersand character needs to be replaced by the corresponding character entity &lt;tt&gt;&amp;amp;amp;&lt;/tt&gt;. &lt;p&gt;Here is an example of a utility class which escapes special characters for HTML tags, URL fragments, and regular expressions. &lt;br /&gt;&lt;pre style=&quot;font-family:courier new&quot;&gt;
package hirondelle.web4j.util;

import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;

/**
* Convenience methods for altering special characters related to URLs,
* regular expressions, and HTML tags.
*/
public final class EscapeChars {

  /**
  * Synonym for &lt;tt&gt;URLEncoder.encode(String, &quot;UTF-8&quot;)&lt;/tt&gt;.
  *
  * &lt;p&gt;Used to ensure that HTTP query strings are in proper form, by escaping
  * special characters such as spaces.
  *
  * &lt;p&gt;An example use case for this method is a login scheme in which, after successful
  * login, the user is redirected to the &quot;original&quot; target destination. Such a target
  * might be passed around as a request parameter. Such a request parameter
  * will have a URL as its value, as in &quot;LoginTarget=Blah.jsp?this=that&amp;blah=boo&quot;, and
  * would need to be URL-encoded in order to escape its special characters.
  *
  * &lt;p&gt;It is important to note that if a query string appears in an &lt;tt&gt;HREF&lt;/tt&gt;
  * attribute, then there are two issues - ensuring the query string is valid HTTP
  * (it is URL-encoded), and ensuring it is valid HTML (ensuring the ampersand is escaped).
  */
  public static String forURL(String aURLFragment){
    String result = null;
    try {
      result = URLEncoder.encode(aURLFragment, &quot;UTF-8&quot;);
    }
    catch (UnsupportedEncodingException ex){
      throw new RuntimeException(&quot;UTF-8 not supported&quot;, ex);
    }
    return result;
  }


  /**
  * Replace characters having special meaning &lt;em&gt;inside&lt;/em&gt; HTML tags
  * with their escaped equivalents, using character entities such as &lt;tt&gt;&apos;&amp;amp;&apos;&lt;/tt&gt;.
  *
  * &lt;p&gt;The escaped characters are :
  * &lt;ul&gt;
  * &lt;li&gt; &amp;lt;
  * &lt;li&gt; &amp;gt;
  * &lt;li&gt; &quot;
  * &lt;li&gt; &apos;
  * &lt;li&gt; \
  * &lt;li&gt; &amp;
  * &lt;/ul&gt;
  *
  * &lt;p&gt;This method ensures that arbitrary text appearing inside a tag does not &quot;confuse&quot;
  * the tag. For example, &lt;tt&gt;HREF=&apos;Blah.do?Page=1&amp;Sort=ASC&apos;&lt;/tt&gt;
  * does not comply with strict HTML because of the ampersand, and should be changed to
  * &lt;tt&gt;HREF=&apos;Blah.do?Page=1&amp;amp;Sort=ASC&apos;&lt;/tt&gt;. This is commonly seen in building
  * query strings. (In JSTL, the c:url tag performs this task automatically.)
  */
  public static String forHTMLTag(String aTagFragment){
    final StringBuffer result = new StringBuffer();

    final StringCharacterIterator iterator = new StringCharacterIterator(aTagFragment);
    char character =  iterator.current();
    while (character != CharacterIterator.DONE ){
      if (character == &apos;&amp;lt;&apos;) {
        result.append(&quot;&amp;lt;&quot;);
      }
      else if (character == &apos;&amp;gt;&apos;) {
        result.append(&quot;&amp;gt;&quot;);
      }
      else if (character == &apos;\&quot;&apos;) {
        result.append(&quot;&amp;quot;&quot;);
      }
      else if (character == &apos;\&apos;&apos;) {
        result.append(&quot;&amp;#039;&quot;);
      }
      else if (character == &apos;\\&apos;) {
         result.append(&quot;&amp;#092;&quot;);
      }
      else if (character == &apos;&amp;&apos;) {
         result.append(&quot;&amp;amp;&quot;);
      }
      else {
        //the char is not a special one
        //add it to the result as is
        result.append(character);
      }
      character = iterator.next();
    }
    return result.toString();
  }

  /**
  * Return &lt;tt&gt;aText&lt;/tt&gt; with all start-of-tag and end-of-tag characters
  * replaced by their escaped equivalents.
  *
  * &lt;p&gt;If user input may contain tags which must be disabled, then call
  * this method, not {@link #forHTMLTag}. This method is used for text appearing
  * &lt;em&gt;outside&lt;/em&gt; of a tag, while {@link #forHTMLTag} is used for text appearing
  * &lt;em&gt;inside&lt;/em&gt; an HTML tag.
  *
  * &lt;p&gt;It is not uncommon to see text on a web page presented erroneously, because
  * &lt;em&gt;all&lt;/em&gt; special characters are escaped (as in {@link #forHTMLTag}). In
  * particular, the ampersand character is often escaped not once but &lt;em&gt;twice&lt;/em&gt; :
  * once when the original input occurs, and then a second time when the same item is
  * retrieved from the database. This occurs because the ampersand is the only escaped
  * character which appears in a character entity.
  */
  public static String toDisableTags(String aText){
    final StringBuffer result = new StringBuffer();
    final StringCharacterIterator iterator = new StringCharacterIterator(aText);
    char character =  iterator.current();
    while (character != CharacterIterator.DONE ){
      if (character == &apos;&amp;lt;&apos;) {
        result.append(&quot;&amp;lt;&quot;);
      }
      else if (character == &apos;&amp;gt;&apos;) {
        result.append(&quot;&amp;gt;&quot;);
      }
      else {
        //the char is not a special one
        //add it to the result as is
        result.append(character);
      }
      character = iterator.next();
    }
    return result.toString();
  }

  /**
  * Replace characters having special meaning in regular expressions
  * with their escaped equivalents.
  *
  * &lt;p&gt;The escaped characters include :
  *&lt;ul&gt;
  *&lt;li&gt;.
  *&lt;li&gt;\
  *&lt;li&gt;?, * , and +
  *&lt;li&gt;&amp;
  *&lt;li&gt;:
  *&lt;li&gt;{ and }
  *&lt;li&gt;[ and ]
  *&lt;li&gt;( and )
  *&lt;li&gt;^ and $
  *&lt;/ul&gt;
  *
  */
  public static String forRegex(String aRegexFragment){
    final StringBuffer result = new StringBuffer();

    final StringCharacterIterator iterator = new StringCharacterIterator(aRegexFragment);
    char character =  iterator.current();
    while (character != CharacterIterator.DONE ){
      /*
      * All literals need to have backslashes doubled.
      */
      if (character == &apos;.&apos;) {
        result.append(&quot;\\.&quot;);
      }
      else if (character == &apos;\\&apos;) {
        result.append(&quot;\\\\&quot;);
      }
      else if (character == &apos;?&apos;) {
        result.append(&quot;\\?&quot;);
      }
      else if (character == &apos;*&apos;) {
        result.append(&quot;\\*&quot;);
      }
      else if (character == &apos;+&apos;) {
        result.append(&quot;\\+&quot;);
      }
      else if (character == &apos;&amp;&apos;) {
        result.append(&quot;\\&amp;&quot;);
      }
      else if (character == &apos;:&apos;) {
        result.append(&quot;\\:&quot;);
      }
      else if (character == &apos;{&apos;) {
        result.append(&quot;\\{&quot;);
      }
      else if (character == &apos;}&apos;) {
        result.append(&quot;\\}&quot;);
      }
      else if (character == &apos;[&apos;) {
        result.append(&quot;\\[&quot;);
      }
      else if (character == &apos;]&apos;) {
        result.append(&quot;\\]&quot;);
      }
      else if (character == &apos;(&apos;) {
        result.append(&quot;\\(&quot;);
      }
      else if (character == &apos;)&apos;) {
        result.append(&quot;\\)&quot;);
      }
      else if (character == &apos;^&apos;) {
        result.append(&quot;\\^&quot;);
      }
      else if (character == &apos;$&apos;) {
        result.append(&quot;\\$&quot;);
      }
      else {
        //the char is not a special one
        //add it to the result as is
        result.append(character);
      }
      character = iterator.next();
    }
    return result.toString();
  }
  
  // PRIVATE //
  
  private EscapeChars(){
    //empty - prevent construction
  }
}
&lt;/pre&gt;</description>
  <comments>http://minggo.livejournal.com/9878.html</comments>
  <category>escape special characters</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/9521.html</guid>
  <pubDate>Thu, 09 Mar 2006 06:03:20 GMT</pubDate>
  <title>（转）WebWork2.2新特性文章集合</title>
  <link>http://minggo.livejournal.com/9521.html</link>
  <description>&lt;div class=&quot;posttitle&quot;&gt;&amp;nbsp;转自：&lt;a title=&quot;飞云小侠之Java视点&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/10/17/15726.aspx&quot; target=&quot;_blank&quot;&gt;飞云小侠之Java视点&lt;/a&gt;&lt;/div&gt;因为webwork2.2的最终版本还没有发布，所以本人写的webwork 2.2新特性系列文章中的很多东西会和实际情况略有不同，本人如果有时间会根据实际情况进行修改，补充等，所以此系列文章的最终发布版本请以本blog或者本人网站的文章为准。 （当然还是要以Webwork为基准才行）&lt;br /&gt;&lt;br /&gt;&lt;font style=&quot;BACKGROUND-COLOR: #ffffff&quot; color=&quot;#ff0000&quot;&gt;很多网站复制或者转贴了本系列文章，他们应该不会动态更新地，所以请注意。&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;为了浏览方便，特整理系列文章链接如下：&lt;br /&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/02/11423.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork 2.2部分新特性介绍&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/08/29/11481.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(一):web.xml,alt syntax语法&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/08/29/11482.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(二):数据校验 validator&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/08/30/11564.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(三)简单页面使用ww:text进行国际化&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/08/31/11652.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(四):使用国际化拦截器&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/02/11826.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(五):default.properties的变化&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/03/11868.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(六):ParameterNameAware接口的用途&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/05/12014.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(七):异常映射/全局异常映射&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/07/12320.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(八)使用FreeMarker的FTL做装饰页面&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/10/12638.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(九) AJAX之总体介绍&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/10/12639.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(九) AJAX之Remote Div Tag&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/13/12886.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork 2.2新特性(九) AJAX之Remote A Tag&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/13/12899.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(九) AJAX之Tabbed Panels(选项卡)&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/14/13025.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2新特性(九) AJAX之Remote Form&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/14/13030.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork 2.2新特性 结束语&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;补： &lt;a class=&quot;entrylisttitle&quot; href=&quot;http://www.blogjava.net/scud/archive/2005/09/21/13667.html&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#333333&quot; size=&quot;2&quot;&gt;WebWork2.2中结合Spring:&quot;新的方式&quot;(已更新)&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;如果以后域名或者链接变化了，可以在我的blog里面搜索一下，应该都在 ：） &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/9521.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/9389.html</guid>
  <pubDate>Wed, 08 Mar 2006 02:36:22 GMT</pubDate>
  <title>Programer援助交际</title>
  <link>http://minggo.livejournal.com/9389.html</link>
  <description>&lt;p&gt;路人甲(17630319) 09:56:59&lt;br /&gt;有人用过java实现的消息总线么？ &lt;br /&gt;Zhongwm(52208468) 10:03:54&lt;br /&gt;具体的 &lt;br /&gt;路人甲(17630319) 09:59:18&lt;br /&gt;不是询问商业产品，而是有没有在系统中有类似的设计？java中有相关的规范jbi，还没有看完 &lt;br /&gt;Kei(上海猎头)(8765424) 10:00:18&lt;br /&gt;c++做过不少总线。java每写过。其他人写的。有什么问题？ &lt;br /&gt;铁手(28730869) 10:02:01&lt;br /&gt;ActiveMQ &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:12&lt;br /&gt;1.消息总线成为瓶颈的时候如何进行负载上的扩容？&lt;br /&gt;2.消息总线如何支持分布式处理？&lt;br /&gt;3.消息总线是否可以保证可靠的消息传输?&lt;br /&gt;考虑了这些方面么？&amp;nbsp; &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:18&lt;br /&gt;都考虑了 &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:29&lt;br /&gt;1负载扩展 &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:41&lt;br /&gt;有2种做法。 &lt;br /&gt;Kei(上海猎头)(8765424) 10:04:07&lt;br /&gt;1种是有中心节点的集群。不过会有单点故障。可以采用选举式的分布算法来选举中心节点。不过比较复杂我们没采用&lt;br /&gt;路人甲(17630319) 09:56:59&lt;br /&gt;有人用过java实现的消息总线么？ &lt;br /&gt;Zhongwm(52208468) 10:03:54&lt;br /&gt;具体的 &lt;br /&gt;路人甲(17630319) 09:59:18&lt;br /&gt;不是询问商业产品，而是有没有在系统中有类似的设计？java中有相关的规范jbi，还没有看完 &lt;br /&gt;Kei(上海猎头)(8765424) 10:00:18&lt;br /&gt;c++做过不少总线。java每写过。其他人写的。有什么问题？ &lt;br /&gt;铁手(28730869) 10:02:01&lt;br /&gt;ActiveMQ &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:12&lt;br /&gt;1.消息总线成为瓶颈的时候如何进行负载上的扩容？&lt;br /&gt;2.消息总线如何支持分布式处理？&lt;br /&gt;3.消息总线是否可以保证可靠的消息传输?&lt;/p&gt;&lt;p&gt;考虑了这些方面么？&amp;nbsp; &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:18&lt;br /&gt;都考虑了 &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:29&lt;br /&gt;1负载扩展 &lt;br /&gt;Kei(上海猎头)(8765424) 10:02:41&lt;br /&gt;有2种做法。 &lt;br /&gt;Kei(上海猎头)(8765424) 10:04:07&lt;br /&gt;1种是有中心节点的集群。不过会有单点故障。可以采用选举式的分布算法来选举中心节点。不过比较复杂我们没采用 &lt;br /&gt;ytam--白粉(6159416) 10:05:39&lt;br /&gt;类似p2p的DHT的做法试过没，呵呵，全分布 &lt;br /&gt;Kei(上海猎头)(8765424) 10:06:02&lt;br /&gt;2是增加节点时。保持新节点与原来所有节点的连接。这样某个节点收到消息后，需要马上同步到其他节点。里面要注意消息的序列问题，需要共享一个全局序列好 &lt;br /&gt;Kei(上海猎头)(8765424) 10:08:45&lt;br /&gt;多机器还要自己设计路由算法 &lt;br /&gt;路人甲(17630319) 10:09:42&lt;br /&gt;总线上支持每秒多少个消息？消息支持同步和异步么？ &lt;br /&gt;ytam--白粉(6159416) 10:09:46&lt;br /&gt;一个全局序列？你们是维持causal order还是真正的gobal order? &lt;br /&gt;Kei(上海猎头)(8765424) 10:12:31&lt;br /&gt;呵呵。刚确认了以下。我们做的那个不保证序列的。不好意思 &lt;br /&gt;Kei(上海猎头)(8765424) 10:13:40&lt;br /&gt;序列是应用上保证的。这样通讯中间件作起来容易。不过某些商业产品是保证各个节点的消息序列是一致的。 &lt;br /&gt;Kei(上海猎头)(8765424) 10:14:37&lt;br /&gt;做法一旧可以保证。由中心节点来仲裁。中心节点需要热辈分保证不出现单点故障 &lt;br /&gt;ytam--白粉(6159416) 10:14:49&lt;br /&gt;哦。我以为你们保证的是各节点内的total order，那就要用定序器类似的东西，比较麻烦，而且性能会... &lt;br /&gt;Kei(上海猎头)(8765424) 10:15:18&lt;br /&gt;是的。所以自己没有做 &lt;br /&gt;Kei(上海猎头)(8765424) 10:16:14&lt;br /&gt;总线上支持每秒多少个消息？消息支持同步和异步么？ 没有统计过。支持异步。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;ytam--白粉(6159416) 10:16:22&lt;br /&gt;causal order应该满足吧，不然就不满足因果关系还是比较麻烦di，而且causal order实现高效哦 &lt;br /&gt;Kei(上海猎头)(8765424) 10:16:56&lt;br /&gt;什么市causal order?不知道这个名词什么意思？ &lt;br /&gt;ytam--白粉(6159416) 10:17:06&lt;br /&gt;比较羡慕kikin做过那么多实际的通信系统，呵呵 &lt;br /&gt;Kei(上海猎头)(8765424) 10:17:54&lt;br /&gt;呵呵。身边强人多。跟着学的而已。 &lt;br /&gt;ytam--白粉(6159416) 10:18:03&lt;br /&gt;因果顺序，就是如果一个节点是收到消息A才发消息B的话，那么集群内各节点都保证先收A再收B &lt;br /&gt;Kei(上海猎头)(8765424) 10:18:28&lt;br /&gt;这个可以保证的 &lt;br /&gt;Kei(上海猎头)(8765424) 10:18:45&lt;br /&gt;和我想的意思一样。呵呵 &lt;br /&gt;ytam--白粉(6159416) 10:19:07&lt;br /&gt;就是啊，不然因果关系都不满足了。 &lt;br /&gt;Kei(上海猎头)(8765424) 10:19:52&lt;br /&gt;每个节点都保证自己的消息序列的 &lt;br /&gt;ytam--白粉(6159416) 10:20:20&lt;br /&gt;始终觉得这些系统一定要实际做过才好，不然怎么研究是个理想的东西，好象我 &lt;br /&gt;Kei(上海猎头)(8765424) 10:21:16&lt;br /&gt;3.消息总线是否可以保证可靠的消息传输?&lt;br /&gt;当染能支持。不过做的好的能够提供3种程度的支持。我们只实现最大程度支持和最小程度支持 &lt;br /&gt;邢红瑞(50128986) 10:21:33&lt;br /&gt;可以并发吗&lt;br /&gt;&amp;nbsp;&lt;br /&gt;邢红瑞(50128986) 10:22:00&lt;br /&gt;我作过单线程的，效率还可以 &lt;br /&gt;kevin(14425285) 10:22:12&lt;br /&gt;请问一下：hibernate中的Example对于日期是如何操作的？ &lt;br /&gt;蒋蓉生(1250393) 10:23:04&lt;br /&gt;date 还是 datetime ? &lt;br /&gt;蒋蓉生(1250393) 10:23:25&lt;br /&gt;date 就是用 date&lt;br /&gt;datetime 就用 timestamp &lt;br /&gt;Kei(上海猎头)(8765424) 10:23:27&lt;br /&gt;你的并发指什么？对单个节点来说，单县城处理和多县城处理我都做过。更倾向单县城，效率更高 &lt;br /&gt;kevin(14425285) 10:23:37&lt;br /&gt;TimestampType &lt;br /&gt;ytam--白粉(6159416) 10:23:44&lt;br /&gt;这个消息传输可靠性，是单纯消息通信过程的可靠性，还是消息本身的可靠性？就是总线系统crash后仍保证？ &lt;br /&gt;kevin(14425285) 10:23:48&lt;br /&gt;怎么弄？！ &lt;br /&gt;kevin(14425285) 10:24:11&lt;br /&gt;Example的enableLike默认是字符的 &lt;br /&gt;邢红瑞(50128986) 10:24:18&lt;br /&gt;总线系统crash后仍保证 &lt;br /&gt;Kei(上海猎头)(8765424) 10:24:20&lt;br /&gt;对单个节点，单县城和多县城都能提供异步操作。旧可以了 &lt;br /&gt;邢红瑞(50128986) 10:24:36&lt;br /&gt;我是不是，白痴&lt;br /&gt;&amp;nbsp;&lt;br /&gt;蒋蓉生(1250393) 10:24:57&lt;br /&gt;映射文件中 用 type=&quot;timestamp&quot; 表示 &lt;br /&gt;kevin(14425285) 10:25:12&lt;br /&gt;这个我知道 &lt;br /&gt;kevin(14425285) 10:26:00&lt;br /&gt;现在映射没有问题，我是想用hibernate提供的Example来建立criteria &lt;br /&gt;蒋蓉生(1250393) 10:26:08&lt;br /&gt;程序里面直接保存 date 实例 &lt;br /&gt;kevin(14425285) 10:26:31&lt;br /&gt;&amp;nbsp; &lt;br /&gt;蒋蓉生(1250393) 10:26:34&lt;br /&gt;用来做比较？ &lt;br /&gt;kevin(14425285) 10:26:47&lt;br /&gt;Example ex = Example.create(p).ignoreCase().enableLike(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MatchMode.ANYWHERE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;Criteria criteria = getSession().createCriteria(President.class).add(ex); &lt;br /&gt;kevin(14425285) 10:26:53&lt;br /&gt;比如这里直接就创建了criteria &lt;br /&gt;kevin(14425285) 10:27:16&lt;br /&gt;但是这里只能对字符串的like &lt;br /&gt;Kei(上海猎头)(8765424) 10:27:22&lt;br /&gt;我还没说完3种可靠性措施呢。1种是不保证可靠到达。性能最好1种是若保证。消息内容在内存缓存，当节点crash旧不能保证可靠到达。3就是保存在文件中。crash后根据队列重新恢复 &lt;br /&gt;kevin(14425285) 10:27:26&lt;br /&gt;date的like会报错 &lt;br /&gt;蒋蓉生(1250393) 10:27:42&lt;br /&gt;呵呵，刚才没有弄明白问题 sorry &lt;br /&gt;Kei(上海猎头)(8765424) 10:27:46&lt;br /&gt;其实做法都很多种。看具体应用需要 &lt;br /&gt;kevin(14425285) 10:27:55&lt;br /&gt;也谢谢你呀：） &lt;br /&gt;邢红瑞(50128986) 10:28:27&lt;br /&gt;今天看到kei真正水平 &lt;br /&gt;Kei(上海猎头)(8765424) 10:28:37&lt;br /&gt;。。。 &lt;br /&gt;蒋蓉生(1250393) 10:29:22&lt;br /&gt;没做过比较日期的&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/9389.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/8819.html</guid>
  <pubDate>Tue, 28 Feb 2006 09:01:43 GMT</pubDate>
  <title>JSTL的中文帮助文档</title>
  <link>http://minggo.livejournal.com/8819.html</link>
  <description>前言&lt;br /&gt;&lt;br /&gt;从JSP　1.1规范开始，JSP就支持在JSP中使用自定义标签了，自定义标签的广泛使用造成了程序员重复定义，这样就促成了JSTL（JavaServer Pages Standard Tag Library）的诞生。&lt;br /&gt;因为工作中需要用到JSTL，但网上却苦于找不到有关JSTL的中文资料，所以就有了这篇文章。&lt;br /&gt;&lt;br /&gt;JSTL简介&lt;br /&gt;&lt;br /&gt;JSTL是一个不断完善的开放源代码的JSP标签库，是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上，如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。&lt;br /&gt;JSTL目前的最新版本为1.02，最终发布版为1.0。JSTL包含两个部分：标签库和EL（Expression Language表达式语言）语言。标签库目前支持四种标签：标签 URI 前缀 示例 &lt;br /&gt;Core &lt;a href=&quot;http://java.sun.com/jstl/core&quot;&gt;http://java.sun.com/jstl/core&lt;/a&gt; c &amp;lt;c:tagname ...&amp;gt; &lt;br /&gt;XML processing &lt;a href=&quot;http://java.sun.com/jstl/xml&quot;&gt;http://java.sun.com/jstl/xml&lt;/a&gt; x &amp;lt;x:tagname ...&amp;gt; &lt;br /&gt;I18N capable formatting &lt;a href=&quot;http://java.sun.com/jstl/fmt&quot;&gt;http://java.sun.com/jstl/fmt&lt;/a&gt; fmt &amp;lt;fmt:tagname ...&amp;gt; &lt;br /&gt;Database access (SQL) &lt;a href=&quot;http://java.sun.com/jstl/sql&quot;&gt;http://java.sun.com/jstl/sql&lt;/a&gt; sql &amp;lt;sql:tagname ...&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Core支持JSP中的一些基本的操作；&lt;br /&gt;XML processing支持XML文档的处理；&lt;br /&gt;I18N capable formatting支持对JSP页面的国际化；&lt;br /&gt;Database access (SQL)支持JSP对数据库的操作。&lt;br /&gt;&lt;br /&gt;由于本人水平有限，本文仅介绍Core标签，如有兴趣，可一起探讨其它三种标签的使用与扩充。&lt;br /&gt;&lt;br /&gt;EL语言介绍&lt;br /&gt;&lt;br /&gt;EL语言是JSTL输出（输入）一个JAVA表达式的表示形式。&lt;br /&gt;在JSTL中，EL语言只能在属性值中使用。EL语言只能通过建立表达式${exp1}来进行调用。在属性值中使用表达式有三种方式。&lt;br /&gt;&lt;br /&gt;1、 value属性包含一个表达式&lt;br /&gt;&amp;lt;some:tag value=&quot;${expr}&quot;/&amp;gt;&lt;br /&gt;在这种情况下，表达式值被计算出来并根据类型转换规则赋值给value属性。比如：&amp;lt;c:out value=&quot;${username}&quot; /&amp;gt;中的${username}就是一个EL，它相当于JSP语句&amp;lt;%=request.getAttribute(“username”)%&amp;gt;或&amp;lt;%=session.getAttribute(“username”)%&amp;gt;&lt;br /&gt;&lt;br /&gt;2、 value属性包含一个或多个属性，这些属性被文本分割或围绕&lt;br /&gt;&amp;lt;some:tag value=&quot;some${expr}${expr}text${expr}&quot;/&amp;gt;&lt;br /&gt;在这种情况下，表达式从左到右进行计算，并将结果转换为字符串型（根据类型转换规则），并将结果赋值给value属性&lt;br /&gt;&lt;br /&gt;3、 value属性仅仅包含文本&lt;br /&gt;&amp;lt;some:tag value=&quot;sometext&quot;/&amp;gt;&lt;br /&gt;在这种情况下，字符串型属性value将根据类型转换规则转换为标签所希望的类型。&lt;br /&gt;&lt;br /&gt;EL语言的操作符&lt;br /&gt;取得某个对象或集合中的属性值&lt;br /&gt;为了获得集合中的属性，EL支持以下两种操作&lt;br /&gt;1． 使用.操作符来获得有名字的属性。例如表达式${user.username}表明对象user的username属性&lt;br /&gt;2． 使用[]操作符来获得有名字或按数字排列的属性。&lt;br /&gt;表达式${user[&quot;username&quot;]}和表达式${user. username }含义相同&lt;br /&gt;表达式${row[0]} 表明row集合的第一个条目。&lt;br /&gt;在这里user是一个类的对象，它的属性username必须符合标准JavaBean的规范，即必须为username属性定义相应的getter、setter方法。&lt;br /&gt;&lt;br /&gt;Empty操作符(空值检查)&lt;br /&gt;&lt;br /&gt;使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如：&lt;br /&gt;${empty param.username}&lt;br /&gt;如果request的参数列表中的username值为null，则表达式的值为true。 EL也可以直接使用比较操作符与null进行比较。如${param.firstname == null}。&lt;br /&gt;比较操作符操作符 描述 &lt;br /&gt;==或eq 相等检查 &lt;br /&gt;!=或ne 不等检查 &lt;br /&gt;&amp;lt;或lt 小于检查 &lt;br /&gt;&amp;gt;或gt 大于检查 &lt;br /&gt;&amp;lt;=或le 小于等于检查 &lt;br /&gt;&amp;gt;=或ge 大于等于检查 &lt;br /&gt;&lt;br /&gt;数字运算符与逻辑运算符均与JAVA语言相同，不再列表。&lt;br /&gt;&lt;br /&gt;Core标签库&lt;br /&gt;&lt;br /&gt;1、 通用标签&lt;br /&gt;&lt;br /&gt;&amp;lt;c:out&amp;gt;&lt;br /&gt;&amp;lt;c:out&amp;gt;标签用于在JSP中显示数据，它有如下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;value 输出的信息，可以是EL表达式或常量 是 无 &lt;br /&gt;default&amp;nbsp; value为空时显示信息 否 无 &lt;br /&gt;escapeXml 为true则避开特殊的xml字符集 否 true &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;例子:您的用户名是: &amp;lt;c:out value=”${user.username}” default=”guest”/&amp;gt; &lt;br /&gt;&lt;br /&gt;显示用户的用户名，如为空则显示guest&lt;br /&gt;&amp;lt;c:out value=&quot;${sessionScope.username}&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;指定从session中获取username的值显示；&lt;br /&gt;&amp;lt;c:out value=&quot;${username}&quot; /&amp;gt; &lt;br /&gt;&lt;br /&gt;显示username的值，默认是从request(page)中取，如果request中没有名为username的对象则从session中取，session中没有则从application(servletContext)中取，如果没有取到任何值则不显示。&lt;br /&gt;&lt;br /&gt;&amp;lt;c:set&amp;gt;&lt;br /&gt;&amp;lt;c:set&amp;gt;标签用于保存数据，它有如下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;value 要保存的信息，可以是EL表达式或常量 否&amp;nbsp; &lt;br /&gt;target 需要修改属性的变量名，一般为javabean的实例 否 无 &lt;br /&gt;property 需要修改的javabean属性 否 无 &lt;br /&gt;var 需要保存信息的变量 否 无 &lt;br /&gt;scope 保存信息的变量的范围 否 page &lt;br /&gt;&lt;br /&gt;如果指定了target属性, 那么property属性也必须指定。&lt;br /&gt;例子：&amp;lt;c:set value=&quot;${test.testinfo}&quot; var=&quot;test2&quot; scope=”session” /&amp;gt; &lt;br /&gt;&lt;br /&gt;将test.testinfo的值保存到session的test2中，其中test是一个javabean的实例，testinfo是test对象的属性。&lt;br /&gt;&amp;lt;c:set target=&quot;${cust.address}&quot; property=&quot;city&quot; value=&quot;${city}&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;将对象cust.address的city属性值保存到变量city中&lt;br /&gt;&lt;br /&gt;&amp;lt;c:remove&amp;gt;&lt;br /&gt;&amp;lt;c:remove&amp;gt;标签用于删除数据，它有如下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;var 要删除的变量 是 无 &lt;br /&gt;scope 被删除变量的范围 否 所有范围，包括page、request、session、application等 &lt;br /&gt;&lt;br /&gt;例子:&amp;lt;c:remove var=&quot;test2&quot; scope=&quot;session&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;从session中删除test2变量。&lt;br /&gt;&lt;br /&gt;2、 流控制标签&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if&amp;gt;标签有如下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;test 需要评价的条件，相当于if (...){}语句中的条件 是 无 &lt;br /&gt;var 要求保存条件结果的变量名 否 无 &lt;br /&gt;scope 保存条件结果的变量范围 否 page &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:choose&amp;gt;&lt;br /&gt;这个标签不接受任何属性&lt;br /&gt;&lt;br /&gt;&amp;lt;c:when&amp;gt;&lt;br /&gt;&amp;lt;c:when&amp;gt;标签有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;test 需要评价的条件 是 无 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:otherwise&amp;gt;&lt;br /&gt;这个标签同样不接受任何属性&lt;br /&gt;&lt;br /&gt;例子：&amp;lt;c:if test=&quot;${user.wealthy}&quot;&amp;gt;&lt;br /&gt;user.wealthy is true.&lt;br /&gt;&amp;lt;/c:if&amp;gt; &lt;br /&gt;&lt;br /&gt;如果user.wealthy值true，则显示user.wealthy is true.&lt;br /&gt;&lt;br /&gt;&amp;lt;c:choose&amp;gt;&lt;br /&gt;&amp;lt;c:when test=&quot;${user.generous}&quot;&amp;gt;&lt;br /&gt;user.generous　is true.&lt;br /&gt;&amp;lt;/c:when&amp;gt; &lt;br /&gt;&amp;lt;c:when test=&quot;${user.stingy}&quot;&amp;gt;&lt;br /&gt;user.stingy is true.&lt;br /&gt;&amp;lt;/c:when&amp;gt;&lt;br /&gt;&amp;lt;c:otherwise&amp;gt;&lt;br /&gt;user.generous and user.stingy are false.&lt;br /&gt;&amp;lt;/c:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/c:choose&amp;gt; &lt;br /&gt;&lt;br /&gt;只有当条件user.generous返回值是true时，才显示user.generous　is true.&lt;br /&gt;只有当条件user.stingy返回值是true时，才显示user.stingy　is true.&lt;br /&gt;其它所有的情况（即user.generous和user.stingy的值都不为true）全部显示user.generous and user.stingy are false.&lt;br /&gt;&lt;br /&gt;由于JSTL没有形如if (){…} else {…}的条件语句，所以这种形式的语句只能用&amp;lt;c:choose&amp;gt;、&amp;lt;c:when&amp;gt;和&amp;lt;c:otherwise&amp;gt;标签共同来完成了。&lt;br /&gt;&lt;br /&gt;3、 循环控制标签&lt;br /&gt;&lt;br /&gt;&amp;lt;c:forEach&amp;gt;&lt;br /&gt;&amp;lt;c:forEach&amp;gt;标签用于通用数据，它有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;items 进行循环的项目 否 无 &lt;br /&gt;begin 开始条件 否 0 &lt;br /&gt;end 结束条件 否 集合中的最后一个项目 &lt;br /&gt;step 步长 否 1 &lt;br /&gt;var 代表当前项目的变量名 否 无 &lt;br /&gt;varStatus 显示循环状态的变量 否 无 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;例子：&amp;lt;c:forEach items=&quot;${vectors}&quot; var=&quot;vector&quot;&amp;gt;&lt;br /&gt;&amp;lt;c:out value=&quot;${vector}&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/c:forEach&amp;gt; &lt;br /&gt;&lt;br /&gt;相当于java语句for (int i=0;i&amp;lt;vectors.size();i++) {&lt;br /&gt;out.println(vectors.get(i));&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;在这里vectors是一个java.util.Vector对象，里面存放的是String数据，vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util. Collection接口的对象。&lt;br /&gt;&amp;lt;c:forEach begin=&quot;0&quot; end=&quot;100&quot; var=&quot;i&quot; step=&quot;1&quot;&amp;gt;&lt;br /&gt;count=&amp;lt;c:out value=&quot;${i}&quot;/&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;/c:forEach&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;输出:&lt;br /&gt;count=0&lt;br /&gt;...&lt;br /&gt;count=100&lt;br /&gt;&lt;br /&gt;&amp;lt;c:forTokens&amp;gt;&lt;br /&gt;&amp;lt;c:forTokens&amp;gt;标签有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;items 进行循环的项目 是 无 &lt;br /&gt;delims 分割符 是 无 &lt;br /&gt;begin 开始条件 否 0 &lt;br /&gt;end 结束条件 否 集合中的最后一个项目 &lt;br /&gt;step 步长 否 1 &lt;br /&gt;var 代表当前项目的变量名 否 无 &lt;br /&gt;varStatus 显示循环状态的变量 否 无 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;例子&lt;br /&gt;&amp;lt;c:forTokens items=&quot;a:b:c:d&quot; delims=&quot;:&quot; var=&quot;token&quot;&amp;gt;&lt;br /&gt;&amp;lt;c:out value=&quot;${token}&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/c:forTokens&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以：分开循环四次，token是循环到当前分割到的字符串。&lt;br /&gt;&lt;br /&gt;4.导入文件和URL&lt;br /&gt;&lt;br /&gt;JSTL核心标签库支持使用&amp;lt;c:import&amp;gt;来包含文件，使用&amp;lt;c:url&amp;gt;来打印和格式化URL,使用&amp;lt;c:redirect&amp;gt;来重定向URL。&lt;br /&gt;&lt;br /&gt;&amp;lt;c:import&amp;gt;&lt;br /&gt;&amp;lt;c:import&amp;gt;标签包含另外一个页面代码到当前页，它有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;url 需要导入页面的url 是 无 &lt;br /&gt;context /后跟本地web应用程序的名字 否 当前应用程序 &lt;br /&gt;charEncoding 用于导入数据的字符集 否 ISO-8859-1 &lt;br /&gt;var 接受导入文本的变量名 否 page &lt;br /&gt;scope 接受导入文本的变量的变量范围 否 1 &lt;br /&gt;varReader 用于接受导入文本的java.io.Reader变量名 否 无 &lt;br /&gt;varStatus 显示循环状态的变量 否 无 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:url&amp;gt;&lt;br /&gt;&amp;lt;c:url&amp;gt;标签输出一个url地址，它有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;url url地址 是 无 &lt;br /&gt;context /后跟本地web应用程序的名字 否 当前应用程序 &lt;br /&gt;charEncoding 用于导入数据的字符集 否 ISO-8859-1 &lt;br /&gt;var 接受处理过的url变量名，该变量存储url 否 输出到页 &lt;br /&gt;scope 存储url的变量名的变量范围 否 page &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;例子：&lt;br /&gt;&amp;lt;c:import url=&quot;&lt;a href=&quot;http://www.url.com/edit.js&quot;&gt;http://www.url.com/edit.js&lt;/a&gt;&quot; var=&quot;newsfeed&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;将url &lt;a href=&quot;http://www.url.com/edit.js包含到当前页的当前位置，并将url保存到newsfeed变量中&quot;&gt;http://www.url.com/edit.js包含到当前页的当前位置，并将url保存到newsfeed变量中&lt;/a&gt;&lt;br /&gt;&amp;lt;a href=&quot;&amp;lt;c:url url=&quot;/index.jsp&quot;/&amp;gt;&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在当前页的当前位置输出&amp;lt;a href=&quot;&lt;a href=&quot;http://www.yourname.com/index.jsp&quot;&gt;http://www.yourname.com/index.jsp&lt;/a&gt;&quot;/&amp;gt;，&lt;a href=&quot;http://www.yourname.com是当前页的所在的位置。&quot;&gt;http://www.yourname.com是当前页的所在的位置。&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:redirect&amp;gt;&lt;br /&gt;&amp;lt;c:redirect&amp;gt;标签将请求重新定向到另外一个页面，它有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;url url地址 是 无 &lt;br /&gt;context /后跟本地web应用程序的名字 否 当前应用程序 &lt;br /&gt;&lt;br /&gt;例子：&lt;br /&gt;&amp;lt;c:redirect url=&quot;&lt;a href=&quot;http://www.yourname.com/login.jsp&quot;&gt;http://www.yourname.com/login.jsp&lt;/a&gt;&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;将请求重新定向到&lt;a href=&quot;http://www.yourname.com/login.jsp页，相当于response.setRedirect(&quot;&gt;http://www.yourname.com/login.jsp页，相当于response.setRedirect(&lt;/a&gt;&quot;&lt;a href=&quot;http://www.yourname.com/login.jsp&quot;&gt;http://www.yourname.com/login.jsp&lt;/a&gt;&quot;);&lt;br /&gt;&lt;br /&gt;&amp;lt;c:param&amp;gt;&lt;br /&gt;&amp;lt;c:param&amp;gt;标签用来传递参数给一个重定向或包含页面，它有以下属性属 性 描 述 是否必须 缺省值 &lt;br /&gt;name 在request参数中设置的变量名 是 无 &lt;br /&gt;value 在request参数中设置的变量值 否 无 &lt;br /&gt;&lt;br /&gt;例子：&lt;br /&gt;&amp;lt;c:redirect url=&quot;login.jsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;c:param name=&quot;id&quot; value=&quot;888&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/c:redirect&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;将参数888以id为名字传递到login.jsp页面，相当于login.jsp?id=888&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;JSTL的优点&lt;br /&gt;1、 在应用程序服务器之间提供了一致的接口，最大程序地提高了WEB应用在各应用服务器之间的移植。&lt;br /&gt;2、 简化了JSP和WEB应用程序的开发。&lt;br /&gt;3、 以一种统一的方式减少了JSP中的scriptlet代码数量，可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。&lt;br /&gt;4、 允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。&lt;br /&gt;&lt;br /&gt;总结&lt;br /&gt;上面介绍的仅仅是JSTL的一部分，如果有时间我会继续把其它部分写出来分享给大家。如果要使用JSTL，则必须将jstl.jar和standard.jar文件放到classpath中，如果你还需要使用XML processing及Database access (SQL)标签，还要将相关JAR文件放到classpath中，这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从&lt;a href=&quot;http://jakarta.apache.org/builds&quot;&gt;http://jakarta.apache.org/builds&lt;/a&gt; ... bs-standard-1.0.zip下载。&lt;br /&gt;&lt;br /&gt;参考资料&lt;br /&gt;1、 &lt;a href=&quot;http://java.sun.com/products/jsp/jstl/&quot;&gt;http://java.sun.com/products/jsp/jstl/&lt;/a&gt;&lt;br /&gt;sun公司的JSTL站点&lt;br /&gt;2、 &lt;a href=&quot;http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html&quot;&gt;http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html&lt;/a&gt;&lt;br /&gt;jakarta小组的JSTL站点&lt;br /&gt;3、 &lt;a href=&quot;http://www.manning.com/bayern/appendixA.pdf&quot;&gt;http://www.manning.com/bayern/appendixA.pdf&lt;/a&gt;&lt;br /&gt;JSTL的参考文档，本文很多内容都是从这个PDF文件里翻译的。&lt;br /&gt;4、 ＜＜J2EE编程指南（1.3版）＞＞&lt;br /&gt;介绍了JSTL的雏形，wrox的书都是精品。</description>
  <comments>http://minggo.livejournal.com/8819.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/8593.html</guid>
  <pubDate>Tue, 28 Feb 2006 06:43:02 GMT</pubDate>
  <title>The Jenkov file uploader handler</title>
  <link>http://minggo.livejournal.com/8593.html</link>
  <description>&lt;span class=&quot;head1&quot;&gt;HTTP Multipart - Introduction&lt;/span&gt;
&lt;p&gt;With HTTP Multipart uploading files to a Java Web app is quite easy. All you need to do is: &lt;ul&gt;&lt;li&gt;Download the compiled classes for HTTP Multipart and put them in your web app&apos;s WEB-INF/lib directory.

&lt;li&gt;Configure the MultipartFilter (a servlet filter), in your web app&apos;s web.xml. &lt;/li&gt;&lt;/ul&gt;Configuring the MultipartFilter is done by adding these lines to your web app&apos;s web.xml: &lt;p&gt;&lt;/p&gt;&lt;p&gt;
&lt;code&gt;&amp;lt;filter&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;filter-name&amp;gt;multipartFilter&amp;lt;/filter-name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;filter-class&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;com.jenkov.servlet.multipart.MultipartFilter
&amp;nbsp;&amp;nbsp;&amp;lt;/filter-class&amp;gt;
&amp;lt;/filter&amp;gt; 

&amp;lt;filter-mapping&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;filter-name&amp;gt;multipartFilter&amp;lt;/filter-name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;url-pattern&amp;gt;*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/filter-mapping&amp;gt;
&lt;/code&gt;

&lt;/p&gt;&lt;p&gt;Being a servlet filter the MultipartFilter works transparently with both servlets and JSP&apos;s, and thus also with other Java web frameworks like Spring and Struts. &lt;/p&gt;&lt;p&gt;All http requests to the web app will go through the MultipartFilter first. All normal (non-file-upload) requests pass through the filter untouched. All parameters are available via the request.getParameter(paramName) as usual, no matter if the request is a file upload or a normal request. &lt;/p&gt;&lt;p&gt;If the request is a file upload request (the form has enctype=&quot;multipart/form-data&quot; or enctype=&quot;multipart/mixed&quot;) then the files will be received transparently and stored in a temp folder on the server. A java.util.Map of MultipartEntry instances will be attached to the request under the key &quot;multipart.entries&quot;. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;
When uploading two files by submitting this form &lt;/p&gt;&lt;p&gt;
&lt;code&gt;&amp;lt;form method=&quot;post&quot; enctype=&quot;multipart/form-data&quot; &amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;input type=&quot;text&quot; name=&quot;comment&quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;input type=&quot;file&quot; name=&quot;file1&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;input type=&quot;file&quot; name=&quot;file2&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;input type=&quot;submit&quot; value=&quot;Upload&quot; /&amp;gt;
&amp;lt;/form&amp;gt; &lt;/code&gt;


&lt;/p&gt;&lt;p&gt;... the text field named &quot;comment&quot; can be read like this: &lt;/p&gt;&lt;p&gt;&lt;code&gt;
String comment = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.getParameter(&quot;comment&quot;); &lt;/code&gt;


&lt;/p&gt;&lt;p&gt;... and the uploaded files can be accessed like this, inside either a servlet, JSP, Struts action, Spring Controller etc. : &lt;/p&gt;&lt;p&gt;&lt;code&gt;
Map multipartEntries = (Map) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.getAttribute(&quot;multipart.entries&quot;);

MultipartEntry file1 = (MultipartEntry) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;multipartEntries.get(&quot;file1&quot;);

MultipartEntry file2 = (MultipartEntry) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;multipartEntries.get(&quot;file2&quot;);


FileInputStream fileInput1 = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new FileInputStream(file1.getTempFile());
//...do stuff with the file
fileInput1.close();

FileInputStream fileInput2 = 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new FileInputStream(file2.getTempFile());
//...do stuff with the file
fileInput2.close(); &lt;/code&gt;


&lt;/p&gt;&lt;p&gt;You do not have to delete the temp-files. The MultipartFilter does that automatically after your servlet, JSP, Struts action, Spring controller etc. has finished. &lt;/p&gt;&lt;p&gt;The MultiparEntry objects also have the following information available: &lt;/p&gt;&lt;p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;code&gt;entry.getFileName()&lt;/code&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;The file name as sent by the browser&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;code&gt;entry.getFileNameOnly()&lt;/code&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;The file name without directories. Internet Explorer sends full file path for file name. This methods cuts the directories off&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;code&gt;&lt;nobr&gt;entry.getTempFileName()&amp;nbsp;&lt;/nobr&gt;&lt;/code&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;The name of the temp file where the file is stored temporarily.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;code&gt;entry.getTempFile()&lt;/code&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;The java.io.File instance pointing to the temp file. The File.length() can tell you the length of the file.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;------------------------------------
&lt;a href=&quot;http://www.jenkov.dk/httpmultipart/introduction.tmpl&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;</description>
  <comments>http://minggo.livejournal.com/8593.html</comments>
  <category>upload servletfilter</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/8227.html</guid>
  <pubDate>Tue, 28 Feb 2006 03:49:54 GMT</pubDate>
  <title>玩转google十九招秘技</title>
  <link>http://minggo.livejournal.com/8227.html</link>
  <description>第一招：&lt;br /&gt;　　在输入多个词的时候，Google默认的是并且式的查询，如果想使用或者式的查询，使用OR，例如：java OR c++&lt;br /&gt;&lt;br /&gt;　　第二招&lt;br /&gt;　　google是不区分大小写的，搜索Java和搜索JAVA或者java是完全一样的。&lt;br /&gt;&lt;br /&gt;　　第三招&lt;br /&gt;　　逻辑关系优先级使用圆括号，例如查找包含java和（JVM或者虚拟机）：Java (JVM或者虚拟机)。&lt;br /&gt;&lt;br /&gt;　　第四招&lt;br /&gt;　　要搜索词组需要使用引号括起来，例如搜索Java虚拟机可以使用：&quot;Java虚拟机&quot;。&lt;br /&gt;&lt;br /&gt;　　第五招&lt;br /&gt;　　要想在搜索结果中不包含某些结果可以使用减号，例如搜索java又不包含培训可以使用：java -培训。&lt;br /&gt;&lt;br /&gt;　　第六招&lt;br /&gt;　　一般情况下是不能使用通配符的，通配符只能使用在词组中，例如：&quot;使用*模式&quot;。&lt;br /&gt;&lt;br /&gt;　　第七招&lt;br /&gt;　　只在网页的标题(即html的title指定的部分)内搜索指定的内容，例如：intitle:java&lt;br /&gt;第八招&lt;br /&gt;　　只在网页的url内搜索指定的内容，例如：inurl:java。&lt;br /&gt;&lt;br /&gt;　　第九招&lt;br /&gt;　　只在网页的正文内搜索指定的内容（忽略链接文字、标题和url），例如：intext:java。&lt;br /&gt;&lt;br /&gt;　　第十招&lt;br /&gt;　　只在链接文字(链接Java研究组织的链接文字就是Java研究组织)内搜索指定的内容，例如：inanchor:java。&lt;br /&gt;&lt;br /&gt;　　第十一招&lt;br /&gt;　　只在指定的网站内搜索指定的内容，可以是某个具体的网站或者是某个域名分类，例如：site:javaresearch.org或者siterg。&lt;br /&gt;&lt;br /&gt;　　第十二招&lt;br /&gt;　　只在指定的文件格式内搜索指定的内容，需要注意google只能支持有限的常用文本格式，包含一些诸如doc,xsl,ppt,pdf之类的富文本格式，例如：filetype:htm。&lt;br /&gt;&lt;br /&gt;　　第十三招&lt;br /&gt;　　google在检索的时候对于输入的内容的顺序是敏感的，如果找不到合适的结果可以试试改变一下搜索的关键字的顺序。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　第十四招&lt;br /&gt;　　在搜索多个关键字构成的内容时可以试试加引号和不加引号两者情况，结果可能有很大的差异，例如：java虚拟机和&quot;java虚拟机&quot;。&lt;br /&gt;&lt;br /&gt;　　第十五招&lt;br /&gt;　　搜索的策略可以采用先多后少，假设你想搜索Java的的command模式的例子，可以先试试java command pattern，然后试试java pattern或者java command，每次减少的那个关键字应该是你认为相对不重要的一个。&lt;br /&gt;第十六招&lt;br /&gt;　　对于搜索中文而言，搜索“虚拟机”和搜索“虚拟机”是不同的，后者一般比前者的结果多并且相关性差一些，一般情况下你应该在各个词之间加空格，而在词内不加空格，这样得到的结果一般更好。&lt;br /&gt;&lt;br /&gt;　　第十七招&lt;br /&gt;　　一个关键字可以重复两次，对结果的排名和数量也会有影响，重复两次以上好像就没有什么影响了，例如搜索&quot;internet&quot;和搜索&quot;internet internet&quot;的结果是不同的。&lt;br /&gt;&lt;br /&gt;　　第十八招&lt;br /&gt;　　搜索内容最多只能包含十个单词，包括搜索intitle之类的选项，多出的部分被忽略。&lt;br /&gt;&lt;br /&gt;　　第十九招&lt;br /&gt;　　对于intitle,inurl,intext,inanchor和site之类的搜索选项一次不要使用多次，否则要么不是你想要的结果，要么根本就没有结果，混合使用这些选项是合法的，但是规则很复杂。</description>
  <comments>http://minggo.livejournal.com/8227.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/7831.html</guid>
  <pubDate>Sun, 26 Feb 2006 13:13:33 GMT</pubDate>
  <title>what is success</title>
  <link>http://minggo.livejournal.com/7831.html</link>
  <description>WildFox&lt;br /&gt;[49143067]  &lt;br /&gt;  &lt;br /&gt;发帖数量:427  &lt;br /&gt;   Re:50年后我们还能在一起吗？  &lt;br /&gt;TO 轻轻：你写的这些经历包括网络恋情及创业的想法我都经历过，其实有时候起点就是终点，当你辛辛苦苦的折腾一圈回来的时候发现又站在原来的起点上了，只是感受和想法不同罢了。&lt;br /&gt;    缘分来之不易，能碰到就是上天给你莫大的EN CI了，去把握把。&lt;br /&gt;    关于创业，三思而后行，人生的成功度不在于事业的大小，而在乎自己的感受，在乎你给你身边的人的感受，想想创业的漫长，家人朋友的担心，自己的付出，等辛辛苦苦的熬出头了，发现身边唯一剩下就是那么几张钞票了，人也或许老了，那份感情也变质了，父母也白发苍苍了，这些都是买不回来的。。。&lt;br /&gt;   另外，现在不是想法时代，有个点子就能熬出头的，或许能有成功的，不过这种几率少之又少。资本是决定了崛起速度的唯一杠杆，资本时代靠的是大笔的资金，有了资金就有了人才，有了人才你要什么点子都太简单了。&lt;br /&gt;    轻轻：希望你能成功，更重要的是希望你过的开心。</description>
  <comments>http://minggo.livejournal.com/7831.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/7547.html</guid>
  <pubDate>Wed, 22 Feb 2006 04:01:55 GMT</pubDate>
  <link>http://minggo.livejournal.com/7547.html</link>
  <description>&lt;a href=&quot;http://dev2dev.bea.com/pub/a/2005/06/memory_leaks.html&quot; title=&quot;Memory Leaks, Be Gone!&quot; target=&quot;_blank&quot;&gt;Memory Leaks, Be Gone!&lt;/a&gt;</description>
  <comments>http://minggo.livejournal.com/7547.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/7331.html</guid>
  <pubDate>Fri, 17 Feb 2006 03:12:32 GMT</pubDate>
  <title>OSWorkFlow</title>
  <link>http://minggo.livejournal.com/7331.html</link>
  <description>&lt;a href=&quot;http://blog.csdn.net/yun15291li/category/135194.aspx?PageNumber=2&quot; target=&quot;_blank&quot;&gt;yun15291li的osworkflow资料&lt;/a&gt;</description>
  <comments>http://minggo.livejournal.com/7331.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/6993.html</guid>
  <pubDate>Thu, 16 Feb 2006 05:15:22 GMT</pubDate>
  <title>浮生六记</title>
  <link>http://minggo.livejournal.com/6993.html</link>
  <description>沈复说：&quot;惜卿雌而伏，苟能化为男，相与访名山，搜胜迹，邀游天下，不亦快哉！&quot;&lt;br /&gt;　　芸娘说：&quot;此何难。俟妾鬓斑之后，虽不能远游五岳，而近地之虎阜灵岩，南至西湖，北至平山，尽可偕游。&quot;&lt;br /&gt;　　沈复说：&quot;恐卿鬓斑之日，步履已艰。&quot;&lt;br&gt;　　芸娘说：&quot;今世不能，期以来世。&quot;&lt;br&gt;　　沈复说：&quot;来世卿当作男，我为女子相从。&quot;&lt;br&gt;　　芸娘说：&quot;必得不昧今生，方觉有情趣。&quot;</description>
  <comments>http://minggo.livejournal.com/6993.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/6499.html</guid>
  <pubDate>Thu, 26 Jan 2006 02:44:57 GMT</pubDate>
  <title>短歌行 曹操</title>
  <link>http://minggo.livejournal.com/6499.html</link>
  <description>&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 16pt; FONT-FAMILY: 楷体_GB2312&quot;&gt;短歌行&lt;span lang=&quot;EN-US&quot;&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: right&quot; align=&quot;right&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 楷体_GB2312&quot;&gt;曹操 &lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;对酒当歌，人生几何？&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;譬如朝露，去日苦多。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;慨当以慷，忧思难忘。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;何以解忧，惟有杜康。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;轻轻子衿，悠悠我心。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;但为君故，沈吟至今。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;呦呦鹿鸣，食野之苹。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;我有嘉宾，鼓瑟吹笙。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;明明如月，何时可掇？&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;忧从中来，不可断绝。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;越陌度阡，枉用相存。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;契阔谈宴，心念旧思。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;月明星稀，乌鹊南飞。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;绕树三匝，何枝可依？&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;山不厌高，海不厌深。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center&quot; align=&quot;center&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312&quot;&gt;周公吐哺，天不归心。&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/6499.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://minggo.livejournal.com/6117.html</guid>
  <pubDate>Thu, 19 Jan 2006 07:53:03 GMT</pubDate>
  <title>js md5加密</title>
  <link>http://minggo.livejournal.com/6117.html</link>
  <description>&lt;p&gt;Java+MD5 &lt;br /&gt;J2SE在java.security.MessageDigest提供了一个MD5、SHA摘要计算类。&lt;br /&gt;结合javascript的md5计算，可以实现前台口令加密，后台数据库中也保存的是md5或者sha的密码加密摘要。&lt;/p&gt;&lt;p&gt;具体实现如下：&lt;br /&gt;1、login.jsp部分&lt;br /&gt;...&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot; src=&apos;js/md5.js&apos;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;html:form action=&quot;/login&quot; focus=&quot;userid&quot; &amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;table class=&quot;SubFormStyle&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;tr align=left&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;bean:message key=&quot;caption.LOGIN.UserID&quot; /&amp;gt; &amp;lt;html:text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property=&quot;userid&quot; value=&quot;&quot;&amp;gt;&amp;lt;/html:text&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;bean:message key=&quot;caption.LOGIN.Password&quot; /&amp;gt; &amp;lt;html:password&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property=&quot;passwordinput&quot; value=&quot;&quot;&amp;gt;&amp;lt;/html:password&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;html:hidden&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property=&quot;password&quot; value=&quot;&quot; &amp;gt;&amp;lt;/html:hidden&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;html:submit onclick=&quot;password.value = hex_md5(passwordinput.value);&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean:message key=&quot;button.Login&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/html:submit&amp;gt;&amp;lt;/td&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/html:form&amp;gt;&lt;br /&gt;...&lt;/p&gt;&lt;p&gt;2、我用的是struts，具体的action和form就不再浪费纸张了，我定义了一个loginuser的类来进行用户密码校验，这里只给出校验的方法：&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; * 校验密码，密码采用MD5算法加密。&lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; * @Param PasswordInput, 待校验密码 &lt;br /&gt;&amp;nbsp; * @Return 校验通过返回true，否则返回false&lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public boolean CheckPassword(String PasswordInput) throws ATError {&lt;/p&gt;&lt;p&gt;&amp;nbsp; this.select();//从数据库中读取用户信息&lt;br /&gt;&amp;nbsp; MessageDigest md;&lt;br /&gt;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp; //生成一个MD5加密计算摘要&lt;br /&gt;&amp;nbsp;&amp;nbsp; md = MessageDigest.getInstance(&quot;MD5&quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; //计算md5函数&lt;br /&gt;&amp;nbsp;&amp;nbsp; md.update(this.password.getBytes());&lt;br /&gt;&amp;nbsp;&amp;nbsp; //digest()最后确定返回md5 hash值，返回值为8为字符串。因为md5 hash值是16位的hex值，实际上就是8位的字符&lt;br /&gt;&amp;nbsp;&amp;nbsp; //BigInteger函数则将8位的字符串转换成16位hex值，用字符串来表示；得到字符串形式的hash值&lt;br /&gt;&amp;nbsp;&amp;nbsp; String pwd = new BigInteger(1, md.digest()).toString(16);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (PasswordInput.equals(pwd)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; } catch (NoSuchAlgorithmException e) {&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; throw new ATError(e, &quot;LoginUser&quot;, &quot;CheckPassword&quot;, 1000);&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;md5.js下载：&lt;a href=&quot;http://pajhome.org.uk/crypt/md5/index.html&quot;&gt;http://pajhome.org.uk/crypt/md5/index.html&lt;/a&gt;&lt;/p&gt;</description>
  <comments>http://minggo.livejournal.com/6117.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
