﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-狼爱上狸-随笔分类-JAVA</title><link>http://www.blogjava.net/waterjava/category/9755.html</link><description>我胡汉山又回来了!</description><language>zh-cn</language><lastBuildDate>Fri, 06 Jun 2008 09:43:47 GMT</lastBuildDate><pubDate>Fri, 06 Jun 2008 09:43:47 GMT</pubDate><ttl>60</ttl><item><title>再提 Ubuntu/Debian 下 JAVA 中文显示</title><link>http://www.blogjava.net/waterjava/archive/2008/05/31/204985.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 31 May 2008 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2008/05/31/204985.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/204985.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2008/05/31/204985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/204985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/204985.html</trackback:ping><description><![CDATA[IRC 上又有朋友问到这 JAVA 的 ，<br />
<br />
<br />
1.<br />
在 jre/lib/fonts/ 下建立个目录 fallback<br />
比如我这儿就是<br />
mkdir /usr/lib/j2sdk1.5-sun/jre/lib/fonts/fallback/<br />
<br />
2.<br />
在 fallback 里弄个中文字体<br />
拷贝或链接都可以<br />
<br />
比如我这就是<br />
ln   -s   /usr/share/fonts/truetype/arphic/uming.ttf    /usr/lib/j2sdk1.5-sun/jre/lib/fonts/fallback/<br />
<br />
<br />
3.<br />
进入 jre/lib/fonts/<strong>fallback</strong>/ 执行 mkfontscale<br />
再把  jre/lib/fonts/<strong>fonts.scale</strong> 的内容加到 jre/lib/fonts/<strong>fonts.dir</strong><br />
<br />
我这儿就是<br />
cd  /usr/lib/j2sdk1.5-sun/jre/lib/fonts/fallback/<br />
mkfontscale<br />
cd ..<br />
cat fallback/fonts.scale &gt;&gt;   fonts.dir<br />
<br />
来自：http://blog.chinaunix.net/u/28007/showart_217907.html?<br />
<img src ="http://www.blogjava.net/waterjava/aggbug/204985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2008-05-31 22:17 <a href="http://www.blogjava.net/waterjava/archive/2008/05/31/204985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java简单的术语</title><link>http://www.blogjava.net/waterjava/archive/2008/04/25/196055.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 25 Apr 2008 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2008/04/25/196055.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/196055.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2008/04/25/196055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/196055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/196055.html</trackback:ping><description><![CDATA[<br />
1.什么是DAO？<br />
<a href="http://baike.baidu.com/pic/17/11717242058315143.jpg" target="_blank"><img title="点击查看大图" alt="" hspace="5" src="http://baike.baidu.com/pic/17/11717242058315143_small.jpg" align="right" vspace="5" border="0" /></a> DAO是Data Access Object数据访问接口，数据访问：故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。<br />
<br />
在核心J2EE模式中是这样介绍DAO模式的：为了建立一个健壮的J2EE应用，应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说，就是建立一个接口，接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中，当需要和数据源进行交互的时候则使用这个接口，并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。<br />
<br />
&nbsp; &nbsp; DAO（数据访问对象）是一种应用程序编程接口（API），存在于微软的Visual Basic中，它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数，它还可以访问其他的结构化查询语言（SQL）数据库。 <br />
<br />
2.什么是POJO？<br />
简单的Java对象（Plain Old Java Objects）实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。&nbsp;&nbsp;<br />
<br />
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口。例如：<br />
public class User { <br />
&nbsp;&nbsp;private long id; <br />
&nbsp;&nbsp;private String name; <br />
&nbsp;&nbsp;public void setId(long id) { <br />
this.id = id; <br />
}&nbsp;&nbsp;<br />
public void setName(String name) { <br />
this.name=name; <br />
} <br />
public long getId() { <br />
return id; <br />
}&nbsp;&nbsp;<br />
public String getName() { <br />
return name; <br />
} <br />
} <br />
POJO对象有时也被称为Data对象，大量应用于表现现实中的对象。<br />
<br />
3.什么是IMPL？<br />
<br />
尚未查到。<br />
<img src ="http://www.blogjava.net/waterjava/aggbug/196055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2008-04-25 20:17 <a href="http://www.blogjava.net/waterjava/archive/2008/04/25/196055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic Server管理指南 </title><link>http://www.blogjava.net/waterjava/archive/2006/11/27/83696.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Mon, 27 Nov 2006 00:41:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/27/83696.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/83696.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/27/83696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/83696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/83696.html</trackback:ping><description><![CDATA[
		<p>
				<font face="verdana, arial, helvetica" size="2">
						<span class="javascript" id="text5351529" style="FONT-SIZE: 12px">WebLogic Server主题导航：<br /><br />0、在看下面帖子的时候请优先查看BEA客户支持服务部的“常见技术问题（FAQs）”专栏<br /><a href="http://www.bea.com.cn/services/custsupp/techresor/faq/index.jsp" target="_blank">http://www.bea.com.cn/services/cust...r/faq/index.jsp</a><br /><br />WebLogic Server 管理最佳实践 <br /><a href="http://dev2dev.bea.com.cn/techdoc/webser/200408231.html" target="_blank">http://dev2dev.bea.com.cn/techdoc/webser/200408231.html</a><br /><br /><br />1、 WebLogic Server安装主题<br />如何安装BEA WebLogic Server<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20040178.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20040178.html</a><br /><br />如何启动WebLogic Server<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20040179.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20040179.html</a><br /><br />如何启动example Server<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20040180.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20040180.html</a><br /><br />如何在solaris环境下设置WLS的自启动：<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=8560" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...1&amp;threadID=8560</a><br /><br />Oracle和WebLogic在Linux下面的自动启动与停止<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=8839" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...1&amp;threadID=8839</a><br /><br /><br />2、 WebLogic Server配置主题<br />weblogic 配置出来的各种域有什么区别？ <br /><a href="http://211.144.153.5/bbs/thread.jspa?forumID=81&amp;threadID=9188" target="_blank">http://211.144.153.5/bbs/thread.jsp...1&amp;threadID=9188</a><br /><br />在WLS 8.1 上配置群集的基本步骤是什么？<br /><a href="http://support.bea.com/askbea_soln/attachments/S-20763/WLS81_Cluster_Configuration_One_Machine_viewlet_swf.html" target="_blank">http://support.bea.com/askbea_soln/...iewlet_swf.html</a><br /><br />如何配置WebLogic Server的集群<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20040181.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20040181.html</a><br /><br />weblogic 8.1节点管理器的配置：<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20030730.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20030730.html</a><br /><br />如何部署集群环境下的proxy Server<br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20040182.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20040182.html</a><br /><br />大系统部置，10台P4前置机，4台HPN4000机子，布集群各位有何建议<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=7732&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=7732&amp;tstart=0</a><br /><br />请用过集群的帮忙回答下，好吗，谢谢，在线等，急！<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=4800&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=4800&amp;tstart=0</a><br /><br />Apache 2.x与WLS8.1集成-Linux篇 <br /><a href="http://dev2dev.bea.com.cn/bbs/school/guide/webser/20031270.html" target="_blank">http://dev2dev.bea.com.cn/bbs/schoo...r/20031270.html</a><br /><br />Apache plug-in配置代理请求实战<br /><a href="http://dev2dev.bea.com.cn/techdoc/webser/200402121.html" target="_blank">http://dev2dev.bea.com.cn/techdoc/webser/200402121.html</a><br /><br />WebLogic Server 8.1虚拟主机配置最佳实践 <br /><a href="http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=19" target="_blank">http://dev2dev.bea.com.cn/bbs/yuanc...eShow.jsp?Id=19</a><br /><br />关于web application （virtual host的配置）<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=9776&amp;messageID=49217" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...messageID=49217</a><br /><br /><br />3、配置SSL<br />WebLogic支持密钥的长度限制<br />WebLogic 8.1 SP3之前的版本，默认的 License是SSL/Export，最多只能到512位密钥，如果想产生大于512位的密钥，需要安装SSL/Domestic的License。<br />自WebLogic 8.1 SP3后，默认情况下已经启用了SSL/Domestic，即支持1024位的数字证书。<br /><br />【推荐】WebLogic Server 8.1 配置Keystores 和 SSL的步骤 <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=8362&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=8362&amp;tstart=0</a><br /><br /><br />4、hung&amp;core&amp;Performance tuning<br />【精华－WLS调优集锦】weblogic+sqlserver速度极慢的问题（使用了集群） <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=4525&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=4525&amp;tstart=0</a><br /><br />队列长度一直很高，吞吐量不大，访问很慢是怎么回事？ <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=7770&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=7770&amp;tstart=0</a><br /><br />'StackOverFlow' Issues in BEA WebLogic Server <br /><a href="http://www.sys-con.com/WebLogic/articleprint.cfm?id=440" target="_blank">http://www.sys-con.com/WebLogic/articleprint.cfm?id=440</a><br /><br />推荐好文-Looking at Thread-Dumps <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=9288&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=9288&amp;tstart=0</a><br /><br />JVM的垃圾回收参数怎么设置？<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=6931" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...1&amp;threadID=6931</a><br /><br />如果没有适当的JVM调优，应用系统中容易出现java.lang.OutOfMemoryError的错误thread dump 请大家分析分析，谢谢！<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=9779&amp;messageID=49254" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...messageID=49254</a><br /><br />高手帮忙分析一下我们在AIX上的Weblogic危机！<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=9514&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=9514&amp;tstart=0</a><br /><br />最近weblogic用的起来老是数据库连接池被耗尽 <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=9121&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=9121&amp;tstart=0</a><br /><br />问：指定的网络名不存在？ <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=9393&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=9393&amp;tstart=0</a><br /><br /><br />5、其它：<br />win2000下apache2+weblogic7实现基于同一个ip地址的多个虚拟主机访问多个weblogic站点 <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=6326&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=6326&amp;tstart=0</a><br /><br />控制台左边的树结构不见了，请大侠指点一下！ <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=5233&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=5233&amp;tstart=0</a><br /><br />BEA 8.1最新管理方面的认证：BEA 8.1 Certified Administrator <br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=7564&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=7564&amp;tstart=0</a><br /><br />求救：如何远程启动WEBLOGIC服务<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=7709&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=7709&amp;tstart=0</a><br /><br />WebLogic Platform 8.1 永不过期的开发版license<br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&amp;threadID=8992&amp;tstart=0" target="_blank">http://dev2dev.bea.com.cn/bbs/threa...D=8992&amp;tstart=0</a><br /><br />trackback: <a href="http://www.ixpub.net/635057.html">http://www.ixpub.net/635057.html</a></span>
				</font>
		</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/83696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-27 08:41 <a href="http://www.blogjava.net/waterjava/archive/2006/11/27/83696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面掌握百度空间技巧之CSS详细说明</title><link>http://www.blogjava.net/waterjava/archive/2006/11/15/81192.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 15 Nov 2006 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/15/81192.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/81192.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/15/81192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/81192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/81192.html</trackback:ping><description><![CDATA[全面掌握<a href="http://www.mboba.com/art/516_16.htm">百度空间技巧</a>之CSS详细说明<br /><br />body 整个空间页面{background-color:#FFFFFF}<br />--------------------------------------------------------------------------------<br />空间名称和简介区域<br />#header 主体部分{height:89px;background:#3399CC}<br />#header div.lc 左背景图{background:url(temp1/hdl.jpg) no-repeat}<br />#header div.rc 右背景图{background:url(temp1/hdr.jpg) no-repeat top right}<br />#header div.tit 空间名称{top:8px;left:20px;line-height:22px;font-size:20px;font-family:黑体}<br />#header div.tit a.titlink 空间名称链接{color:#FFFFFF;text-decoration:none}<br />#header div.tit a.titlink:visited{color:#FFFFFF;text-decoration:none}<br />#header div.desc 空间简介{top:33px;left:20px;color:#FFFFFF;font-size:13px}<br />#tabline TAB菜单下方的横线{top:89px;background-color:#FFFFFF}<br />#tab TAB菜单主体{top:67px;background:url(temp1/tabbg.gif) repeat-x}<br />#tab a.on,#tab a.on:link,#tab a.on:visited TAB选中状态{margin-top:3px;border-left:1px solid<br />#FFFFFF;border-right:1px solid #FFFFFF;border-top:1px solid #FFFFFF;line-<br />height:19px;background-color:#F3F1F1;color:#197CAE;font-size:14px}<br />#tab span TAB与TAB之间的分割符“|”{color:#FFFFFF;font-size:14px}<br />#tab a:link TAB未选中状态{color:#FFFFFF;text-decoration:none;font-size:14px}<br />#tab a:visited{color:#FFFFFF;text-decoration:none;font-size:14px}<br />#tab2 设置TAB菜单主体{background:#DAE9F5}<br />#tab2 span TAB选中状态{color:#000000;font-size:12px;font-weight:bold}<br />#tab2 a TAB未选中状态{font-size:12px}<br />#tab2 a:link{color:#0000CC}<br />#tab2 a:visited{color:#0000CC} <br />--------------------------------------------------------------------------------<br />.stage 内容区域（TAB菜单与版权信息之间的区域）{background:#F3F1F1}<br />其它区域（即访问量等信息）<br />#comm_info 主体{color:#333333;font-family:Arial;text-align:left}<br />#comm_info div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}<br />#comm_info a 链接{color:#3399CC}<br />--------------------------------------------------------------------------------<br />页码区域<br />#page 主体{height:30px;font-size:14px;font-family:Arial;text-align:center}<br />#page span 当前页码（不可点击）{padding:3px;color:#000000;font-size:14px;font-weight:bold}<br />#page a.pc 上一页和下一页{color:#3399CC;font-size:14px;font-weight:bold}<br />#page a.pc:visited{color:#3399CC}<br />#page a.pi 页码（可点击）{padding:3px;color:#3399CC;font-size:14px}<br />#page a.pi:visited{color:#3399CC}<br />--------------------------------------------------------------------------------<br />模块<br />.mod {margin-bottom:10px}<br />.modhandle{cursor:move}<br />.modth 模块标题栏主体{height:24px}<br />.modhead{padding:4px 4px 0 4px}<br />.modopt 模块操作区（如写新文章）{padding:4px 4px 0 0}<br />.modtit 模块标题区（如文章列表）{color:#FFFFFF;font-size:12px;font-weight:bold}a.modtit<br />{color:#FFFFFF}a.modtit:visited{color:#FFFFFF}<br />.modtitlink{color:#FFFFFF;font-size:12px;font-weight:bold}a.modtitlink{color:#FFFFFF;text-<br />decoration:none}a.modtitlink:visited{color:#FFFFFF;text-decoration:none}a.modtitlink:hover<br />{color:#FF5100;text-decoration:underline}<br />.modact 操作文字链接（如文章列表）{color:#FFFFFF;font-size:12px}a.modact:link<br />{color:#FFFFFF}a.modact:visited{color:#FFFFFF}<br />.modbox 模块内容区{padding:10px 10px 0 10px;background-color:#FFFFFF}<br />.modtl 模块左上角背景{background:url(temp1/ptitl.gif) no-repeat top left;line-height:1px}<br />.modtc 模块中上背景{background:url(temp1/ptitc.gif) repeat-x}<br />.modtr 模块右上角背景{background:url(temp1/ptitr.gif) no-repeat top right;line-height:1px}<br />.modbl 模块左下角背景{background-color:#FFFFFF;line-height:1px}<br />.modbc 模块中下背景{background-color:#FFFFFF;line-height:1px}<br />.modbr 模块右下角背景{background-color:#FFFFFF;line-height:1px}<br />--------------------------------------------------------------------------------<br />文章区域<br />#m_blog div.tit 文章标题{font-size:14px;font-weight:bold}<br />#m_blog div.tit a 文章标题链接{color:#333333;font-size:14px;font-weight:bold}<br />#m_blog div.tit a:visited{color:#333333}<br />#m_blog div.date 文章发表日期{margin:5px 0 8px 0;color:#666666}<br />#m_blog div.cnt 文章内容{color:#333333;line-height:20px;font-size:14px}<br />#m_blog div.more{margin:14px 0 16px 0}<br />#m_blog div.more a 阅读全文链接{color:#3399CC;font-size:14px}<br />#m_blog div.more a:visited{color:#3399CC}<br />#m_blog div.opt 文章操作区（如编辑、评论等）{color:#666666;font-size:12px}<br />#m_blog div.opt a 文章操作链接{color:#3399CC;font-size:12px}<br />#m_blog div.opt a:visited{color:#3399CC}<br />#m_blog div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}<br />#m_blog div.none 无文章提示信息{padding:100px 0 100px 0;color:#333333;font-size:14px}<br />--------------------------------------------------------------------------------<br />个人档案区域<br />#m_pro a 链接{color:#3399CC}<br />#m_pro a:visited{color:#3399CC}<br />#m_pro div.image 个人头像{text-align:center}<br />#m_pro div.act 操作区（如加为好友、发送消息）{margin-top:10px}<br />#m_pro div.user 用户名{margin-top:10px;color:#333333;font-size:12px;font-weight:bold}<br />#m_pro div.desc 用户简介{color:#333333;font-size:12px}<br />#m_pro div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}<br />#m_pro td{color:#333333;line-height:24px;font-size:14px}<br />--------------------------------------------------------------------------------<br />相册区域<br />#m_album div.image 照片{text-align:center}<br />#m_album div.page {color:#666666;font-size:12px;text-align:center}<br />#m_album div.page a{color:#0000CC;font-size:12px}<br />#m_album div.page a:visited{color:#0000CC}<br />--------------------------------------------------------------------------------<br />友情链接区域<br />#m_links div.item 子项{color:#333333;font-size:12px}<br />#m_links div.item a 名称（链接）{color:#3399CC;font-size:12px;text-decoration:none}<br />#m_links div.item a:visited{color:#3399CC}<br />#m_links div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />文章分类<br />#m_artclg div.item 子项{color:#666666;font-size:12px}<br />#m_artclg div.item a 分类名称（链接）{color:#3399CC;font-size:12px}<br />#m_artclg div.item a:visited{color:#3399CC}<br />#m_artclg div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />最新评论区域<br />#m_comment div.item 子项{color:#333333;font-size:12px}<br />#m_comment div.item a 发表人（链接）{color:#3399CC;font-size:12px}<br />#m_comment div.item a:visited{color:#3399CC}<br />#m_comment div.item a.cnt 评论摘要（链接）{color:#333333;font-size:12px;text-<br />decoration:none}<br />#m_comment div.item a.cnt:visited{color:#333333;text-decoration:none}<br />#m_comment div.item a.cnt:hover{color:#333333;text-decoration:underline}<br />#m_comment div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />相册列表<br />#m_albumlist div.note{color:#333333;font-size:14px}<br />#m_albumlist div.desc 简介{margin-bottom:12px;padding:3px 10px 3px 10px;line-<br />height:22px;background-color:#F2F2F2;font-size:14px}<br />#m_albumlist div.none 无照片提示信息{padding:100px 0 100px 0;color:#333333;font-size:14px}<br />#m_albumlist div.line 分界线{margin-top:10px;line-height:16px;border-top:1px solid #D2E9F4}<br />#m_albumlist div.tit 照片标题{margin:6px 0 7px 0;color:#333333;font-size:14px}<br />#m_albumlist div.tit a 照片标题链接{color:#3399CC;font-size:14px}<br />#m_albumlist div.tit a:visited{color:#3399CC}<br />#m_albumlist span.count 照片数量{color:#666666;font-size:12px;font-weight:bold}<br />#m_albumlist span.size 照片尺寸{color:#999999;font-size:12px;font-family:Arial}<br />#m_albumlist a.act 操作区链接（如编辑、删除）{color:#3399CC;font-size:12px}<br />#m_albumlist a.act:visited{color:#3399CC}<br />#m_albumlist a.page 页码链接{color:#0000CC;font-size:14px}<br />#m_albumlist a.page:visited{color:#0000CC}<br />#m_albumlist td.image{padding:5px;border:1px solid #999999;background:#FFFFFF}<br />--------------------------------------------------------------------------------<br />好友列表<br />#m_friend div.filter{margin-bottom:10px;padding-left:10px;padding-<br />top:10px;height:27px;line-height:27px}<br />#m_friend div.catalog{margin-bottom:10px;padding-left:10px;height:27px;line-<br />height:27px;background-color:#F2F2F2;font-size:14px}<br />#m_friend div.user{margin-top:4px;color:#333333;font-size:12px}<br />#m_friend div.user a 好友名称（链接）{color:#3399CC;font-size:12px}<br />#m_friend div.user a:visited{color:#3399CC}<br />#m_friend div.line 分界线{margin-top:10px;line-height:16px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />设置访问统计、模板设置<br />#m_setting a 链接{color:#3399CC}<br />#m_setting a:visited{color:#3399CC}<br />#m_setting 主体{line-height:22px;color:#333333;font-size:14px}<br />#m_setting img.sel 模板预览图（选中状态）{border:4px solid #FFDB7B}<br />#m_setting img.unsel 模板预览图（未选中状态）{border:1px solid #D2D2D2}<br />#m_setting span.tit 模板标题名称{font-size:14px}<br />#m_setting span.usr 作者名{color:#666666}<br />#m_setting div.sel “当前模板”文字{padding-top:6px;font-size:14px;font-weight:bold}<br />#m_setting div.line 分界线{margin-top:20px;line-height:16px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />系统公告<br />#m_sysinfo a 链接{color:#3399CC}<br />#m_sysinfo a:visited{color:#3399CC}<br />#m_sysinfo 主体{line-height:22px;color:#333333;font-size:14px}<br />#m_sysinfo span.new 最新{color:#FF0000;font-size:10px;font-family:Arial}<br />#m_sysinfo span.date 发布时间{color:#666666;font-size:14px}<br />--------------------------------------------------------------------------------<br />基本选项<br />#m_setbase 主体{color:#333333;font-size:14px}<br />#m_setbase td{color:#333333;font-size:14px}<br />#m_setbase div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}<br />--------------------------------------------------------------------------------<br />网友评论<br />#in_comment 主体{width:710px}<br />#in_comment div.tit 标题{margin-bottom:12px;color:#333333;font-size:14px;font-weight:bold}<br />#in_comment div.user 发表人名{margin-bottom:6px;color:#333333;font-size:12px}<br />#in_comment div.user a 发表人名（链接）{color:#3399CC;font-size:12px}<br />#in_comment div.user a:visited{color:#3399CC}<br />#in_comment div.user span.date 发表时间{color:#666666;font-size:12px}<br />#in_comment div.desc 评论内容{color:#333333;font-size:12px}<br />#in_comment div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}<br /><br /><br />TrackBack: <a href="http://www.mboba.com/art/517_16.htm">http://www.mboba.com/art/517_16.htm</a><img src ="http://www.blogjava.net/waterjava/aggbug/81192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-15 10:59 <a href="http://www.blogjava.net/waterjava/archive/2006/11/15/81192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>resin与servlet2.4版本问题</title><link>http://www.blogjava.net/waterjava/archive/2006/11/13/80884.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Mon, 13 Nov 2006 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/13/80884.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/80884.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/13/80884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/80884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/80884.html</trackback:ping><description><![CDATA[
		<p>启动时出现：<br /><br />Specification   version   2.3   of   package   javax.servlet,   Java   API   for   Servlets,   ver   <br />  on   2.3   is   not   compatible   with   Resin   3.0.*.     Resin   3.0.*   requires   version   2.4.   <br /><br />解决办法：<br /><br />下载tomcat最新版本，把c:\tomcat\common\lib下的servlet-api.jar,servlet.jar放在classpath 下，注意，servlet-api.jar要放在前面，servlet.jar放在后面，否则出现以上错误，重新启动resin，问题解决。</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/80884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-13 13:43 <a href="http://www.blogjava.net/waterjava/archive/2006/11/13/80884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache2.0.49与Tomcat5.0.19整合</title><link>http://www.blogjava.net/waterjava/archive/2006/11/06/79303.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 22:33:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/06/79303.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79303.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/06/79303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79303.html</trackback:ping><description><![CDATA[
		<table cellspacing="1" cellpadding="4" width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top">
										<div class="content">
												<span class="postbody">软件下载载址 <br /><a href="http://java.sun.com/j2se" target="_blank">http://java.sun.com/j2se</a><br /><a href="http://www.apache.org/dist" target="_blank">http://www.apache.org/dist</a><br />假设所有的下载文件全部放在/tmp下 <br />软件环境 <br />· RedHat Linux 9.0 <br />· Jakarta-tomcat-5.0.19.tar.gz <br />· Jakarta-tomcat-connnectors-jk2-src-current.tar.gz <br />· Httpd-2.0.19 <br />· J2sdk-1_4_2_04-linux-i586-rpm.bin <br />或 <br />· RedHat Linux 9.0 <br />· Jakarta-tomcat-4.1.30。tar.gz <br />· Jakarta-tomcat-connnectors-4.1.30-src.tar.gz <br />· Httpd-2.0.19 <br />· J2sdk-1_4_2_04-linux-i586-rpm.bin <br />在以上两种环境中测试成功 <br />要求 <br />三个虚拟主机分别对应三种不同服务，每一个虚拟主机都能对请求作出正确响应. <br />这个例了中，我的IP地址是10.0.0.10,对应的三个虚拟主机和所对目录如下 <br />www.home.net /var/www/homenet(默认主机) <br />www.customer1.it /var/www/customer1it <br />www.customer2net /var/www/customer2net <br /><br />安装 JDK <br />注意: 下载jdk, 而非 jre! <br />[user@host tmp]#chmod 755 j2sdk-1_4_2_04-linux-i586-rpm.bin[user@host tmp]#./j2sdk-1_4_2_04-linux-i586-rpm.bin <br />[user@host tmp]#rpm -ivh j2sdk-1_4_2_04-fcs-linux-i586.rpm <br /><br />j2sdk被自动安装在/usr/java目录下 <br /><br />[user@host tmp]#cp –R /usr/java/j2sdk1.4.2_04 /usr/local/sdk <br /><br />也可以建立符号连接至/usr/java/j2sdk1.4.2_04/ 这里为了方便，我就直接copy至/usr/local/sdk了.. <br />(或[user@host tmp]#ln –s /usr/java/j2sdk1.4.2_04 /usr/local/sdk) <br /><br />现在告诉你的 bash shell 去哪里查找 java : 在 /etc/profile.d目录下 创建一个名为java.sh 的文件,内容如下： <br /><br />[user@host] ~ $ vi /etc/profile.d/java.sh # set java environment <br /><br />export JAVA_HOME=/usr/local/sdk <br />export PATH=$PATH:$JAVA_HOME/bin <br />export CLASSPATH=$JAVA_HOME/lib <br /><br />保存，并改变文件权限: <br />确定 java.sh 可被任何用户读写: <br />[user@host] ~ $ #chmod 755 /etc/profile.d/java.sh <br />[user@host] ~ $ which java /usr/local/sdk/bin/java <br /><br />使用which java可以得到java安装路径. <br />如果你已安装好java,可以忽略这一步. <br /><br />安装 Apache <br />下载最新的apache版本，并安装和编译: <br /><br />[user@host]#tar zxvf httpd-2.0.49.tar.gz <br />[user@host]#cd httpd-2.0.49 <br />[user@host]#./configure <br />--prefix=/usr/local/apache2 //指定apache安装目录 <br />--enable-modules=so //以动态模式加载apache <br />[user@host]#make <br />[user@host]#make install <br /><br />千万不要忘了—enable-module=so,因为加载apache-tomcat connector时要用到. <br />使用下面命令启动apachce <br />[user@host] ~ $ #/usr/local/apache2/bin/apachectl start <br />打开浏览器查看apache 服务是否正常启动.http://localhost <br />一般可看到版本号，apache默认使用80端口 <br />安装 Tomcat <br />下载jakarta-tomcat，并安装. <br />[user@host tmp] ~ $ tar zxvf Jakarta-tomcat-5.0.19.tar.gz[user@host tmp] ~ $cp Jakarta-tomcat-5.0.19-src /usr/local/tomcat启动tomcat: [user@host tmp] ~ $ /usr/local/tomcat/bin/startup.sh <br /><br />使用tomcat目录下的 bin/startup.sh 和 shutdown.sh 来启动和停止 tomcat.在浏览器里用 http://localhost:8080 查看 tomcat 是否正常启动.如果不能启动，查看 /usr/local/tomcat/conf/ catalina.out 日志文件，直至可以启动. <br />#########下面这段是我在测试过程中遇到的问题############### <br />如果不能启动，可能是用户权限不够试增加用户或更改权限看看 <br />groupadd tomcat //增加组 <br />useradd -g tomcat -c "Tomcat User" -d /usr/local/tomcat tomcat <br />passwd tomcat <br />chown -R tomcat:tomcat /usr/local/tomcat <br />chmod a+x /usr/local/tomcat <br /><br /><br />配置 Tomcat 监听来自Apache 的ajp13 请求 <br /><br />下面是一个 server.xml 配置文件的例子. 请注意目录和日志文件的位置是任何的。你可以根据你的需要更改主目录和日志文件的位置. <br />//以下是配置虚拟主机的server.xml文件(这里我用的是5.0.19的server.xml文件,4.1.30也大致相同 <br /><br />vi /usr/local/tomcat/conf/server.xml <br /><br /><br />&lt;Server port="8005" shutdown="SHUTDOWN" debug="0"&gt; <br />&lt;GlobalNamingResources&gt; <br />########................这部份全局配置文件，为了方便我就省略了.............###### <br />########这部份在两个版里都不需要更改########### <br /><br />&lt;/GlobalNamingResources&gt; <br /><br /><br />Define the Tomcat Stand-Alone Service --&gt; <br />&lt;Service name="Catalina"&gt; <br />###########中间省略了,这部份在两个版里也都不需要更改########### <br /><br />&lt;!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --&gt; <br />&lt;Connector port="8080" <br />maxThreads="150" minSpareThreads="25" maxSpareThreads="75" <br />enableLookups="false" redirectPort="8443" acceptCount="100" <br />debug="0" connectionTimeout="20000" <br />disableUploadTimeout="true" /&gt; <br />#########省略中................... <br />&lt;!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --&gt; <br />&lt;Connector port="8009" <br />enableLookups="false" redirectPort="8443" debug="0" <br />protocol="AJP/1.3" /&gt; <br />................. <br />&lt;!-- Define the top level container in our container hierarchy --&gt; <br /><br />##########从engine 开始定义默认主机了######## <br />########defaulthost可指定任一主机，这里我用www.home.net <br />&lt;Engine name="Catalina" defaultHost="www.home.net" debug="0"&gt; <br />#########省略下面定义虚拟主机..................... <br /><br />&lt;!-- Define the default virtual host <br />Note: XML Schema validation will not work with Xerces 2.2. <br />--&gt; <br />##########定义虚拟主机,更改host name为你的主机名####### <br />#########更改appBase为你主机对应的路径############# <br />&lt;Host name="www.home.net" debug="0" appBase="/var/www/homenet" <br />unpackWARs="true" autoDeploy="true" <br />xmlValidation="false" xmlNamespaceAware="false"&gt; <br /><br />#########定义别名.................. <br />&lt;Alias&gt;localhost &lt;/Alias&gt; <br />&lt;Alias&gt;10.0.0.10/Alias&gt; <br />#########..context path为空，docbase为空.########### <br />&lt;Context path="" docBase="" debug="0" reloadable="true" crossContext="true"&gt; <br /><br />########定义日志位置########################### <br />&lt;logger className="org.apache.catalina.logger.FileLogger" <br />directory="logs" prefix="home_log." suffix=".txt" <br />timestamp="true"/&gt; <br /><br />&lt;/Host&gt; <br /><br /><br />#########定义第二个虚拟主机www.customer1.it######### <br /><br />&lt;Host name="www.customer1.it" debug="0" <br />appBase="/var/www/customer1it" <br />unpackWARs="true" autoDeploy="true"&gt; <br /><br />&lt;Context path="" docBase="" debug="0"/&gt; <br /><br />&lt;logger className="org.apache.catalina.logger.FileLogger" <br />directory="logs" prefix="cust1_log." suffix=".txt" <br />timestamp="true"/&gt; <br /><br />&lt;/Host&gt; <br /><br />&lt;Host name="www.customer2.net" debug="0" <br />appBase="/var/www/customer2net" <br />unpackWARs="true" autoDeploy="true"&gt; <br /><br />&lt;Context path="" docBase="" debug="0"/&gt; <br /><br />&lt;logger className="org.apache.catalina.logger.FileLogger" <br />directory="logs" prefix="cust2_log." suffix=".txt" <br />timestamp="true"/&gt; <br /><br />&lt;/Host&gt; <br /><br />&lt;/Engine&gt; <br /><br />&lt;/Service&gt; <br /><br /><br />上面是一个server.xml配置的最低要求. <br />试试重启tomcat,并检查catalina.out 文件直至tomcat 可以正确启动.如果启动中系统报告找到不apr 可以试编辑 <br /><br />/usr/local/tomcat/conf/jk2.properties 并加入以下内容: <br />vi /usr/local/tomcat/conf/jk2.properties <br /># list of needed handlers. <br />handler.list=channelSocket,request <br /># Override the default port for the channelSocket <br />channelSocket.port=8009 <br /><br />如果启动正常，那么就可以进入下一步了. <br /><br />配置apache虚拟主机 <br />apahce虚拟主机怎么配置可查看apache howto文档 <br /><a href="http://httpd.apache.org/docs-2.0/vhosts/" target="_blank">http://httpd.apache.org/docs-2.0/vhosts/</a><br /><br /><br />配置 Apache to talk to Tomcat <br />下载和你的apache 版本对应的jk2 文件至/tmp目录下. 如果找不到对应的jk2版本,可以通过 the tomcat-user 邮件列表询问或下载源文件并自己编译(这个怎么做这里就不多说了) <br />[user@host tmp] # tar zxvf Jakarta-tomcat-connectors-jk2-src-current.tar.gz <br />[user@host tmp] # cd Jakarta-tomcat-connectors-jk2.0.4-src <br />[user@host tmp] # cp –R Jakarta-tomcat-connectors-jk2-2.0.4-src /usr/local/jk2 <br />[user@host tmp]#cd /usr/local/jk2/jk/native2 <br />[user@host tmp]./buildconf.sh <br />[user@host tmp]./configure <br />--with-apxs2=/usr/local/apache2/bin/apxs //apache2使用apxs2 <br />--with-tomcat=/usr/local/tomcat <br /><br />[user@host]make <br /><br />[user@host]cd /usr/local/jk2/jk/build/jk2/apache2 //可看到mod_jk2.so <br />[user@host]cp mod_jk2.so /usr/local/apache2/modules/mod_jk2.so <br /><br /><br />在/usr/local/apache2/conf 目录下建立一个名为workers2.properties 的文件，并编辑此文件，内容如下: <br /># only at beginnin. In production uncomment it out <br />[logger.apache2] <br />level=DEBUG <br /><br />[shm] <br />file=/usr/local/apache/logs/shm.file <br />size=1048576 <br /><br /># Example socket channel, override port and host. <br />[channel.socket:localhost:8009] <br />port=8009 <br />host=127.0.0.1 <br /><br /># define the worker <br />[ajp13:localhost:8009] <br />channel=channel.socket:localhost:8009 <br /><br /># Uri mapping <br />[uri:127.0.0.1/*.jsp] <br />worker=ajp13:localhost:8009 <br /><br />[uri:10.0.0.10/*.jsp] <br />worker=ajp13:localhost:8009 <br /><br />[uri:www.home.net/*.jsp] <br />worker=ajp13:localhost:8009 <br /><br />[uri:www.customer1.it/*.jsp] <br />worker=ajp13:localhost:8009 <br /><br />[uri:www.customer2.net/*.jsp] <br />worker=ajp13:localhost:8009 <br />编辑这个文件，改变你所需要的IP地址或域名，并保存 . <br />编辑 http.conf 并在Modules section 加入下面一行: <br />LoadModule jk2_module modules/mod_jk2.so <br />保存 http.conf 重起 apache. 现在它将加载jk2 连接器并从 workers2.properties 中读取配置文件. 检查日志并确认一切正常. <br />启动 tomcat 试，并在你的浏览器里试加载一个HTML 页r: apache 将返回一个没有问题的页。现在试一试jsp 页，它显示需要等待一段时间. 如果返回一个错误，你须检查一下路径和主机名是否正确。 (仔细检查DNS配置),tomcat和apache都将读取你所设的主机目录.检查日志文件. <br />所有工作正常进行下一步. <br /><br />中间有一个大约是tomcat的安全问题，这里就不说了 <br /><br />在 httpd.conf中的JK 指示 <br />除workers2.properties 文件名，你可以将Jk 指示加入 httpd.conf 文件 (就像你使用 jk 和 webapp 方式一样). 在 httpd.conf中编辑默认主机区域并在&lt;/VirtualHost&gt;之前，加入下面三行: <br />&lt;Location "/*.jsp"&gt; <br />JkUriSet worker ajp13:localhost:8009 <br />&lt;/Location&gt; <br />重启 Apache 测试. <br />至此，一切都配置完了 <br /><br /><br />附加：httpd.conf（vi /usr/local/apache2/conf/httpd.conf) <br /><br /><br /><br />### Section 1: Global Environment <br /><br /><br />#####前面都省略了................... <br /><br /><br /># Dynamic Shared Object (DSO) Support <br />##在动态模块区################这里加入mod_jk2.so <br /><br />LoadModule jk2_module modules/mod_jk2.so <br /><br /><br />### Section 2: 'Main' server configuration <br />.......................... <br />##########更改默认主机名################# <br />ServerName www.home.com <br />UseCanonicalName Off <br />##############更改默认主机路径 <br />DocumentRoot "/var/www/homenet" <br /><br /><br />#############加入默认首面index.jsp............... <br />DirectoryIndex index.html index.jsp <br /><br />#&lt;Location /server-info&gt; <br /># SetHandler server-info <br /># Order deny,allow <br /># Deny from all <br /># Allow from .example.com <br />#&lt;/Location&gt; <br />###########在默认主机加上这面这段，##### <br />&lt;Location "/*.jsp"&gt; <br />JkUriSet worker ajp13:localhost:8009 <br />&lt;/Location&gt; <br /><br /><br />### Section 3: Virtual Hosts <br />#############配置虚拟主机########### <br /><br /><br />NameVirtualHost 10.0.0.10 <br /><br />&lt;VirtualHost 10.0.0.10&gt; <br />ServerName www.home.net <br />ServerAlias www <br />ServerAlias localhost <br /><br />ServerAlias 10.0.0.10 <br /><br />ServerAdmin sysmaster@arpa.veneto.it <br />DocumentRoot /var/www/homenet <br /><br />ErrorLog logs/home.net-errorlog <br />CustomLog logs/home.net.log common <br /><br />###########下面这段我是都加了，不知道只加在一个地方会怎么样，没测过 <br />#####在默认虚拟主机未尾加入如下######## <br /><br />&lt;Location "/*.jsp"&gt; <br />JkUriSet worker ajp13:localhost:8009 <br />&lt;/Location&gt; <br />&lt;/VirtualHost&gt; <br /><br />&lt;VirtualHost 10.0.0.10&gt; <br />ServerName www.customer1.it <br />ServerAdmin sysmaster@arpa.veneto.it <br />DocumentRoot /var/www/customer1it <br />ErrorLog logs/cust1-errorlog <br />&lt;/VirtualHost&gt; <br /><br />&lt;VirtualHost *&gt; <br />ServerName www.customer2.net <br />ServerAdmin sysmaster@arpa.veneto.it <br />DocumentRoot /var/www/customer2net <br />ErrorLog logs/cust2-errorlog <br />&lt;/VirtualHost&gt; <br /><br />现在保存，重起所有的服务 <br /><br />测试是，可以分别copy /usr/local/tomcat/webapps下的文件到三个虚拟主机目录下，默认首页里有很多jsp,serlet例子，可以随便测试</span>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/waterjava/aggbug/79303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-06 06:33 <a href="http://www.blogjava.net/waterjava/archive/2006/11/06/79303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache与Tomcat的整合</title><link>http://www.blogjava.net/waterjava/archive/2006/11/06/79302.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 22:31:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/06/79302.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79302.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/06/79302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79302.html</trackback:ping><description><![CDATA[Tomcat是Sun和Apache合作产生出来的JSP Server, 它支持Servlet 和JSP. Tomcat本身可以作为Web Server, 当处理静态页面时,Tomcat不如Apache迅速,不象Apache一样可配置. Apache作为最流行的Web服务器,它功能强大,高效,但并不支持JSP及servlet,所以通常的做法是把它们整合起来,让Apache处理静态页面,而把动态页面的请求交给Tomcat处理,发挥各自的优势. 通过在Apache中加载整合模块和进行设置，Apache就能够根据URL，把不属于自己的请求转给Tomcat. 要让Apache和Tomcat联合工作,还必需有一个连接器(connector)把它们联系起来. Connector对于性能、配置的方便性有很重要的影响,目前大致上有JK1.x,JK2, mod_webapp三种connector可以使用.JK使用比较广泛.JK2是JK1.x的改进，比较新。这三种Connector的配置方法大相径庭,在参考别人的整合方法时一定要注意. 另外,Tomcat是用Java写的,所以你的系统必须有JDK或JRE. 我的OS是Solaris9,用到的版本分别是Apache 2.0.47 ; Tomcat 5.0.27 ; Jk2 2.0.4; J2sdk 1.4.2_05.<br /><br />现在开始: 好了,先去下载要用到了软件,它们都是for free的. Apache ,Tomcat ,Jk2在Apache的官方网站上都可以下的到. http://www.apache.org JDK 在Sun的网站上. http://www.sun.com 以下是我下载到的: httpd-2.0.47.tar.gz jakarta-tomcat-5.0.27.tar.gz jakarta-tomcat-connectors-jk2-src-current.tar.gz j2sdk-1_4_2_05-solaris-sparc.tar.Z (32bit的, 先安装这 个再安装下面64bit的) j2sdk-1_4_2_05-solaris-sparcv9.tar.Z(最后两个是Solaris的Package,对于其他的系统下可用,不过可以下载相应的版本.) 安装Apache 对于Apache的安装,有很多帖子都介绍过, 安装时注意一点:一定要有 --enable-so 加载so模块,这是整合要用到的. gzip –d httpd-2.0.47.tar.gz tar xvf httpd-2.0.47.tar cd httpd-2.0.47 ./configure – with-layout=Apache2 -prefix=/path to install directory -enable-so make make install 好了,Apache的安装完成了.<br /><br />我的安装目录是/usr/local/apahce2.修改apache的http.conf ServerName name OfYourServer Group nogroup 进入/usr/local/apache2/bin 执行 ./apachectl start 启动apache (./apachectl stop 停止) 如果成功,通过浏览器就可以看到Apche的默认主页了 http://ServerIp (httpd –l 可以列出已经加载的模块) 安装JDK Java是SUN开发的,所以它在自家的OS上预装了java的运行环境. java -version 可以看到java的版本号.Soaris9是1.4.1_01a uncompress j2sdk-1_4_2_05-solaris-sparc.tar.Z tar xvf j2sdk-1_4_2_05-solaris-sparc.tar 解压后得到几个SUNW开头的文件,把它们放到一个目录下 先要将以前的java包删除! pkgrm SUNWj3dmo SUNWj3man SUNWj3dev SUNWj3rt pkgrm SUNWlj3dv SUNWlj3rt (如果有的话,pkginfo | grep SUNWj3 查看) 添加新包, pkgadd –d ./ (在刚才放解压的几个SUNW目录) 再安装64bit的包, 同样 uncompress j2sdk-1_4_2_05-solaris-sparcv9.tar.Z tar xvf j2sdk-1_4_2_05-solaris-sparcv9.tar pkgadd –d ./ 好了,安装完了. <br /><br />java –version ,看版本号变了! 详细的说明,参考SUN网站上的文档! 安装Tomcat 在安装Tomcat之前,要设置两个环境变量: JAVA_HOME =/usr/j2se CLASSPATH =/usr/j2se/lib:/usr/j2se/jre/lib (这是针对Solaris9的,Solaris8 /usr/java1.2; Solaris7 /usr/java1.1) (其他的系统下,是你安装JDK的目录) export JAVA_HOME CLASSPATH 有了,这两个变量,Tomcat才能安装. jakarta-tomcat-5.0.27.tar.gz 是个二进制文件解压后解可用. 我把它解压到了,/usr/local/ src/jakarta-tomcat-5.0.27 建一个链接 ln –s /usr/local/ src/jakarta-tomcat-5.0.27 /usr/local/tomcat 这样以后升级就方便了,刚才的apache也应该这么做. 设置相应的变量: CATALINA_HOME=/usr/local/tomcat CATALINA_BASE=/usr/local/tomcat export CATALINA_HOME CATALINA_BASE 进入/usr/local/tomcat/bin ./startup.sh 启动tomcat 通过浏览器 http://SeverIP:8080 看到了一只猫!(5.0才有吧,4.X没看到) port 8080 是Tomcat的默认端口 安装JK2 如果以上安装顺利的话,继续安装JK2吧 先解压到/usr/local/src下得到了, jakarta-tomcat-connectors-jk2-2.0.4-src 进入目录, cd jk/native2 ./buildconf.sh (我没成功,跳过了) ./configure&amp;--with-apxs2=/usr/local/apache2/bin/apxs&amp; make make install (如果不成功,把mod_jk2.so&amp;拷贝到Apache得modules下) cp&amp;jk/build/jk2/apache2/mod_jk2.so&amp; /usr/local/apache2/modules 还有一个jkjni.so&amp;,说是用来启动Apache 时自动启动Tomcat的,如果就也拷贝吧.我没有看到! cp&amp;jk/build/jk2/apache2/jkjni.so&amp;/usr/local/apache2/modules 整合 步入正题了,整合涉及到了4个配置文件 Apache 的 httpd.conf 和 workers2.properties (创建) Tomcat 的 server.xml 和 jk2.properties (不过这两个文件,我没改过也成功了) &amp;httpd.conf 在Apache中添加mod_jk2.so模块: LoadModule&amp;jk2_module&amp;modules/mod_jk2.so workers2.properties: 这是我的workers2.properties #&amp;Example&amp;socket&amp;channel,&amp;override&amp;port&amp;and&amp;host [channel.socket:localhost:8009] port=8009 host=127.0.0.1 #&amp;define&amp;the&amp;worker [ajp13:localhost:8009] channel=channel.socket:localhost:8009 #&amp;Uri&amp;mapping [uri:/jsp-examples/*] worker=ajp13:localhost:8009 好了,重启Apache和Tomcat http://ServerIp/jsp-examples 如果看到的效果和 http://ServerIp:8080/jsp-examples 一样就说明整合成功. <img src ="http://www.blogjava.net/waterjava/aggbug/79302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-06 06:31 <a href="http://www.blogjava.net/waterjava/archive/2006/11/06/79302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的时间操作</title><link>http://www.blogjava.net/waterjava/archive/2006/11/06/79300.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 22:29:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/06/79300.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79300.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/06/79300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79300.html</trackback:ping><description><![CDATA[出处：<a href="http://www.chinabs.net/webj2ee/default.asp?infoid=400">http://www.chinabs.net/webj2ee/default.asp?infoid=400</a><br /><br /><br />经常看见jsp版里有人问时间操作的问题，这些问题一般包括：取当前时间，把一个指定的字符串时间转化成时间类型，求两个时间之间的天数，求一段时间以前的时间，求一段时间以后的时间，在这里就把这些问题汇总一下。<br />&lt;%@  page  contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.text.*"%&gt;<br />&lt;%@ page import="java.util.*"%&gt;<br />&lt;%<br />//字符串转化成时间类型（字符串可以是任意类型，只要和SimpleDateFormat中的格式一致即可）<br />java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);<br />java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");  <br />out.println(d);<br />out.println("&lt;br&gt;");<br />SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />String mDateTime1=formatter.format(d);<br />out.println(mDateTime1);<br />out.println("&lt;br&gt;");<br />out.println(d.getTime());<br />out.println("&lt;br&gt;");<br />//当前时间<br />Calendar cal  = Calendar.getInstance();<br />//  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");<br />SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss G E D F w W a E F");<br />String mDateTime=formatter.format(cal.getTime());<br />out.println(mDateTime);<br />out.println("&lt;br&gt;");<br />//1年前日期<br />java.util.Date myDate=new java.util.Date();  <br />long myTime=(myDate.getTime()/1000)-60*60*24*365;<br />myDate.setTime(myTime*1000);<br />String mDate=formatter.format(myDate);<br />out.println(mDate);<br />out.println("&lt;br&gt;");<br />//明天日期<br />myDate=new java.util.Date(); <br />myTime=(myDate.getTime()/1000)+60*60*24;<br />myDate.setTime(myTime*1000);<br />mDate=formatter.format(myDate);<br />out.println(mDate);<br />out.println("&lt;br&gt;");<br />//两个时间之间的天数<br />SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");<br />java.util.Date date= myFormatter.parse("2003-05-1"); <br />java.util.Date mydate= myFormatter.parse("1899-12-30");<br />long  day=(date.getTime()-mydate.getTime())/(24*60*60*1000);<br />out.println(day);<br />out.println("&lt;br&gt;");<br />//加半小时<br />SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");<br />java.util.Date date1 = format.parse("2002-02-28 23:16:00");<br />long Time=(date1.getTime()/1000)+60*30;<br />date1.setTime(Time*1000);<br />String mydate1=formatter.format(date1);<br />out.println(mydate1);<br />out.println("&lt;br&gt;");<br />//年月周求日期<br />SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");<br />java.util.Date date2= formatter2.parse("2003-05 5 星期五"); <br />SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");<br />String mydate2=formatter3.format(date2);<br />out.println(mydate2);<br />out.println("&lt;br&gt;");<br />//求是星期几<br />mydate= myFormatter.parse("2001-1-1");<br />SimpleDateFormat formatter4 = new SimpleDateFormat("E");<br />String mydate3=formatter4.format(mydate);<br />out.println(mydate3);<br />out.println("&lt;br&gt;");<br />%&gt; <img src ="http://www.blogjava.net/waterjava/aggbug/79300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-06 06:29 <a href="http://www.blogjava.net/waterjava/archive/2006/11/06/79300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JSP实现一个日历程序</title><link>http://www.blogjava.net/waterjava/archive/2006/11/06/79299.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 22:28:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/06/79299.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79299.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/06/79299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79299.html</trackback:ping><description><![CDATA[
		<table width="90%" align="center" border="0">
				<tbody>
						<tr>
								<td class="text9pt">出处：<a href="http://www.chinabs.net/webj2ee/default.asp?infoid=257">http://www.chinabs.net/webj2ee/default.asp?infoid=257</a><br /><table align="right" border="0"><tbody><tr><td width="100%" height="10"><script language="javascript" src="http://usms.tom.com/wlqy_flash.js?tomuserid=9247"></script></td></tr></tbody></table><br />&lt;!-- 显示任意年、月的日历，可选择不同的年、月。author:wildfield --&gt; <br />&lt;%@ page language="java" import="java.util.*" %&gt; <br />&lt;%! String year; <br />  String month; <br />%&gt; <br />&lt;% month=request.getParameter("month"); <br />  year =request.getParameter("year"); <br />%&gt; <br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;title&gt;日&lt;/title&gt; <br />&lt;script Language="JavaScript"&gt; <br />&lt;!-- <br />function changeMonth() <br />{ <br />var mm="calendar.jsp?month="+document.sm.elements[0].selectedIndex+"&amp;year=" <br />+&lt;%=year%&gt;; <br />window.open(mm,"_self"); <br />} <br />//--&gt;&lt;/script&gt; <br />&lt;/head&gt; <br />&lt;%! String days[]; %&gt; <br />&lt;% <br />days=new String[42]; <br />for(int i=0;i&lt;42;i++) <br /> { <br />  days[i]=""; <br /> } <br />%&gt; <br />&lt;% <br />Calendar thisMonth=Calendar.getInstance(); <br /> if(month!=null&amp;&amp;(!month.equals("null"))) <br />  thisMonth.set(Calendar.MONTH, Integer.parseInt(month) ); <br /> if(year!=null&amp;&amp;(!year.equals("null"))) <br />  thisMonth.set(Calendar.YEAR, Integer.parseInt(year) ); <br /> year=String.valueOf(thisMonth.get(Calendar.YEAR)); <br />month=String.valueOf(thisMonth.get(Calendar.MONTH)); <br />thisMonth.setFirstDayOfWeek(Calendar.SUNDAY); <br />thisMonth.set(Calendar.DAY_OF_MONTH,1); <br />int firstIndex=thisMonth.get(Calendar.DAY_OF_WEEK)-1; <br />int maxIndex=thisMonth.getActualMaximum(Calendar.DAY_OF_MONTH); <br />for(int i=0;i&lt;maxIndex;i++) <br /> { <br />  days[firstIndex+i]=String.valueOf(i+1); <br /> } <br />%&gt; <br />&lt;body&gt; <br />&lt;FORM name="sm" method="post" action="calendar.jsp"&gt; <br />  &lt;%=year%&gt;年  &lt;%=Integer.parseInt(month)+1%&gt;月 <br />&lt;table border="0" width="168" height="81"&gt; <br />&lt;div align=center&gt; <br /> &lt;tr&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;&lt;font color="red"&gt;日&lt;/font&gt; <br />&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;一&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;二&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;三&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;四&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;五&lt;/th&gt; <br />   &lt;th width="25" height="16" bgcolor="#FFFF00"&gt;&lt;font color="green"&gt;六&lt;/fon <br />t&gt;&lt;/th&gt; <br /> &lt;/tr&gt; <br />&lt;% for(int j=0;j&lt;6;j++) { %&gt; <br />&lt;tr&gt; <br />     &lt;% for(int i=j*7;i&lt;(j+1)*7;i++) { %&gt; <br />    &lt;td width="15%" height="16" bgcolor="#C0C0C0" valign="middle" align="ce <br />nter"&gt; <br />    &lt;a href="jump.jsp?year=&lt;%=year%&gt;&amp;month=&lt;%=Integer.parseInt(month)+1%&gt;&amp;d <br />ate=&lt;%=days[i]%&gt;" target="main"&gt;&lt;%=days[i]%&gt;&lt;/a&gt;&lt;/td&gt; <br />   &lt;% }  %&gt; <br /> &lt;/tr&gt; <br />&lt;% }  %&gt; <br />&lt;/div&gt; <br />&lt;/table&gt; <br />&lt;table border="0" width="168" height="20"&gt; <br />&lt;tr&gt; <br /> &lt;td width=30%&gt;&lt;select name="month" size="1" onchange="changeMonth()" &gt; <br />   &lt;option value="0"&gt;一月&lt;/option&gt; <br />   &lt;option value="1"&gt;二月&lt;/option&gt; <br />   &lt;option value="2"&gt;三月&lt;/option&gt; <br />   &lt;option value="3"&gt;四月&lt;/option&gt; <br />   &lt;option value="4"&gt;五月&lt;/option&gt; <br />   &lt;option value="5"&gt;六月&lt;/option&gt; <br />   &lt;option value="6"&gt;七月&lt;/option&gt; <br />   &lt;option value="7"&gt;八月&lt;/option&gt; <br />   &lt;option value="8"&gt;九月&lt;/option&gt; <br />   &lt;option value="9"&gt;十月&lt;/option&gt; <br />   &lt;option value="10"&gt;十一月&lt;/option&gt; <br />   &lt;option value="11"&gt;十二月&lt;/option&gt; <br /> &lt;/select&gt;&lt;/td&gt; <br />&lt;td width=28%&gt;&lt;input type=text name="year" value=&lt;%=year%&gt; size=4 maxlength <br />=4&gt;&lt;/td&gt; <br />&lt;td&gt;年&lt;/td&gt; <br />&lt;td width=28%&gt;&lt;input type=submit value="提交"&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/FORM&gt; <br />&lt;script Language="JavaScript"&gt; <br />&lt;!-- <br /> document.sm.month.options.selectedIndex=&lt;%=month%&gt;; <br />//--&gt; <br />&lt;/script&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;   </td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/waterjava/aggbug/79299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-06 06:28 <a href="http://www.blogjava.net/waterjava/archive/2006/11/06/79299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GBK-&gt;Unicode</title><link>http://www.blogjava.net/waterjava/archive/2006/11/05/79212.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/05/79212.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79212.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/05/79212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79212.html</trackback:ping><description><![CDATA[把特定编码文件信息的文件转换为Unicode编码的文件：<br />c:\jdk1.5\bin\&gt; native2ascii -encoding GBK a.txt &gt; custMessages_zh.properties<img src ="http://www.blogjava.net/waterjava/aggbug/79212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-05 17:03 <a href="http://www.blogjava.net/waterjava/archive/2006/11/05/79212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA混淆编译工具总汇</title><link>http://www.blogjava.net/waterjava/archive/2006/11/05/79183.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/05/79183.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79183.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/05/79183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79183.html</trackback:ping><description><![CDATA[
		<p>
				<font face="宋体">现在企业中用java作为开发语言的越来越多，但是代码的安全问题也很严重，对java的代码保护最常用的策略是对代码进行混淆编译，有很多工具可以供大家选择。</font>
		</p>
		<p>
		</p>
		<table>
				<tbody>
						<tr>
								<th>Author/Company</th>
								<th>Program</th>
								<th>Shrinking</th>
								<th>Obfuscation</th>
								<th>License</th>
						</tr>
						<tr>
								<td>
										<a href="http://www.graphics.cornell.edu/~eric/" target="other">Eric Lafortune</a>
								</td>
								<td>
										<a href="http://proguard.sourceforge.net/" target="other">ProGuard</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (GPL)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html" target="other">Jochen Hoenicke</a>
								</td>
								<td>
										<a href="http://jode.sourceforge.net/" target="other">Jode</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (GPL)</td>
						</tr>
						<tr>
								<td>
										<a href="http://sourceforge.net/users/hchacha/" target="other">Hidetoshi Ohuchi</a>
								</td>
								<td>
										<a href="http://jarg.sourceforge.net/" target="other">Jarg</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (BSD)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.nq4.de/" target="other">NQ4</a>
								</td>
								<td>
										<a href="http://www.nq4.de/" target="other">Joga</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (no source)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html" target="other">Alexander Shvets</a>
								</td>
								<td>
										<a href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html" target="other">CafeBabe</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.cs.cornell.edu/nystrom/" target="other">Nate Nystrom</a>
								</td>
								<td>
										<a href="http://www.cs.purdue.edu/homes/hosking/bloat/" target="other">Bloat</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<br />
								</td>
								<td>Free</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.riggshill.com/" target="other">RiggsHill Software</a>
								</td>
								<td>
										<a href="http://genjar.sourceforge.net/" target="other">GenJar</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<br />
								</td>
								<td>Free (Apache)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.retrologic.com/" target="other">RetroLogic</a>
								</td>
								<td>
										<a href="http://www.retrologic.com/" target="other">RetroGuard</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (LGPL)</td>
						</tr>
						<tr>
								<td>
										<a href="http://sourceforge.net/users/glurk/" target="other">Thorsten Heit</a>
								</td>
								<td>
										<a href="http://sourceforge.net/projects/javaguard/" target="other">JavaGuard</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (LGPL)</td>
						</tr>
						<tr>
								<td>
										<a href="http://mwobfu.sourceforge.net/" target="other">Patrick Mueller</a>
								</td>
								<td>
										<a href="http://mwobfu.sourceforge.net/" target="other">Mwobfu</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (GPL)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.utdallas.edu/~gxz014000/" target="other">Bajie</a>
								</td>
								<td>
										<a href="http://www.utdallas.edu/~gxz014000/jcmp/" target="other">JCMP</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.yworks.com/" target="other">yWorks</a>
								</td>
								<td>
										<a href="http://www.yworks.com/en/products_yguard_about.htm" target="other">yGuard</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.drjava.de/" target="other">Dr. Java</a>
								</td>
								<td>
										<a href="http://www.drjava.de/obfuscator/" target="other">Marvin Obfuscator</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Free (no source)</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.alphaworks.ibm.com/" target="other">IBM AlphaWorks</a>
								</td>
								<td>
										<a href="http://www.alphaworks.ibm.com/tech/jax/" target="other">JAX</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.preemptive.com/" target="other">PreEmptive</a>
								</td>
								<td>
										<a href="http://www.preemptive.com/products.html" target="other">DashOPro</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.zelix.com/" target="other">Zelix</a>
								</td>
								<td>
										<a href="http://www.zelix.com/klassmaster/index.html" target="other">KlassMaster</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.s5systems.com/" target="other">S5 Systems</a>
								</td>
								<td>
										<a href="http://www.s5systems.com/jPresto.htm" target="other">jPresto</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.codingart.com/" target="other">CodingArt</a>
								</td>
								<td>
										<a href="http://www.codingart.com/codeshield.html" target="other">CodeShield</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.plumbdesign.com/" target="other">Plumb Design</a>
								</td>
								<td>
										<a href="http://www.condensity.com/" target="other">Condensity</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.e-t.com/" target="other">Eastridge Technology</a>
								</td>
								<td>
										<a href="http://www.e-t.com/jshrink.html" target="other">Jshrink</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.helseth.com/" target="other">Helseth</a>
								</td>
								<td>
										<a href="http://www.helseth.com/HJO.htm" target="other">JObfuscator</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.leesw.com/" target="other">LeeSoftware</a>
								</td>
								<td>
										<a href="http://www.leesw.com/" target="other">Smokescreen Obfuscator</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.vegatech.com/" target="other">Vega Technologies</a>
								</td>
								<td>
										<a href="http://www.vegatech.com/jzipper/" target="other">JZipper</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.uni-vologda.ac.ru/~c3c/" target="other">Sergey Sverdlov</a>
								</td>
								<td>
										<a href="http://www.uni-vologda.ac.ru/~c3c/jco/" target="other">J.Class Optimizer</a>
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td align="middle">
										<br />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.force5.com/" target="other">Force 5</a>
								</td>
								<td>
										<a href="http://www.force5.com/" target="other">JCloak</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.wingsoft.com/" target="other">WingSoft</a>
								</td>
								<td>
										<a href="http://www.wingsoft.com/wingguard.html" target="other">WingGuard</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.jammconsulting.com/" target="other">JAMM Consulting</a>
								</td>
								<td>
										<a href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage" target="other">ObfuscatePro</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.2lkit.com/" target="other">2LKit</a>
								</td>
								<td>
										<a href="http://www.2lkit.com/products/2LKitObf/index.htm" target="other">2LKit Obfuscator</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
						<tr>
								<td>
										<a href="http://www.duckware.com/" target="other">Duckware</a>
								</td>
								<td>
										<a href="http://www.duckware.com/jobfuscate/" target="other">Jobfuscate</a>
								</td>
								<td align="middle">
										<br />
								</td>
								<td align="middle">
										<img height="11" alt="x" src="http://www.zahui.com/html/6/checkmark.gif" width="11" />
								</td>
								<td>Commercial</td>
						</tr>
				</tbody>
		</table>
		<br />出处：<a href="http://www.zahui.com/html/6/11879.htm">http://www.zahui.com/html/6/11879.htm</a><img src ="http://www.blogjava.net/waterjava/aggbug/79183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-05 12:19 <a href="http://www.blogjava.net/waterjava/archive/2006/11/05/79183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unicode是什么，UTF-8是什么</title><link>http://www.blogjava.net/waterjava/archive/2006/11/03/78856.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 03 Nov 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/03/78856.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/78856.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/03/78856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/78856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/78856.html</trackback:ping><description><![CDATA[一直在编码方面要求不是很高，所以对Unicode和UTF-8也不甚了解。<br />　　最近偶然翻到一篇UTF-8的文章，感觉解释的非常繁杂，因此才想到重新写一篇简单易懂一点的。 
<p><br />　　首先说明一下现在常用的一些编码方案：<br />　　１、在中国，大陆最常用的就是GBK18030编码，除此之外还有GBK，GB2312，这几个编码的关系是这样的。<br />最早制定的汉字编码是GB2312，包括6763个汉字和682个其它符号<br />95年重新修订了编码，命名GBK1.0，共收录了21886个符号。<br />之后又推出了GBK18030编码，共收录了27484个汉字，同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字，现在WINDOWS平台必需要支持GBK18030编码。</p><p>按照GBK18030、GBK、GB2312的顺序，３种编码是向下兼容，同一个汉字在三个编码方案中是相同的编码。</p><p>　　２、台湾，香港等地使用的是BIG5编码<br />　　３、日本：SJIS编码</p><p>　　如果把各种文字编码形容为各地的方言，那么Unicode就是世界各国合作开发的一种语言。<br />　　在这种语言环境下，不会再有语言的编码冲突，在同屏下，可以显示任何语言的内容，这就是Unicode的最大好处。</p><p>　　那么Unicode是如何编码的呢？其实非常简单。<br />　　就是将世界上所有的文字用２个字节统一进行编码。可能你会问，２个字节最多能够表示65536个编码，够用吗？<br />　　韩国和日本的大部分汉字都是从中国传播过去的，字型是完全一样的。<br />　　比如：“文”字，GBK和SJIS中都是同一个汉字，只是编码不同而已。<br />　　那样，像这样统一编码，２个字节就已经足够容纳世界上所有的语言的大部分文字了。</p><p>　　Unicode的学名是"Universal Multiple-Octet Coded Character Set"，简称为UCS。<br />　　现在用的是UCS-2，即２个字节编码，而UCS-4是为了防止将来２个字节不够用才开发的。UCS-2也称为基本多文种平面。<br />　　UCS-2转换到UCS-4只是简单的在前面加２个字节0。<br />　　UCS-4则主要用于保存辅助平面，例如Unicode 4.0中的第二辅助平面<br />　　20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF - 　　26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF <br />　　总共增加了16个辅助平面，由原先的65536个编码扩展至将近100万编码。</p><p>　　那么既然统一了编码，如何兼容原先各国的文字编码呢？<br />　　这个时候就需要codepage了。<br />　　什么是codepage？codepage就是各国的文字编码和Unicode之间的映射表。<br />　　比如简体中文和Unicode的映射表就是CP936，点这里查看官方的映射表。</p><p>　　以下是几个常用的codepage，相应的修改上面的地址的数字即可。<br />codepage=936 简体中文GBK<br />codepage=950 繁体中文BIG5<br />codepage=437 美国/加拿大英语<br />codepage=932 日文<br />codepage=949 韩文<br />codepage=866 俄文<br />codepage=65001 unicode UFT-8</p><p>最后一个65001，据个人理解，应该只是一个虚拟的映射表，实际只是一个算法而已。</p><p>从936中随意取一行，例如：<br />0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH<br />前面的编码是GBK的编码，后面的是Unicode。<br />通过查这张表，就能简单的实现GBK和Unicode之间的转换。</p><p></p><p>　　现在明白了Unicode，那么UTF-8又是什么呢？又为什么会出现UTF-8呢？</p><p>　　ASCII转换成UCS-2，只是在编码前插入一个0x0。用这些编码，会包括一些控制符，比如 或 /，这在UNIX和一些C函数中，将会产生严重错误。因此可以肯定，UCS-2不适合作为Unicode的外部编码。</p><p>　　因此，才诞生了UTF-8。那么UTF-8是如何编码的？又是如何解决UCS-2的问题呢？</p><p>例：<br />E4 BD A0　　　　　　　　11100100 10111101 10100000<br />这是“你”字的UTF-8编码<br />4F 60　　　　　　　　　　01001111 01100000<br />这是“你”的Unicode编码</p><p>按照UTF-8的编码规则，分解如下：xxxx0100 xx111101 xx100000<br />把除了x之外的数字拼接在一起，就变成“你”的Unicode编码了。<br />注意UTF-8的最前面３个1，表示整个UTF-8串是由３个字节构成的。<br />经过UTF-8编码之后，再也不会出现敏感字符了，因为最高位始终为1。</p><p>以下是Unicode和UTF-8之间的转换关系表：<br />U-00000000 - U-0000007F: 0xxxxxxx<br />U-00000080 - U-000007FF: 110xxxxx 10xxxxxx<br />U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx<br />U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<br />U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx<br />U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx</p><p>Unicode编码转换到UTF-8,简单的把Unicode字节流套到x中就变成UTF-8了。 <br /><br /><br />出处：<a href="http://www.ii8888.com/Article_View.asp?id=871">http://www.ii8888.com/Article_View.asp?id=871</a></p><img src ="http://www.blogjava.net/waterjava/aggbug/78856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-03 10:07 <a href="http://www.blogjava.net/waterjava/archive/2006/11/03/78856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中如何正确使用字体编码</title><link>http://www.blogjava.net/waterjava/archive/2006/11/01/78500.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 01 Nov 2006 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/01/78500.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/78500.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/01/78500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/78500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/78500.html</trackback:ping><description><![CDATA[
		<p>
				<br />在Java编程中，中文字体编码难倒了不少程序员，如果抓住了影响Java中文显示的几个关键因素，问题将迎刃而解。 <br />Java是目前最流行的面向对象的编程语言之一，Java支持UTF-8、ISO-8859-1、GBK等各种字体编码，可笔者发现Java中字体编码的问题仍难倒了不少程序员，网上虽然也有不少关于在Java中如何正确显示中文的文章，但都不够全面，笔者特意总结如下。 <br />影响Java中字体编码正确显示的有几个因素: 1)数据库的连接方式; 2)网页中使用的字体编码; 3)数据库里存放数据的字体编码; 4)Java的缺省字体编码。如果在编程中遇到不能正确显示中文时，要先弄清楚以上几项所使用的字体编码，再分析找出原因，即可解决问题。 <br />众所周知，JSP是Java的一种，和网页有关，而网页也有自己的中文编码系统，所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2，数据库连接驱动是用org.gjt.mm.mysql.Driver，这里主要讨论UTF-8和GBK的显示( GB2312是GBK的一个子集，Java中可以使用GBK来代替GB系列)。我们先来研究JSP中字体编码问题， 下面第一到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别，咱们分别说明，前三点是从读取数据库到显示在网页，后三点是从网页输入数据到存入数据库)，第七到第九点针对纯Java的类文件。 以下rs表示ResultSet的一个实例，是执行Select语句之后产生的数据集。 <br />一、数据库连接方式使用UTF-8 <br />在连接数据库的驱动后面加上这句参数useUnicode=true&amp;characterEncoding= <br />UTF-8，例如jdbc:mysql://localhost/DBVF?autoReconnect=true&amp;useUnicode= <br />true&amp;characterEncoding=UTF-8，从数据库里读出中文显示在使用GBK的JSP的网页里，如果数据库里存放的字体编码是UTF-8，在JSP中使用 str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1)，可以正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")来显示正确的中文。值得注意的是如果页面使用UTF-8，数据库里存放的是UTF-8，也可以用str=new String(rs.getBytes(1),"GBK")正确显示中文。如果网页是UTF-8，而数据库里存放的是GBK，无法直接显示中文，需要2步转换, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK")，才可以正确显示中文。 <br />二、数据库连接方式使用GBK <br />在连接数据库的驱动后面加上这句参数useUnicode=true&amp;characterEncoding= <br />GBK,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&amp;UseUnicode=true&amp; <br />characterEncoding=GBK，从数据库里读出中文，显示在使用GBK的JSP的网页里，如果数据库里存放的字体编码是UTF-8，在JSP中一定要使用 str=new String(rs.getBytes(1),"UTF-8")，才正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK") 或者直接使用str=rs.getString(1)，即可显示正确的中文。 如果网页是UTF-8，而数据库里存放的是GBK，只能用str=new String(rs.getString(1).getBytes("UTF-8"),"GBK")的方法来显示中文; 如果网页是UTF-8，而数据库里存放的是UTF-8，可用str=new String(rs.getBytes(1),"GBK") 或者rs.getString(1)方法来显示中文。 <br />三、使用缺省数据库连接方式 <br />连接数据库的驱动后面没有这句参数useUnicode=&amp;characterEncoding=，例如jdbc:mysql://localhost/DBVF?autoReconnect=true，没有参数useUnicode=true&amp;characterEncoding，表示使用默认的ISO-8895-1编码。 <br />1. 从数据库里读出中文，显示在GBK的网页里。如果数据库里存放的字体编码是UTF-8，在JSP网页中一定要使用语句 str=new String(rs.getBytes(1),"UTF-8") 或者str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8")，才可正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")或str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK") 显示正确的中文。 <br />2. 如果网页是UTF-8,不能直接正确显示GBK，需要2步转换，str=new String(rs.getBytes(1),"GBK")，再str=new String(str.getBytes("UTF-8"),"GBK") 才可以正确显示中文。如果数据库里存的是UTF-8，直接用str=new String(rs.getBytes(1),"GBK")或者str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")就可以显示中文了。 <br />以上是读取数据库里中文正确显示在网页上，下面三点是如何正确存入数据库。 <br />四、数据库连接方式使用UTF-8编码 <br />JSP中要把网页输入的中文存入数据库，通常有一个提交(Submit)的过程，是用str=request.getParameter("username")，然后执行update或者insert语句来存入数据库。如何赋值给str很重要，而且这里中文输入与网页所使用的字体编码有关。 <br />1、 网页使用UTF-8，使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")或者str= new String(request.getParameter("username").getBytes(),"UTF-8")，都可以使得存到数据库里的数据是UTF-8编码。 <br />2. 网页使用GBK，使用str= new String(request.getParameter("username").getBytes(),"GBK")，那么存入数据库的是UTF-8编码。 <br />3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK。 <br />五、数据库连接方式使用GBK编码 <br />1. 输入使用GBK网页，存到数据库里是GBK的方法: str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"GBK")。 <br />2. 网页使用GBK，想存入UTF-8到数据库里，要分2步: 先str=new String(request.getParameter("username").getBytes(),"GBK")，再str=new String(str.getBytes("UTF-8"),"GBK")即可。 <br />3. 网页使用UTF-8，而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"UTF-8")，那么存到数据库里的数据是UTF-8编码。 <br />4. 网页使用UTF-8，而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")，那么存到数据库里的数据是GBK编码。 <br />六、数据库连接方式使用缺省，即不使用参数useUnicode和characterEncoding <br />1. 网页使用GBK，如果使用str= request.getParameter("username")或者str= new String(request.getParameter("username").getBytes())，那么在数据库里的数据是GBK码。网页使用UTF-8 和使用str= request.getParameter("username")，则存入数据库是UTF-8编码。 <br />2. 如果使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"))，那么根据网页提供的字体编码而存到数据库里，比如是UTF-8的网页，那么存到数据库中就是UTF-8编码，如果使用GBK网页，那么存到数据库里的字就是GBK编码。 <br />3. 如果使用str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8")这一种组合能存到正确的数据外，其他存到数据库里的数据则都是乱码或者错误码。在这个UTF-8组合的特例中，网页使用的是GBK，则存放到数据库里就是GBK，网页使用UTF-8，那么存到数据库里的就是UTF-8。 <br />4. 网页是GBK的要存得UTF-8，一定需要2步: company=new String(request.getParameter("company").getBytes(),"GBK")和company=new String(company.getBytes("UTF-8"))。 <br />5. 网页是UTF-8的，不能存得GBK在数据库里，一句话，改变数据库连接方式不能存得GBK码。 <br />以上所有的都是基于JSP网页和数据库交换数据，下面讨论一下纯JAVA编程下的字体编码转换。 <br />七、数据库连接方式使用UTF-8编码 <br />1. 数据库里的中文是UTF-8，可以转换为GBK,但不能把GBK存入数据库。 <br />2. 数据库是GBK，如果转换为UTF-8，使用content=new String(rs.getBytes(2),"GBK")直接将content存入数据库就可为UTF-8。 <br />八、数据库连接方式使用GBK编码 <br />1. 数据库里的中文是UTF-8，如果转换为GBK，使用content= new String(rs.getString(2).getBytes(),"UTF-8"),再直接使用update或者insert语句插入到数据库，即存得GBK。如果使用content= new String(rs.getString(2).getBytes(),"GBK")或者content= new String(rs.getString(2).getBytes())，再存入数据库即存得还是UTF-8编码。 <br />2. 数据库里的中文是GBK，如果转换为UTF-8，使用content= new String(rs.getString(2).getBytes("UTF-8"))或者content= new String(rs.getString(2).getBytes("UTF-8"),"GBK")，再直接使用update或者insert语句插入到数据库,即存得UTF-8。 <br />3. 如果某个String是GBK，要转换为UTF-8，也是使用content= new String(GBKstr.getBytes("UTF-8"))或者content= new String(GBKstr.getBytes("UTF-8"),"GBK"); 如果某个String是UTF-8，要转换为GBK，应该使用new String(UTFstr.getBytes("GBK"),"UTF-8")。 <br />九、数据库连接方式使用缺省,即不跟参数 <br />1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1")，可以将数据库里的GBK编码转换为UTF-8。 <br />2. 读取UTF-8然后存入UTF-8，则用str1=new String(UTFstr.getBytes(),"ISO-8859-1")或者str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1")。 <br />3. 不能实现数据库里的UTF-8转换为GBK。 <br />如果采用UTF-8的数据库连接方式或者缺省数据连接方式，那么无法将UTF-8转为GBK；而GBK的数据库连接方式可以实现UTF-8和GBK的相互转换。建议大家采用GBK的数据连接方式。出处：<a href="http://www.ccw.com.cn/cio/research/info/htm2005/20051118_13GHU.asp">http://www.ccw.com.cn/cio/research/info/htm2005/20051118_13GHU.asp</a></p>
<img src ="http://www.blogjava.net/waterjava/aggbug/78500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-01 16:43 <a href="http://www.blogjava.net/waterjava/archive/2006/11/01/78500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何得到汉字的unicode编码？</title><link>http://www.blogjava.net/waterjava/archive/2006/11/01/78484.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 01 Nov 2006 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/01/78484.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/78484.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/01/78484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/78484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/78484.html</trackback:ping><description><![CDATA[
		<font size="2">在jdk的bin目录如：D:\j2sdk1.4.2\bin&gt;<br />在cmd模式下键入：<br />D:\j2sdk1.4.2\bin&gt;native2ascii<br />然后打汉字，回车就会出现unicode的编码了</font>
<img src ="http://www.blogjava.net/waterjava/aggbug/78484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-01 16:01 <a href="http://www.blogjava.net/waterjava/archive/2006/11/01/78484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把class打包成jar文件</title><link>http://www.blogjava.net/waterjava/archive/2006/10/25/77109.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 25 Oct 2006 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/10/25/77109.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/77109.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/10/25/77109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/77109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/77109.html</trackback:ping><description><![CDATA[在java开发中，经常要引用到另一路径的包。可先把总路径打成一个jar包，再放在classpath中，就可编译了。<br /><br />jar cvf mybean.jar cn<br /><br />mybean.jar=文件名<br />cn=总路径 下面可能有路径a1,a2,a3等。<br /><img src ="http://www.blogjava.net/waterjava/aggbug/77109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-10-25 08:57 <a href="http://www.blogjava.net/waterjava/archive/2006/10/25/77109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 5.0.28的问题</title><link>http://www.blogjava.net/waterjava/archive/2006/10/12/74879.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 12 Oct 2006 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/10/12/74879.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/74879.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/10/12/74879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/74879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/74879.html</trackback:ping><description><![CDATA[
		<p>1.配置成首页的问题<br /><br />          &lt;Logger className="org.apache.catalina.logger.FileLogger"<br />                 directory="logs"  prefix="localhost_log." suffix=".txt"<br />            timestamp="true"/&gt;<br />        这里增加：<br />         &lt;Context path="" docBase="C:/Tomcat/webapps/myweb" debug="0" reloadable="true" crossContext="true"/&gt;<br /><br />  要说的是myweb/web-inf/web.xml的文件最好改下名，我的从weblogic转过来，看了很多论坛，因为这里没改名，一直错误，还不知道怎回事，改了名就好了，该是冲突问题。<br /><br />2. 乱码问题<br /><br />如果你没有乱码，不用看，有了乱码，你就成乱麻，总得要解决，现在论坛有说这，有说那，只要解决了你的难题的，就是好方案。<br /><br />我的问题时，从数据库中读出没乱码，写入出现乱码，我的方案是：<br /><br />(1).在filters中做个SetCharacterEncodingFilter.java的bean文件。<br /><br />package filters;</p>
		<p>import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />import javax.servlet.UnavailableException;</p>
		<p>public class SetCharacterEncodingFilter implements Filter{<br />protected String encoding = null;<br />protected FilterConfig filterConfig = null;<br />protected boolean ignore = true;</p>
		<p>public void destroy() {<br /> this.encoding = null;<br /> this.filterConfig = null;<br />}</p>
		<p>public void doFilter(ServletRequest request, ServletResponse response,<br />FilterChain chain)<br />throws IOException, ServletException {</p>
		<p>// Conditionally select and set the character encoding to be used<br />if (ignore || (request.getCharacterEncoding() == null)) {<br /> String encoding = selectEncoding(request);<br /> if (encoding != null)<br />   request.setCharacterEncoding(encoding);<br />}</p>
		<p>// Pass control on to the next filter<br />chain.doFilter(request, response);<br />}</p>
		<p>public void init(FilterConfig filterConfig) throws ServletException {</p>
		<p>this.filterConfig = filterConfig;<br />this.encoding = filterConfig.getInitParameter("encoding");<br />String value = filterConfig.getInitParameter("ignore");<br />if (value == null)<br />this.ignore = true;<br />else if (value.equalsIgnoreCase("true"))<br />this.ignore = true;<br />else if (value.equalsIgnoreCase("yes"))<br />this.ignore = true;<br />else<br />this.ignore = false;<br />}</p>
		<p>protected String selectEncoding(ServletRequest request) {<br />return (this.encoding);<br />}<br />}<br /><br />编译上段代码时，要在classpath中注册servlet.jar文件。<br />(2).在web.xml中引入：<br /><br />&lt;filter&gt;<br />　&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />　&lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />　&lt;init-param&gt;<br />　　&lt;param-name&gt;encoding&lt;/param-name&gt;<br />　　&lt;param-value&gt;GBK&lt;/param-value&gt;<br />　&lt;/init-param&gt;<br />&lt;/filter&gt;</p>
		<p>&lt;filter-mapping&gt;<br />　&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />　&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br /><br />(3)在server.xml中修改<br /><br />                port="8080"  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               debug="0" connectionTimeout="20000" <br />               disableUploadTimeout="true" URIEncoding="ISO-8859-1" /&gt;<br /><br />     有种说法是把URIEncoding="ISO-8859-1"可换成URIEncoding="GBK"，自己测试，对的就是硬道理。<br /><br />最后顺便说下mysql-connector-java-5.0.3-bin.jar的jdbc连接代码，与以前低版本的不一样。<br /><br />String sDBDriver="com.mysql.jdbc.Driver";<br />String sConnStr="jdbc:mysql://localhost:3306/gain?user=root&amp;password=password";<br /><br /><br /></p>
<img src ="http://www.blogjava.net/waterjava/aggbug/74879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-10-12 23:08 <a href="http://www.blogjava.net/waterjava/archive/2006/10/12/74879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐几个Eclipse常用经典插件</title><link>http://www.blogjava.net/waterjava/archive/2006/05/12/45792.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 12 May 2006 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/05/12/45792.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/45792.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/05/12/45792.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/45792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/45792.html</trackback:ping><description><![CDATA[CSS插件：http://csseditor.sourceforge.net <br />JS和AS插件：http://sourceforge.net/projects/jseditor <br />XML插件：http://xmlbuddy.com <br />正则表达式测试插件：http://brosinski.com/stephan/archives/000028.php <br />XPath测试插件：http://www.purpletech.com/xpe/index.jsp <br />更多Eclipse插件：http://eclipse-plugins.2y.net/eclipse/index.jsp<img src ="http://www.blogjava.net/waterjava/aggbug/45792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-05-12 10:44 <a href="http://www.blogjava.net/waterjava/archive/2006/05/12/45792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中实现国际化</title><link>http://www.blogjava.net/waterjava/archive/2006/05/10/45332.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 10 May 2006 00:30:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/05/10/45332.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/45332.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/05/10/45332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/45332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/45332.html</trackback:ping><description><![CDATA[
		<p>实现国际化 <br />　　由于要实现中英日文的显示，采取以下步骤：<br /><br />　　开发和编译代码时指定字符集为UTF-8。Eclipse可以在项目属性中设置。 使用过滤器，如果所有请求都经过一个Servlet控制分配器，那么使用Servlet的filter执行语句，将所有来自浏览器的请求（request）转换为UTF-8，因为浏览器发过来的请求包根据浏览器所在的操作系统编码，可能是各种形式编码。request.setCharacterEncoding("UTF-8")。需要配置web.xml 激活该Filter。在JSP头部声明： <br /><br />&lt;%@ page contentType="text/html;charset= UTF-8" %&gt;。<br /><br />　　在Jsp的html代码中，声明UTF-8:<br /><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt; <br /><br />　　设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下：<br />jdbc:mysql://localhost:3306/feedback_db?useUnicode=true&amp;amp;characterEncoding=UTF-8<br />其他和外界交互时能够设定编码时就设定UTF-8，例如读取文件，操作XML等。 </p>
		<p>不同时区时间显示 <br />　　由于客户端可能处于不同的时区，因此应该显示不同服务器时间。由于与客户端有关，因此需利用一段javaScript代码，从客户端获取其所在的时区偏移量。该偏移量是针对GMT时间而言的，也就是格林威治时间，以分钟为单位。 </p>
		<pre class="code">function getTimezone()
{ 
	var d = new Date();	
  document[getNetuiTagName("loginForm", this)][getNetuiTagName("timezone", this)].value=
    d.getTimezoneOffset(); 
  
}
</pre>
		<p>　　获取之后将他传回服务器端并保存在session中。显示时间时根据这个偏移量来计算显示的时间。 </p>
<img src ="http://www.blogjava.net/waterjava/aggbug/45332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-05-10 08:30 <a href="http://www.blogjava.net/waterjava/archive/2006/05/10/45332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决apache+weblogic中Connection_Refused错误的解决办法</title><link>http://www.blogjava.net/waterjava/archive/2006/04/29/43918.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 29 Apr 2006 00:29:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/29/43918.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/43918.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/29/43918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/43918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/43918.html</trackback:ping><description><![CDATA[
		<br />这是出现Apache桥错误的重要原因（第4条最重要）<br />解决办法如下：<br />1. 增加Weblogic Server中Accept Block的数值，默认值为50<br />   BEA提示以25%的速度进行增加，直到不出现Connection_Block的错误提示。//这里我将其调高至200<br />2. 设置Apache的Httpd.conf中，KeepAlive为On<br />3. 减小Windows 2000中TcpTimedWaitDelay时间，默认情况下为240（未设置的情况下也是这个数值）<br />   此项设置需要到注册表如下位置进行设置<br />   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay <br />   如果注册表中没有TcpTimedWaitDelay这个项目，BEA提示增加这个项目，并设置为双字节（DWORD）类型<br />   数值设置为30 ~ 240之间即可 //这里我将其设置为120<br />4.调整一下w2k的MaxUserPort<br />  默认情况下，系统提供的端口值在 1024 和 5000 之间。MaxUserPort 参数设置可以用于出站连接的最高端口值。要设置该数值，请定位到 HKEY_LOCALMACHINE\SYSTEM  \CurrentControlSet\Services\Tcpip\Parameters、如果该值尚不存在，则添加数值 MaxUserPort，并将其设置为 0xFFFE。<br />5.最好能有一个测试环境。在调整参数的时候，用一些压力测试工具对系统制造一些负载。通过观察系统的反应，来决定参数的调整。<br /><img src ="http://www.blogjava.net/waterjava/aggbug/43918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-29 08:29 <a href="http://www.blogjava.net/waterjava/archive/2006/04/29/43918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的Build工具—Ant应用指南</title><link>http://www.blogjava.net/waterjava/archive/2006/04/27/43513.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 27 Apr 2006 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/27/43513.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/43513.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/27/43513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/43513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/43513.html</trackback:ping><description><![CDATA[
		<p>本文以最新发布的Ant 1.5.1为例，介绍这款优秀的Build工具的安装配置、基本应用和一些高级话题。最新的Ant下载地址是 <a href="http://jakarta.apache.org/ant/" target="_blank"><font color="#002c99">http://jakarta.apache.org/ant/ </font></a>。 <br /><br />Ant是一种基于Java的Build工具。理论上来说，它有些类似于C中的make，但比make优越。现在存在的大多数Build工具，如make、gnumake、nmake、jam等都存在这样或那样的不足，比如依赖于特定的平台、配置文件过于复杂或者对格式无法检查而容易出错等。与这些工具相比较，Ant的两个特性决定了它是一款优秀的Build工具： <br /><br />1. 基于Java的实现。具有良好的跨平台性，同时可以通过增加新的Java类来扩展Ant的功能，而无需去了解不同平台上不同的脚本语言。 <br /><br />2.基于XML的配置文件。Ant以XML树来描述Target/Task的关系，文件结构清晰、易读易写，并且利用XML对格式的控制来避免由于配置文件的错误造成的Build操作失败。 <br /><br />安装与配置 <br /><br />Ant的安装非常简单，把从网上下载的jakarta-ant-1.5.1-bin.zip解开到一个目录下即可（以下假定安装在目录D:\jakarta-ant-1.5.1）。接下来需要进行环境变量配置： <br /><br /></p>
		<table cellspacing="0">
				<tbody>
						<tr>
								<td class="code">SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安装目录，不是bin子目录<br />SET PATH=%PATH%;%ANT_HOME%\bin;</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />在配置环境变量之前，请确认已经正确设置了JAVA_HOME系统变量。输入ant命令，看到如下输出说明已成功安装了Ant工具： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">Buildfile: build.xml does not exist!<br />Build failed</td></tr></tbody></table><br /><br />提示信息表明在当前目录不存在build.xml配置文件，但这本身已经说明Ant成功运行了。 <br /><br />快速入门 <br /><br />下面用一个最简单也是最经典的例子-HelloWorld来感受一下Ant吧。 <br /><br /><table cellspacing="0"><tbody><tr><td class="code">//HelloWorld.java<br />package com.sharetop.antdemo;<br />public class HelloWorld {<br />public static void main( String args[] ) {<br />System.out.println("Hello world. ");<br />}<br />}</td></tr></tbody></table><br /><br />要让Ant编译这个文件，首先需要编写一个Build配置文件。在一般情况下，这个文件被命名为build.xml。 <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;project name="HelloWorld" default="run" basedir="." &gt;<br />&lt;property name="src" value="src"/&gt;<br />&lt;property name="dest" value="classes"/&gt;<br />&lt;property name="hello_jar" value="hello.jar" /&gt;<br />&lt;target name="init"&gt;<br />&lt;mkdir dir="${dest}"/&gt;<br />&lt;/target&gt;<br />&lt;target name="compile" depends="init"&gt;<br />&lt;javac srcdir="${src}" destdir="${dest}"/&gt;<br />&lt;/target&gt;<br />&lt;target name="build" depends="compile"&gt;<br />&lt;jar jarfile="${hello_jar}" basedir="${dest}"/&gt;<br />&lt;/target&gt;<br />&lt;target name="run" depends="build"&gt;<br />&lt;java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/&gt;<br />&lt;/target&gt;<br />&lt;/project&gt;</td></tr></tbody></table><br /><br />来看一下这个文件的内容，它描述了以下信息：工程的名字为HelloWorld，工程有四个target，分别是init、compil、build和run，缺省是run。compile只有一个任务javac，源文件位于src目录下，输出的类文件要放在classes目录下。build的任务是jar，生成的jar文件为hello.jar，它打包时以classes为根目录。而run则是执行这个HelloWorld类，用hello.jar作为classpath。这四个target之间有一个依赖关系，这种关系用depends来指定。即如果Target A依赖于Target B，那么在执行Target A之前会首先执行Target B。所以从下面运行缺省Target（run）的输出看，这四个Target的执行顺序是：init→compile→build→run。文件目录结构如图1所示。HelloWorld.java文件在src\com\sharetop\antdemo子目录下。<br />在命令行输入命令：ant，然后运行，可以看到如下输出： <br /><br />如果配置文件名不是build.xml，比如是build_front.xml，那么，可以使用-buildfile命令参数指定： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">G:\myDoc\ant_demo&gt;ant -buildfile build_front.xml </td></tr></tbody></table><br /><br />也可以单独执行指定的某个target，比如，只编译不打包执行，可以使用下面输入命令即可： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">G:\myDoc\ant_demo&gt;ant compile </td></tr></tbody></table><br />在相应的目录下会找到编译出的HelloWorld.class文件。 <br /><br />再看看上面的build.xml配置文件，文件开头定义了3个属性，分别指定了源文件输出路径、类文件输出路径和生成的Jar文件名，后面对这些路径的引用都通过一个${property name}来引用。所以，要注意这样一个原则“目录的定义与目录的引用应该分开”。 <br />基本应用 <br /><br /><strong>建立工程的目录 </strong><br /><br />一般要根据工程的实际情况来建立工程的目录结构。但是，有一些比较通用的组织形式可供参考，比如所有的jakarta项目都使用类似的目录结构。下面让我们来看一下这种目录结构的特点。 <br /><br />表1 <br /><br /><table bordercolordark="#ffffff" border="1"><tbody><tr><td>目录 </td><td>文件 </td></tr><tr><td>bin </td><td>公共的二进制文件，以及运行脚本 </td></tr><tr><td>build </td><td>临时创建的文件，如类文件等 </td></tr><tr><td>dist </td><td>目标输出文件，如生成Jar文件等。 </td></tr><tr><td>doc/javadocs </td><td>文档。 </td></tr><tr><td>lib </td><td>需要导出的Java包 </td></tr><tr><td>src </td><td>源文件 </td></tr></tbody></table><br />对于一个简单的工程，一般包括表1的几个目录。其中bin、lib、doc和src目录需要在CVS的控制之下。当然在这样的目录结构上，也可以做一些调整，例如，可以建立一个extra目录来放置需要发布的Jar文件、Inf文件及图像文件等。同样，如果开发Web应用可以建立一个Web目录放置JSP、HTML等文件。 <br /><br />如果我们开发的是一个比较复杂的项目，包括多个子项目，并且各个子项目是由不同的开发人员来完成的，那么要如何来设计它的目录结构？首先有一点是需要确定的，不同的子项目应该拥有不同的Build文件，并且整个项目也应该有一个总的Build文件。可以通过Ant任务或是AntCall任务调用子项目的Build文件，如下例： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="core" depends="init"&gt;<br />&lt;ant dir="components" target="core"/&gt;<br />&lt;ant dir="waf/src" target="core"/&gt;<br />&lt;ant dir="apps" target="core"/&gt; <br />&lt;/target&gt;</td></tr></tbody></table><br /><br />在各个子项目的耦合不是非常紧密的情况下，各个子项目应该有各自独立的目录结构，也就是说它们可以有自己的src、doc、build、dist等目录及自己的build.xml文件，但是可以共享lib和bin目录。而对于那些耦合紧密的子项目，则推荐使用同一个src目录，但是不同的子项目有不同的子目录，各个子项目的build.xml文件可以放在根目录下，也可以移到各个子项目的目录下。 <br /><br /><strong>编写Build文件 </strong><br /><br />要用好Ant工具，关键是要编写一个build.xml文件。要编写出一个结构良好、灵活可扩展的Build文件，有两个问题要考虑，一是了解Build文件的基本结构，二是了解Ant定义的大量任务。 <br /><br />Ant的Build文件是一个标准的XML文件，它包含一个根节点Project，每个Project定义了至少一个或多个Target，每个Target又是一系列Task的集合。它们之间的关系如图2所示。<br />每个Task是一段可被执行的代码，比如，前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task，我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践，这方面最好的参考就是官方的Ant使用手册。 <br /><br /><strong>外部文件的使用 </strong><br /><br />使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。 <br /><br />可以将一个外部的XML文件导入Build文件中，这样多个项目的开发者可以通过引用来共享一些代码，同样，这也有助于Build文件的重用，示例代码如下所示： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;!DOCTYPE project [<br />&lt;!ENTITY share-variable SYSTEM "file:../share-variable.xml"&gt;<br />&lt;!ENTITY build-share SYSTEM "file:../build-share.xml"&gt;<br />]&gt;<br />&lt;project name="main" default="complie" basedir="."&gt;<br />&amp;share-variable;<br />&amp;build-share;<br />... ...</td></tr></tbody></table><br /><br />在J2EE项目中的应用 <br /><br />只要掌握了Ant的使用方法，在J2EE项目中的应用与在其它项目中的应用并没有太大的不同，但是仍有几点是需要注意的。 <br /><br />一是要清楚War和Jar文件的目录结构，主要是War的配置文件web.xml文件的位置和EJB的配置文件（ejb-jar.xml和weblogic-ejb-jar.xml等）的位置，在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务，比如在Weblogic中会调用ejbc预编译EJB的代码存根，或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务，一是扩展Ant任务实现这些任务，二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断，代码如下： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="deploy_HelloEJB" depends="compile"&gt;<br />&lt;delete dir="${temp}/ejb_make"/&gt; &lt;!-- 首先删除临时目录 --&gt;<br />&lt;delete file="${temp}/helloEJB.jar"/&gt;<br />&lt;!-- 删除WebLogic域中老版本的EJB --&gt;<br />&lt;delete file="${weblogic.deploy.dest}/helloEJB.jar"/&gt; <br />&lt;!-- 创建META-INF目录，放置ejb-jar.xml和weblogic-ejb-jar.xml --&gt;<br />&lt;mkdir dir="${temp}/ejb_make/META-INF"/&gt; <br />&lt;!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录--&gt;<br />&lt;copy todir="${temp}/ejb_make/META-INF"&gt;<br />&lt;fileset dir="etc/baseinfo"&gt;<br />&lt;include name="*.xml"/&gt;<br />&lt;/fileset&gt;<br />&lt;/copy&gt;<br />&lt;!-- 拷贝所有的helloEJB类到临时目录 --&gt;<br />&lt;copy todir="${temp}/ejb_make/"&gt;<br />&lt;fileset dir="${dest.classes}/"&gt; &lt;!-- dest.classes是输出的类文件目录 --&gt;<br />&lt;include name="${dest.classes}/helloEJB/**"/&gt;<br />&lt;/fileset&gt;<br />&lt;/copy&gt;<br />&lt;!-- 将所有这些文件打包成helloEJB.jar --&gt;<br />&lt;jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/&gt;<br />&lt;!-- 进行weblogic.ejbc编译 --&gt;<br />&lt;java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" &gt;<br />&lt;classpath&gt;<br />&lt;fileset dir="lib"&gt;<br />&lt;include name="*.jar" /&gt;<br />&lt;/fileset&gt;<br />&lt;/classpath&gt;<br />&lt;arg value="${temp}/helloEJB.jar" /&gt;<br />&lt;arg value="${temp}/helloEJB_deploy.jar" /&gt;<br />&lt;/java&gt;<br />&lt;!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 --&gt;<br />&lt;copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/&gt; <br />&lt;/target&gt;</td></tr></tbody></table><br /><br />用Ant配合JUnit实现单元测试 <br /><br />Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit，以及如何编写测试用例(TestCase)，感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单，首先需要把junit.jar拷入ANT_HOME\lib下，确认在这个目录下有optional.jar，因为JUnit是Ant的扩展任务，需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务，代码如下： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="run" depends="client"&gt;<br />&lt;junit printsummary="yes" fork="yes" haltonfailure="yes"&gt;<br />&lt;classpath&gt;<br />&lt;pathelement location="client.jar" /&gt;<br />&lt;/classpath&gt;<br />&lt;formatter type="plain" /&gt;<br />&lt;test name="com.sharetop.antdemo.HelloWorldTest" /&gt;<br />&lt;/junit&gt;<br />&lt;/target&gt;</td></tr></tbody></table><br /><br />高级话题 <br /><br /><strong>为Ant开发扩展任务 </strong><br /><br />为Ant实现扩展任务其实是非常容易的，只需按照以下几个步骤即可： <br /><br />1. 创建一个Java类继承org.apache.tools.ant.Task类； <br /><br />2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换； <br /><br />3. 如果扩展的任务需要嵌套其它的Task，那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer； <br /><br />4. 如果扩展的任务要支持Text，需要增加一个方法void addText(String)； <br /><br />5. 对每个嵌套的元素，实现create、add 或 addConfigured 方法； <br /><br />6. 实现public void execute方法； <br /><br />7. 在build.xml文件中使用 &lt;taskdef&gt; 来引用自定义的Task。 <br /><br />下面以一个简单的例子来说明如何为Ant增加一个hello任务，它可以连续打印多条信息，打印的次数由属性count指定，而打印的内容则由它内嵌的一个helloinfo任务的message属性指定，看上去这非常类似JSP中自定义标签的一些概念，实现代码如下： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">//HelloInfoTask.java<br />package com.sharetop.antdemo;<br />import org.apache.tools.ant.*;<br />public class HelloInfoTask {<br />private String msg;<br />public void execute() throws BuildException {<br />System.out.println(msg);<br />}<br />public void setMessage(String msg) {<br />this.msg = msg;<br />}<br />}</td></tr></tbody></table><br /><br />下面是外部Task类的代码： <br /><br /><table cellspacing="0" width="365"><tbody><tr><td class="code" width="361">//HelloTask.java<br />package com.sharetop.antdemo;<br />import org.apache.tools.ant.*;<br />public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer <br />{<br />private Task info;<br />private int count;<br />public void execute() throws BuildException {<br />for(int i=0;i&lt;count;i++)<br />info.execute();<br />}<br />public void setCount(int c){<br />this.count=c;<br />}<br />public void addTask(Task t){<br />this.info=t;<br />}<br />}</td></tr></tbody></table><br /><br />实现了这两个Task，在build.xml文件中定义它的task name，就可以在Target中执行它了。如果你不想使用 &lt;taskdef&gt; 标签来定义Task，也可以通过修改default.properties文件来实现引入新Task，这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="hello" depends="client"&gt;<br />&lt;taskdef name="hello" <br />classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/&gt;<br />&lt;taskdef name="helloinfo"<br />classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/&gt;<br />&lt;hello count="3" &gt;<br />&lt;helloinfo message="hello world" /&gt;<br />&lt;/hello&gt;<br />&lt;/target&gt;</td></tr></tbody></table><br />每个Task是一段可被执行的代码，比如，前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task，我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践，这方面最好的参考就是官方的Ant使用手册。 <br /><br /><strong>外部文件的使用 </strong><br /><br />使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。 <br /><br />可以将一个外部的XML文件导入Build文件中，这样多个项目的开发者可以通过引用来共享一些代码，同样，这也有助于Build文件的重用，示例代码如下所示： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;!DOCTYPE project [<br />&lt;!ENTITY share-variable SYSTEM "file:../share-variable.xml"&gt;<br />&lt;!ENTITY build-share SYSTEM "file:../build-share.xml"&gt;<br />]&gt;<br />&lt;project name="main" default="complie" basedir="."&gt;<br />&amp;share-variable;<br />&amp;build-share;<br />... ...</td></tr></tbody></table><br /><br />在J2EE项目中的应用 <br /><br />只要掌握了Ant的使用方法，在J2EE项目中的应用与在其它项目中的应用并没有太大的不同，但是仍有几点是需要注意的。 <br /><br />一是要清楚War和Jar文件的目录结构，主要是War的配置文件web.xml文件的位置和EJB的配置文件（ejb-jar.xml和weblogic-ejb-jar.xml等）的位置，在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务，比如在Weblogic中会调用ejbc预编译EJB的代码存根，或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务，一是扩展Ant任务实现这些任务，二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断，代码如下： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="deploy_HelloEJB" depends="compile"&gt;<br />&lt;delete dir="${temp}/ejb_make"/&gt; &lt;!-- 首先删除临时目录 --&gt;<br />&lt;delete file="${temp}/helloEJB.jar"/&gt;<br />&lt;!-- 删除WebLogic域中老版本的EJB --&gt;<br />&lt;delete file="${weblogic.deploy.dest}/helloEJB.jar"/&gt; <br />&lt;!-- 创建META-INF目录，放置ejb-jar.xml和weblogic-ejb-jar.xml --&gt;<br />&lt;mkdir dir="${temp}/ejb_make/META-INF"/&gt; <br />&lt;!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录--&gt;<br />&lt;copy todir="${temp}/ejb_make/META-INF"&gt;<br />&lt;fileset dir="etc/baseinfo"&gt;<br />&lt;include name="*.xml"/&gt;<br />&lt;/fileset&gt;<br />&lt;/copy&gt;<br />&lt;!-- 拷贝所有的helloEJB类到临时目录 --&gt;<br />&lt;copy todir="${temp}/ejb_make/"&gt;<br />&lt;fileset dir="${dest.classes}/"&gt; &lt;!-- dest.classes是输出的类文件目录 --&gt;<br />&lt;include name="${dest.classes}/helloEJB/**"/&gt;<br />&lt;/fileset&gt;<br />&lt;/copy&gt;<br />&lt;!-- 将所有这些文件打包成helloEJB.jar --&gt;<br />&lt;jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/&gt;<br />&lt;!-- 进行weblogic.ejbc编译 --&gt;<br />&lt;java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" &gt;<br />&lt;classpath&gt;<br />&lt;fileset dir="lib"&gt;<br />&lt;include name="*.jar" /&gt;<br />&lt;/fileset&gt;<br />&lt;/classpath&gt;<br />&lt;arg value="${temp}/helloEJB.jar" /&gt;<br />&lt;arg value="${temp}/helloEJB_deploy.jar" /&gt;<br />&lt;/java&gt;<br />&lt;!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 --&gt;<br />&lt;copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/&gt; <br />&lt;/target&gt;</td></tr></tbody></table><br /><br />用Ant配合JUnit实现单元测试 <br /><br />Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit，以及如何编写测试用例(TestCase)，感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单，首先需要把junit.jar拷入ANT_HOME\lib下，确认在这个目录下有optional.jar，因为JUnit是Ant的扩展任务，需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务，代码如下： <br /><br /><table cellspacing="0"><tbody><tr><td class="code">&lt;target name="run" depends="client"&gt;<br />&lt;junit printsummary="yes" fork="yes" haltonfailure="yes"&gt;<br />&lt;classpath&gt;<br />&lt;pathelement location="client.jar" /&gt;<br />&lt;/classpath&gt;<br />&lt;formatter type="plain" /&gt;<br />&lt;test name="com.sharetop.antdemo.HelloWorldTest" /&gt;<br />&lt;/junit&gt;<br />&lt;/target&gt;</td></tr></tbody></table><img src ="http://www.blogjava.net/waterjava/aggbug/43513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-27 11:23 <a href="http://www.blogjava.net/waterjava/archive/2006/04/27/43513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ANT 下载,ant的配法</title><link>http://www.blogjava.net/waterjava/archive/2006/04/27/43510.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 27 Apr 2006 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/27/43510.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/43510.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/27/43510.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/43510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/43510.html</trackback:ping><description><![CDATA[下载http://www.apache.org/dist/ant/binaries下的apache-ant-1.6.1-bin.zip    <br />接压安装。  <br /> <br />ant的配法：  <br />1。解压ant的包到本地目录。  <br />2。在环境变量中设置ANT_HOME，值为你的安装目录。  <br />3。在环境变量中设置JAVA_HOME，值为你的jdk安装目录。  <br />4。把ANT_HOME/bin加到你系统的path目录中去。  <br /> <br />在cmd模式下输入  ant  -version回车，看到输出说明配置成功。  <img src ="http://www.blogjava.net/waterjava/aggbug/43510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-27 11:11 <a href="http://www.blogjava.net/waterjava/archive/2006/04/27/43510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache的日常维护</title><link>http://www.blogjava.net/waterjava/archive/2006/04/21/42357.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 21 Apr 2006 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/21/42357.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/42357.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/21/42357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/42357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/42357.html</trackback:ping><description><![CDATA[
		<strong>一:Apache的主要缺陷<br /></strong>1:HTTP拒绝服务<br />2:缓冲区溢出<br />3:被攻击者获得root权限<br />4:配置文件的保护<br />5:服务器访问控制<br />6:密码保护<br />7:Apache日志文件<br />8:安全相关的指令<br />9:SSI(Server-Side Includes)的安全<br />10:其它安全工具<br />11:总结<br /><br />综述<br /><br /><br />本文将讨论UNIX平台下，Apache WEB服务器安装和配置的安全问题。我们假定阅读本文的系统管理员已经针对自己站点的情况选择了相关的模块，并且能够进行配置、创建和排除故障。本文的主要目的是帮助你简历一个安全的Apache歪脖(web icon_razz.gif)服务器。<br /><br />在众多的Web服务器产品中，Apache是应用最为广泛的一个产品，同时也是一个设计上非常安全的程序。但是，同其它应用程序一样，Apache也存在安全缺陷。本文主要针对三个安全缺陷进行讨论，包括：使用HTTP协议进行的拒绝服务攻击(denial of service)、3缓冲区溢出攻击以及被攻击者获得root权限。注意：合理的配置能够保护Apache免遭多种攻击，但是在网络层上的拒绝服务攻击则不是调整Apache的配置所能够防止的。本文所涉及的是使用HTTP(应用层)协议进行的拒绝服务攻击。<br /><br /><b><font color="#003399">一:Apache的主要缺陷<br /></font></b><br /><font color="#cc3300">1:HTTP拒绝服务</font><br /><br />攻击者通过某些手段使服务器拒绝对HTTP应答。这会使Apache对系统资源(CPU时间和内存)需求的剧增，最终造成系统变慢甚至完全瘫痪。<br /><br /><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">2:缓冲区溢出</font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br /><br />攻击者利用程序编写的一些缺陷，使程序偏离正常的流程。程序使用静态分配的内存保存请求数据，攻击者就可以发送一个超长请求使缓冲区溢出。比如一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出，攻击者可以执行其恶意指令或者使系统宕机。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">3:被攻击者获得root权限<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />Apache一般以root权限运行(父进程)，攻击者通过它获得root权限，进而控制整个系统。<br />获得最新的Apache<br />使用最安全版本对于加强Apache Web服务器的安全是至关重要的。<br />你可以从Apache的官方网站http://www.apache.org获得Apache的最新版本。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">4:配置文件的保护<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />Apache Web服务器有三个主要的配置文件，它们一般位于/usr/local/apache/conf目录。这三个文件是：httpd.con、srm.conf和access.conf。这些文件是整个Apache的控制中心，因此需要对三个配置文件有所了解。httpd.conf文件是主配置文件；srm.conf允许你填加资源文件；access.conf设置文件的访问权限。这些文件的配置可以参考http://httpd.apache.org/docs/mod/core.html<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">5:服务器访问控制</font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br /><br />access.conf文件包含一些指令控制允许什么用户访问Apache目录。应该把deny from all作为初始化指令，然后使用allow from指令打开访问权限。你可以允许来自某个域、IP地址或者IP段的访问。例如：<br /><br />order deny,allow<br />deny from all<br />allow from sans.org<br /><br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">6:密码保护<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />使用.htaccess文件，可以把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打开目录的访问控制。以下是一个.htaccess示例文件：<br /><br />AuthName PrivateFiles<br />AuthType Basic<br />AuthUserFile /path/to/httpd/users<br />require foo &lt;---一个有效的用户名<br /><br />然后，使用如下命令填加一个用户：<br /><br /># htpasswd -c /path/to/httpd/users foo<br /><br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">7:Apache日志文件<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />系统管理员可以使用日志格式指令来控制日志文件的信息。使用LogFormat "%a %l"指令，可以把发出HTTP请求浏览器的IP地址和主机名记录到日志文件。出于安全的考虑，你至少应该那些验证失败的WEB用户，在http.conf文件中加入LogFormat "%401u"指令可以实现这个目的。这个指令还有其它的许多参数，用户可以参考Apache的文档。另外，Apache的错误日志文件对于系统管理员来说也是非常重要的，错误日志文件中包括服务器的启动、停止以及CGI执行失败等信息。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">8:安全相关的指令<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />在Apache配置文件中，有一些安全相关的指令可以使用。这些指令的详细用法可以参考http://httpd.apache.org/docs/mod/directives.html。<br /><br />使用以下指令可以帮助你减小拒绝服务的威胁：<br /><br />LimitRequestbody: 数字参数，控制HTTP请求的大小。<br />LimitRequestFields: 数字参数，控制请求头的数目。<br />KeepAlive: 设置连接的生存期。<br />KeepAliveTimeout: 限制等待请求的时间。<br /><br />使用以下指令可以帮助你叫嚣缓冲区溢出的危险：<br /><br />LimitRequestFieldSize: 限制每个请求头的大小。<br />LimitRequestLine: 限制每个请求行的大小。<br /><br />CGI(ommon Gateway Interface,通用网关接口)的安全威胁<br /><br /><br />CGI的安全性非常重要，攻击者可以利用CGI的缺陷获得系统信息、执行系统命令、占用系统资源。如果一个CGI程序使用静态分配的内存，就可能为缓冲区溢出攻击提供机会。为了减少这种风险，程序员应该在CGI代码中使用动态分配内存。除了CGI编写人员应该注意外，系统管理员可以采取对CGI进行封装(例如：suEXEC或者CGI Wrap)的办法加强CGI的安全性。通过这种方式可以使CGI程序以某个独立的用户权限运行，即使发生缓冲区溢出，也只影响那个用户的目录/文件。<br /><br />perl是一种功能非常强大的脚本语言。主要用于文本的处理，程序员还可以通过perl脚本使用系统调用。如果程序编写的不好，就会为攻击者闯入服务器大开方便之门。因此，使用perl脚本一定要小心，以免出现此类漏洞。在perl脚本中，处理请求数据之前，最好能够调用专门的检查例程对输入的合法性进行检查。除此之外，还要确保Apache不是以root的权限运行的，Perl脚本被限制在某个特定的目录下运行。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">9:SSI(Server-Side Includes)的安全<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />使用SSI，程序员可以建立一些常用的例程，在需要时把这些例程包含进他们的代码中。SSI还允许有条件地执行外部程序，攻击者可能利用这个条件让服务器执行他们的恶意程序。在access.conf文件中使用IncludesNoEXEC指令，可以关闭执行SSI文件的功能。不过这条指令会造成服务器不执行CGI脚本或者程序。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">10:其它安全工具<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br />使用TCP Wrappers和Tripwire可以为你的系统提供额外的保护。你可以使用TCP Wrappers来控制Telnet或者FTP的访问权限。Tripwire是一个数据完整性检测工具，可以帮助系统管理员监视系统是否被改动过，你可以在Tripwire的配置文件中编制特定的策略，监视Web服务器的配置文件、数据和CGI文件是否被修改。<br /><br /></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><font color="#cc3300">11:总结<br /></font></span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"><br /><br />Apache是一个优秀的歪脖服务器，虽然Apache的开发者非常注重其安全性，但是由于Apache非常庞大，难免会存在安全隐患。Apache的安装维护中需要注意以下问题：<br /><br />1: 检查文件和目录的权限是否恰当。<br />2: httpd.conf、srm.conf和access.conf的设置是否适当<br />3: 使服务器日志文件能够记录尽可能详细的信息。<br />4: 对某些需要特别保护的目录使用密码保护(.htaccess)。<br />5: 对CGI脚本或者程序进行封装。<br />6: 如果CGI使用Perl编写，要详细检查其安全性<br />7: 检查SSI指令<br />8: 使用TCP Wrappers和Tripwire。（linux知识宝库） </span><img src ="http://www.blogjava.net/waterjava/aggbug/42357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-21 16:45 <a href="http://www.blogjava.net/waterjava/archive/2006/04/21/42357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正确配置和维护Apache WEB Server 安全性</title><link>http://www.blogjava.net/waterjava/archive/2006/04/21/42356.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 21 Apr 2006 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/21/42356.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/42356.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/21/42356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/42356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/42356.html</trackback:ping><description><![CDATA[
		<font size="2">   <b>前言：</b>在目前的Internet时代，主页已成为树立公司形象和展示自我天地的一个重要手段，配置一台强大且安全的Web Server就显得尤其重要。在众多的Web Server产品中，Apache是应用最为广泛的一个产品，同时也是一个设计上非常安全的程序。但是，同其它应用程序一样，Apache也存在安全缺陷。本文将详细介绍如何正确配置和维护Apache WEB Server的安全性问题等。<br />   <b> 一，Apache服务器的介绍</b><br /><br />    Apache服务器它是Internet网上应用最为广泛的Web服务器软件之一。Apache服务器源自美国国家超级技术计算应用中心（NCSA）的Web服务器项目中。目前已在互联网中占据了领导地位。Apache服务器得经过精心配置之后，才能使它适应高负荷，大吞吐量的互联网工作。快速、可靠、通过简单的API扩展，Perl/Python解释器可被编译到服务器中，且完全免费，完全源代码开放。如果你需要创建一个每天有数百万人访问的Web服务器，Apache可能是最佳选择。<br /><br /></font>
		<font size="2">
				<b>    二，Apache服务器的主要安全缺陷<br /></b>
				<br />    正如我们前言所说尽管Apache服务器应用最为广泛，设计上非常安全的程序。但是同其它应用程序一样，Apache也存在安全缺陷。毕竟它是完全源代码，Apache服务器的安全缺陷主要是使用HTTP协议进行的拒绝服务攻击(denial of service)、缓冲区溢出攻击以及被攻击者获得root权限三缺陷和最新的恶意的攻击者进行“拒绝服务”(DoS)攻击。合理的网络配置能够保护Apache服务器免遭多种攻击。我们来介绍一下主要的安全缺陷：<br /><br />    （1）使用HTTP协议进行的拒绝服务攻击(denial of service)的安全缺陷<br /><br />    这种方法攻击者会通过某些手段使服务器拒绝对HTTP应答。这样会使Apache对系统资源(CPU时间和内存)需求的剧增，最终造成Apache系统变慢甚至完全瘫痪。<br /><br />    </font>
		<font size="2">（2）缓冲区溢出的安全缺陷<br /><br />    该方法攻击者利用程序编写的一些缺陷，使程序偏离正常的流程。程序使用静态分配的内存保存请求数据，攻击者就可以发送一个超长请求使缓冲区溢出。比如一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出，攻击者可以执行其恶意指令或者使系统宕机。<br /><br />  </font>
		<font size="2">  （3）被攻击者获得root权限的安全缺陷<br /><br />    该安全缺陷主要是因为Apache服务器一般以root权限运行(父进程)，攻击者会通过它获得root权限，进而控制整个Apache系统。<br /><br />    （4）恶意的攻击者进行“拒绝服务”(DoS)攻击的安全缺陷<br />    这个最新在6月17日发现的漏洞，它主要是存在于Apache的chunk encoding中，这是一个HTTP协议定义的用于接受web用户所提交数据的功能。 利用黑客程序可以对于运行在FreeBSD 4.5, OpenBSD 3.0 / 3.1, NetBSD 1.5.2平台上的Apache服务器均可进行有效的攻击.<br /><br />    所有说使用最高和最新安全版本对于加强Apache Web服务器的安全是至关重要的。请广大Apache服务器管理员去</font>
		<a href="http://www.apache.org/dist/httpd/下载补丁程序以确保其WEB服务器安全">
				<font color="#000000">http://www.apache.org/dist/httpd/下载补丁程序以确保其WEB服务器安全</font>
		</a>
		<font size="2">！<br /><br />  </font>
		<span style="FONT-FAMILY: 宋体">
				<font color="#000099" size="2">
						<b>  三， 正确维护和配置Apache服务器<br /></b>
				</font>
		</span>
		<span lang="EN-US" style="FONT-FAMILY: 宋体">
				<br />
				<font size="2">    虽然Apache服务器的开发者非常注重安全性，由于Apache服务器其庞大的项目，难免会存在安全隐患。正确维护和配置Apache WEB服务器就很重要了。我们应注意的一些问题：<br /><br />    （1）Apache服务器配置文件<br />    Apache Web服务器主要有三个配置文件，位于/usr/local/apache/conf目录下。这三个文件是：<br />    httpd.con-----&gt;主配置文件<br />    srm.conf------&gt;填加资源文件<br />    access.conf---&gt;设置文件的访问权限<br />注：具体配置可以参考：</font>
				<a href="http://httpd.apache.org/docs/mod/core.html">
						<font color="#000000">http://httpd.apache.org/docs/mod/core.html</font>
				</a>
				<br />
				<br />
				<font size="2"> <font color="#cc3300">   （2）Apache服务器的日志文件</font><br />    我们可以使用日志格式指令来控制日志文件的信息。使用Logformat "%a %l"指令，可以把发出HTTP请求浏览器的IP地址和主机名记录到日志文件。出于安全的考虑，在日志中我们应知道至少应该那些验证失败的WEB用户，在http.conf文件中加入Logformat "%401u"指令可以实现这个目的。这个指令还有其它的许多参数，用户可以参考Apache的文档。另外，Apache的错误日志文件对于系统管理员来说也是非常重要的，错误日志文件中包括服务器的启动、停止以及CGI执行失败等信息。更多请参看Apache日志系列1-5。<br /><br />    <font color="#cc3300">（3）Apache服务器的目录安全认证</font><br />    在Apache Server中是允许使用 .htaccess做目录安全保护的，欲读取这保护的目录需要先键入正确用户帐号与密码。这样可做为专门管理网页存放的目录或做为会员区等。<br />在保护的目录放置一个档案，档名为.htaccss<br />AuthName "会员专区"<br />AuthType "Basic"<br />AuthUserFile "/var/tmp/xxx.pw" -----&gt;把password放在网站外<br />require valid-user<br /><br />到apache/bin目录，建password档<br /><br />% ./htpasswd -c /var/tmp/xxx.pw username1 -----&gt;第一次建档要用参数"-c"<br /><br />% ./htpasswd /var/tmp/xxx.pw username2<br />这样就可以保护目录内的内容，进入要用合法的用户．<br />注：采用了Apache内附的模组。也可以采用在httpd.conf中加入：　<br />options　indexes　followsymlinks　<br />allowoverride　authconfig　<br />order　allow,deny　<br />allow　from　all　<br /><br /> <font color="#cc3300">  （4）Apache服务器访问控制</font><br />    我们就要看三个配置文件中的第三个文件了，即access.conf文件，它包含一些指令控制允许什么用户访问Apache目录。应该把deny from all设为初始化指令，再使用allow from指令打开访问权限。<br /><br /><br />order deny,allow<br />deny from all<br />allow from safechina.net<br /><br /><br />设置允许来自某个域、IP地址或者IP段的访问。<br /><br /> <font color="#cc3300">   （5）Apache服务器的密码保护问题</font><br />     我们再使用.htaccess文件把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打开目录的访问控制。如：<br />AuthName PrivateFiles<br />AuthType Basic<br />AuthUserFile /path/to/httpd/users<br />require Phoenix<br /><br /># htpasswd -c /path/to/httpd/users Phoenix<br /><br />   </font>
		</span>
		<span style="FONT-FAMILY: 宋体">
				<font color="#000099" size="2">
						<b> 四，设置Apache服务器的WEB和文件服务器<br /></b>
				</font>
		</span>
		<span lang="EN-US" style="FONT-FAMILY: 宋体">
				<br />
				<font size="2">    我们在Apache服务器上存放WEB服务器的文件，供用户访问，并设置/home/ftp/pub目录为文件存放区域，用</font>
				<a href="http://download.your.com/pub/来访问。在防火墙上设置apache反向代理技术，由防火墙代理访问">
						<font color="#000000">http://download.your.com/pub/来访问。在防火墙上设置apache反向代理技术，由防火墙代理访问</font>
				</a>
				<font size="2">。　<br />　<br />  <font color="#cc3300">  （1）Apache服务器的设置　</font><br />　　apache服务器采用默认配置。主目录为/home/httpd/html,主机域名为Phoenix.your.com,且别名到www.your.com中,　并且设置srm.conf加一行别名定义如下：　<br />Alias　/pub　/home/ftp/pub/　<br /><br />更改默认应用程序类型定义如下：　<br />DefaultType　application/octet-stream　<br /><br />最后在/etc/httpd/conf/access.conf中增加一项定义　<br /><br />Options　Indexes　<br />AllowOverride　AuthConfig　<br />order　allow,deny　<br />allow　from　all　<br /><br />注：Options　Indexes允许在找不到index.html文件的情况下允许列出目录/文件列表。AllowOverride　AuthConfig允许做基本的用户名和口令验证。这样的话，需要在/home/ftp/pub目录下放入.htaccess，内容如下：　<br /><br />[root@shopu　pub]#　more　.htaccess　<br />AuthName　Branch　Office　Public　Software　Download　Area　<br />AuthType　Basic　<br />AuthUserFile　/etc/.usrpasswd　<br />require　valid-user　<br /><br />用# htpasswd　-c　/etc/.usrpasswd　user1　 分别创建不同的允许访问/pub下文件服务的外部用户名和口令。　<br /><br />（2）在防火墙上配置反向代理技术.　<br />　　在/etc/httpd/conf/httpd.conf　 中加入 NameVirtualHost　xxx.xxx.xxx.xxx　<br />#　xxx.xxx.xxx.xxx -----&gt;是防火墙外部在互联网上永久IP地址　<br />servername　www.your.com　<br />errorlog　/var/log/httpd/error_log　<br />transferlog　/var/log/httpd/access_log　<br />rewriteengine　on　<br />proxyrequests　off　<br />usecanonicalname　off　<br />rewriterule　^/(.*)$　http://xxx.xxx.xx.x/$1　Apache服务器的IP地址。<br /><br /><br />servername　http://download.your.com/pub/<br />errorlog　/var/log/httpd/download/error_log　<br />transferlog　/var/log/httpd/download/access_log　<br />rewriteengine　on　<br />proxyrequests　off　<br />usecanonicalname　off　<br />rewriterule　^/(.*)$　http://xxx.xxx.xx.x/$1　同上Apache服务器的IP地址。<br /><br />设置防火墙上的DNS，让download.your.com和www.your.com都指向防火墙的外部网地址xxx.xxx.xxx.xxx。用http://www.your.com访问主页，用http://download.your.com/pub/访问公共文件的下载区。<br /><br />注：还需要在apache服务器主机上建立目录/var/log/httpd/download/，否则会出错。另外，也可以设置防火墙主机上的/home/httpd/html/index.html的属性为750来阻止访问，这是防外部用户能访问到防火墙上的Apache服务器的http://www.your.com中。　<br /><br />总结：Apache Server是一个非常优秀，非常棒的服务器，只要你正确配置和维护好Apache服务器，你就会感受到Apache Server 所带来的好处，同样希望你能够通过阅读本文达到理论和实践双丰收的目的。谢谢。（linux知识宝库）</font>
		</span>
<img src ="http://www.blogjava.net/waterjava/aggbug/42356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-21 16:44 <a href="http://www.blogjava.net/waterjava/archive/2006/04/21/42356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让APACHE防止多线程下载</title><link>http://www.blogjava.net/waterjava/archive/2006/04/21/42354.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 21 Apr 2006 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/21/42354.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/42354.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/21/42354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/42354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/42354.html</trackback:ping><description><![CDATA[
		<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
				<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
				<o:p>下面是sane@nsfocus.com写的一些关于mod_limitipconn.c的文档，可以参考一下：<br /><br />[作者： sane@nsfocus.com ]<br /><br />mod_limitipconn.c是一个非官方的apache模块，可以用来作为WEB文件的下载限制<br />，但是它是使用ExtendedStatus On形式，工作在应用层。当同一个IP的连接到达<br />限制的时候，apache对get请求发送：<br /><br />HTTP/1.1 503 Service Temporarily Unavailable<br /><br />从而使用户不能下载，但并不能阻止这种攻击，仍旧允许连接的。不过这个东东对<br />网管来说还是很有用的，特别是下载站的网管。简单介绍一下安装（动态模块方式<br />安装，假设你的apache已经装在/usr/local/apache目录下）：<br /><br />下载：http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz<br /><br /># tar xzf mod_limitipconn-0.04.tar.gz<br /># cd mod_limitipconn-0.04<br /># vi Makefile<br /><br />把第一行的：<br /><br />APXS = apxs<br /><br />改为<br /><br />APXS = /usr/local/apache/bin/apxs<br /><br />然后：<br /><br /># make<br /># make install<br /><br />修改apache配置文件：<br /><br /># vi /usr/local/apache/conf/httpd.conf<br /><br />ExtendedStatus On ###make install时这句前面的#没有去掉，一定要去掉<br /><br />###make install已经加了下面两句，确认存在就行了<br />LoadModule limitipconn_module libexec/mod_limitipconn.so<br />AddModule mod_limitipconn.c<br /><br />###下面就是对web目录下的文件下载限制<br /><br /><br />MaxConnPerIP 3 ###限制web根目录同一个IP只能同时开3进程下载<br /><br /># 还有其它选项，如：<br /># NoIPLimit image/*<br /># OnlyIPLimit audio/mpeg video<br /># 可以设置多个Location<br /><br /><br /><br />重启apache，用多线程的下载工具下载时，大于3个线程，其余的将得到信息：<br /><br />HTTP/1.1 503 Service Temporarily Unavailable<br /><br />或者根据User_Agent判断，把已知的多线程工具都给deny 掉<br />in httpd.conf<br />.....<br />BrowserMatch "NetAnt" badguy<br />BrowserMatch "GetRight" badguy<br />BrowserMatch "JetCar" badguy<br />BrowserMatch "Mass Downloader" badguy<br />BrowserMatch "ReGet" badguy<br />BrowserMatch "DLExpert" badguy<br />BrowserMatch "FlashGet" badguy<br />BrowserMatch "Offline Explorer" badguy<br />BrowserMatch "Teleport" badguy<br />...........<br /><br />order deny,allow<br />deny from env=badguy<br />allow from all<br /><br /><br />注意httpd里面应该有 mod_setenvif模块。</o:p>
		</span>
<img src ="http://www.blogjava.net/waterjava/aggbug/42354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-21 16:43 <a href="http://www.blogjava.net/waterjava/archive/2006/04/21/42354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win2000下apache2.0.55+weblogic8.15的配置方法</title><link>http://www.blogjava.net/waterjava/archive/2006/04/21/42352.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 21 Apr 2006 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/21/42352.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/42352.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/21/42352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/42352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/42352.html</trackback:ping><description><![CDATA[
		<p>1.把C:\bea\weblogic81\server\bin\mod_wl_20.so拷贝到C:\Program Files\Apache Group\Apache2\modules下;<br />2.修改C:\Program Files\Apache Group\Apache2\conf\httpd.conf文件<br />   增加<br />LoadModule weblogic_module modules/mod_wl_20.so </p>
		<p># WEBLOGIC MODULE <br />&lt;IfModule mod_weblogic.c&gt;<br />WebLogicHost 127.0.0.1 <br />WebLogicPort 7001 <br />MatchExpression *.jsp<br />&lt;/IfModule&gt;<br /><br />把<br />DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"<br />改为<br />DocumentRoot "C:\bea\user_projects\applications\mydomain\DefaultWebApp"<br /><br />把<br />&lt;Directory "C:/Program Files/Apache Group/Apache2/htdocs"&gt;<br />改为<br />&lt;Directory "C:\bea\user_projects\applications\mydomain\DefaultWebApp"&gt;<br /><br />3 在C:\Program Files\Apache Group\Apache2\bin下输入<br />   apache -t<br />   测试<br />   如果ok，则成功<br />4.重启apache服务<br /></p>
<img src ="http://www.blogjava.net/waterjava/aggbug/42352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-21 16:40 <a href="http://www.blogjava.net/waterjava/archive/2006/04/21/42352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic8.1里面使用JDataStore的方法</title><link>http://www.blogjava.net/waterjava/archive/2006/04/16/41304.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 16 Apr 2006 00:09:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/04/16/41304.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/41304.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/04/16/41304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/41304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/41304.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr valign="top">
								<td width="99%">Weblogic8.1里面使用JDataStore的方法</td>
								<td width="1%">
								</td>
						</tr>
						<tr>
								<td class="message_content" style="BORDER-TOP: #ccc 1px solid" colspan="2">
										<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word" width="100%">
												<tbody>
														<tr>
																<td>JDataStore是JBuilder自带的数据库，最近摸索了几天终于在Weblogic8.1下面成功<br />部署了一个操作数据库的Web application，为了给所有像我一样的初学者指指路，下<br />面简单说说具体的操作。<br /><br />1.Weblogic里面没有JDataStore的数据驱动，所以要先到JBuilder的安装文件夹下面，<br />把lib文件夹下面的jdsremote.jar文件复制到Weblogic安装文件夹(比如D:\BEA)下面的<br />D:\BEA\weblogic81\server\lib里面，然后到D:\BEA\user_projects\mydomain下面<br />修改startWeblogic.cmd文件，在set CLASSPATH=后面加上<br />%WL_HOME%\server\lib\jdsremote.jar;<br />这里%WL_HOME%代表某个文件夹，比如：WL_HOME=D:\BEA\weblogic81<br /><br />2.JDataStore的数据驱动名为：com.borland.datastore.jdbc.DataStoreDriver<br />数据库URL应该写成如下格式：<br />jdbc:borland:dsremote://localhost/E:\My Program\User_Table.jds<br />下面是我写的一段程序，权当参考吧。<br /><br />public boolean find(String username,String password) throws Exception<br />{<br />Class.forName("com.borland.datastore.jdbc.DataStoreDriver").newInstance();<br />String url="jdbc:borland:dsremote://localhost/E:\\My Program\\User_Table.jds";<br />Connection con=DriverManager.getConnection(url,"DataStoreExplorer","user");<br />Statement sta=con.createStatement();<br />String sqlstr="select * from my_user where username='" + username + "' and password='" + password + "'";<br />ResultSet ret=sta.executeQuery(sqlstr);<br />if (ret.next()) return true;<br />else return false;<br />}<br />最后，记得先运行JDataStore Server，否则会出现被refuse的错误:)</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/waterjava/aggbug/41304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-04-16 08:09 <a href="http://www.blogjava.net/waterjava/archive/2006/04/16/41304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>