﻿<?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-我为你狂-随笔分类-技术类文章</title><link>http://www.blogjava.net/xiaohu/category/21572.html</link><description>为你而疯狂</description><language>zh-cn</language><lastBuildDate>Sat, 12 Apr 2008 15:26:57 GMT</lastBuildDate><pubDate>Sat, 12 Apr 2008 15:26:57 GMT</pubDate><ttl>60</ttl><item><title>Spring定时器</title><link>http://www.blogjava.net/xiaohu/archive/2008/04/10/191743.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Thu, 10 Apr 2008 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2008/04/10/191743.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/191743.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2008/04/10/191743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/191743.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/191743.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&lt;!--1.简单定时--&gt;<br />
&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">myTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">usish.po.pub.MyTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--自己定义的任务extends TimerTask --&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">generatPo</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">generatPO</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">importData</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">importData</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">timer</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">org.springframework.scheduling.timer.TimerFactoryBean</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTasks</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">list</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTask_1</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt; &lt;!--定时器的任务链--&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">list</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTask_1</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">org.springframework.scheduling.timer.ScheduledTimerTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt; &lt;!--任务链启动任务--&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">timerTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">myTask</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">delay</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">1000</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">period</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">50000</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <br />
<br />
&lt;!--2.使用Quartz定时--&gt;<br />
&lt;!-- scheduler --&gt;<br />
&nbsp;&lt;bean id="cacheClearStar" class="com.ztgame.memcached.CacheClearStar" /&gt;<br />
&nbsp;&lt;bean id="cacheClearStarJob"<br />
&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStar" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;clear&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="cacheClearStarTrigger"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jobDetail"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStarJob" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="cronExpression"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;0 0 0 * * ?&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;bean id="scheduler"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="triggers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStarTrigger" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp;&lt;!-- scheduler end --&gt;</div>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">一个cron表达式有至少6个（也可能7个）有空格分隔的时间元素。<br />
按顺序依次为 <br />
1.秒（0~59） <br />
2.分钟（0~59） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">3.小时（0~23） </span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><br />
4.天（月）（0~31，但是你需要考虑你月的天数） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">5.月（0~11） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">6.天（星期）（1~7 1=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">7.年份（1970－2099）</span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。<br />
由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">0 0 10,14,16 * * ? 每天上午10点，下午2点，4点<br />
0 0/30 9-17 * * ??? 朝九晚五工作时间内每半小时<br />
0 0 12 ? * WED 表示每个星期三中午12点 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">有些子表达式能包含一些范围或列表 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：子表达式（天（星期））可以为 &#8220;MON-FRI&#8221;，&#8220;MON，WED，FRI&#8221;，&#8220;MON-WED,SAT&#8221; </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;*&#8221;字符代表所有可能的值 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">因此，&#8220;*&#8221;在子表达式（月）里表示每个月的含义，&#8220;*&#8221;在子表达式（天（星期））表示星期的每一天 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;/&#8221;字符用来指定数值的增量 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：在子表达式（分钟）里的&#8220;0/15&#8221;表示从第0分钟开始，每15分钟 ;<br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在子表达式（分钟）里的&#8220;3/20&#8221;表示从第3分钟开始，每20分钟（它和&#8220;3，23，43&#8221;）的含义一样 <br />
</span></span></span><br />
<span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;？&#8221;字符仅被用于天（月）和天（星期）两个子表达式，表示不指定值 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">当2个子表达式其中之一被指定了值以后，为了避免冲突，需要将另一个子表达式的值设为&#8220;？&#8221; </span></span></span></p>
<p><span style="font-size: 12pt"></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;L&#8221; 字符仅被用于天（月）和天（星期）两个子表达式，它是单词&#8220;last&#8221;的缩写 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">但是它在两个子表达式里的含义是不同的。 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在天（月）子表达式中，&#8220;L&#8221;表示一个月的最后一天 ,<br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在天（星期）自表达式中，&#8220;L&#8221;表示一个星期的最后一天，也就是SAT </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">如果在&#8220;L&#8221;前有具体的内容，它就具有其他的含义了 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：&#8220;6L&#8221;表示这个月的倒数第６天，&#8220;ＦＲＩＬ&#8221;表示这个月的最后一个星期五 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">注意：在使用&#8220;L&#8221;参数时，不要指定列表或范围，因为这会导致问题</span></span></span></p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/191743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2008-04-10 09:34 <a href="http://www.blogjava.net/xiaohu/archive/2008/04/10/191743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp出现getOutputStream() has already been called for this response异常的原因和解决方法</title><link>http://www.blogjava.net/xiaohu/archive/2007/10/22/154850.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Mon, 22 Oct 2007 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/10/22/154850.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/154850.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/10/22/154850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/154850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/154850.html</trackback:ping><description><![CDATA[<p>在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流（如输出图片验证码，文件下载等），<br />
没有妥善处理好的原因。<br />
具体的原因就是<br />
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后<br />
有一段这样的代码<br />
finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);<br />
&nbsp;&nbsp;&nbsp; }<br />
这里是在释放在jsp中使用的对象，会调用response.getWriter(),因为这个方法是和<br />
response.getOutputStream()相冲突的！所以会出现以上这个异常。</p>
<p>然后当然是要提出解决的办法，其实挺简单的,在使用完输出流以后调用以下两行代码即可：<br />
<strong><font color="#ff0000">out.clear();<br />
out = pageContext.pushBody();</font></strong></p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/154850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-10-22 09:37 <a href="http://www.blogjava.net/xiaohu/archive/2007/10/22/154850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关乱码的处理－－－中国程序员永远无法避免的话题 </title><link>http://www.blogjava.net/xiaohu/archive/2007/10/15/153077.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Mon, 15 Oct 2007 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/10/15/153077.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/153077.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/10/15/153077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/153077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/153077.html</trackback:ping><description><![CDATA[<p>对于Java由于默认的编码方式是 UNICODE,所以用中文也易出问题,常见的解决是<br />
String s2 = new String(s1.getBytes(&#8220;ISO-8859-1&#8221;),&#8221;GBK&#8221;);<br />
<br />
<br />
<span style="color: red">1、utf8解决JSP中文乱码问题</span> <br />
一般说来在每个页面的开始处，加入：</p>
<p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />
&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;</p>
<p>&lt;%<br />
&nbsp;request.setCharacterEncoding("UTF-8");<br />
%&gt; </p>
<p>charset=UTF-8&nbsp; 的作用是指定JSP向客户端输出的编码方式为&#8220;UTF-8&#8221;</p>
<p>pageEncoding="UTF-8"&nbsp; 为了让JSP引擎能正确地解码含有中文字符的JSP页面，这在LINUX中很有效</p>
<p>&nbsp;request.setCharacterEncoding("UTF-8"); 是对请求进行了中文编码</p>
<p>有时，这样仍不能解决问题，还需要这样处理一下：</p>
<p>String msg = request.getParameter("message");<br />
&nbsp;String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");<br />
&nbsp;out.println(st);</p>
<p><span style="color: red">2、Tomcat 5.5 中文乱码</span> </p>
<p>)只要把%TOMCAT安装目录%/&nbsp;&nbsp; webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下，如果没有filters目录，就创建一个。&nbsp;&nbsp; <br />
&nbsp; 2)在你的web.xml里加入如下几行：&nbsp;&nbsp; &lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;Set&nbsp;&nbsp; Character&nbsp;&nbsp; Encoding&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;init-param&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;param-value&gt;GBK&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/init-param&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;Set&nbsp;&nbsp; Character&nbsp;&nbsp; Encoding&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 3)完成.&nbsp;&nbsp; <br />
&nbsp; 2&nbsp;&nbsp; get方式的解决办法&nbsp;&nbsp; <br />
&nbsp; 1)&nbsp;&nbsp; 打开tomcat的server.xml文件，找到区块，加入如下一行：&nbsp;&nbsp; <br />
&nbsp; URIEncoding=&#8221;GBK&#8221;&nbsp;&nbsp; <br />
&nbsp; 完整的应如下：&nbsp;&nbsp; <br />
&nbsp; &lt;Connector&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; port="80"&nbsp;&nbsp; maxThreads="150"&nbsp;&nbsp; minSpareThreads="25"&nbsp;&nbsp; maxSpareThreads="75"&nbsp;&nbsp; <br />
&nbsp; enableLookups="false"&nbsp;&nbsp; redirectPort="8443"&nbsp;&nbsp; acceptCount="100"&nbsp;&nbsp; <br />
&nbsp; debug="0"&nbsp;&nbsp; connectionTimeout="20000"&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; disableUploadTimeout="true"&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; URIEncoding="GBK"&nbsp;&nbsp; <br />
&nbsp; /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 2)重启tomcat,一切OK。</p>
<p><span style="color: red">3、xmlHttpRequest中文问题</span> </p>
<p>页面jsp用的GBK编码 </p>
<p><br />
代码<br />
&lt;%@ page contentType="text/html; charset=GBK"%&gt;&nbsp; </p>
<p><br />
javascript部分 </p>
<p>代码<br />
function addFracasReport() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var url="controler?actionId=0_06_03_01&amp;actionFlag=0010";&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var urlmsg="&amp;reportId="+fracasReport1.textReportId.value;&nbsp; //故障报告表编号&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var xmlHttp=Common.createXMLHttpRequest();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; xmlHttp.onreadystatechange = Common.getReadyStateHandler(xmlHttp, eval("turnAnalyPage"));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; xmlHttp.open("POST",url,true);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; xmlHttp.send(urlmsg);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}&nbsp; </p>
<p><br />
后台java中获得的reportId是乱码，不知道该怎么转，主要是不知道xmlHttp.send(urlmsg);以后是什么编码？在后面用java来转，试了几种，都没有成功，其中有：</p>
<p><br />
代码<br />
public static String UTF_8ToGBK(String str) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String(str.getBytes("UTF-8"), "GBK");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static String UTF8ToGBK(String str) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String(str.getBytes("UTF-16BE"), "GBK");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static String GBK(String str) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String(str.getBytes("GBK"),"GBK");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static String getStr(String str) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String temp_p = str;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String temp = new String(temp_p.getBytes("ISO8859_1"), "GBK");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp = sqlStrchop(temp);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return temp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp; </p>
<p><span style="color: red">4、JDBC ODBC Bridge的Bug及其解决方法</span> </p>
<p>在编写一数据库管理程序时，发现JDBC-ODBC Bridge存在不易发现的Bug。在向数据表插入数据时，如果为英文字符，存储内容完全正确，如果存入中文字符，部分数据库只能存储前七八个中文字符，其他内容被截去，导致存储内容的不完整（有些数据库不存在这个问题，如Sybase SQL Anywhere 5.0。JDBC-ODBC Bridge还存在无法建表的Bug）。 </p>
<p>　　对于广大需要存储中文信息的Java程序员来说，这可是一个不好的消息。要么改用其他语言编程，要么选择其他价格昂贵的数据库产品。&#8220;一次编写，到处运行&#8221;的目标，也大打折扣。能不能采用变通的方法，将中文信息进行处理后再存储来解决这个问题呢？答案是肯定的。 </p>
<p>　　解决问题的具体思路、方法 <br />
　　Java采用Unicode码编码方式，中英文字符均采用16bit存储。既然存储英文信息是正确的，根据一定规则，将中文信息转换成英文信息后存储，自然不会出现截尾现象。读取信息时再进行逆向操作，将英文信息还原成中文信息即可。由GB2312编码规则可知，汉字一般为二个高位为1的ASCII码，在转换时将一个汉字的二个高位1去掉，还原时再将二个高位1加上。为了处理含有英文字符的中文字串，对英文字符则需要加上一个Byte 0标记。以下提供的两个公用静态方法，可加入任何一个类中使用。 </p>
<p>　　将中英文字串转换成纯英文字串 <br />
　　public static String toTureAsciiStr(String str){ </p>
<p>　　StringBuffer sb = new StringBuffer(); </p>
<p>　　byte[] bt = str.getBytes(); </p>
<p>　　for(int i =0 ;i〈bt.length;i++){ </p>
<p>　　if(bt[i]〈0){ </p>
<p>　　//是汉字去高位1 </p>
<p>　　sb.append((char)(bt[i]&amp;&amp;0x7f)); </p>
<p>　　 }else{//是英文字符 补0作记录 </p>
<p>　　sb.append((char)0); </p>
<p>　　sb.append((char)bt[i]); </p>
<p>　　 } </p>
<p>　　 } </p>
<p>　　return sb.toString(); </p>
<p>　　} </p>
<p>　　将经转换的字串还原 <br />
　　public static String unToTrueAsciiStr(String str){ </p>
<p>　　 byte[] bt = str.getBytes(); </p>
<p>　　 int i,l=0,length = bt.length,j=0; </p>
<p>　　 for(i = 0;i〈length;i++){ </p>
<p>　　 if(bt[i] == 0){ </p>
<p>　　 l++; </p>
<p>　　 } </p>
<p>　　 } </p>
<p>　　 byte []bt2 = new byte[length-l]; </p>
<p>　　 for(i =0 ;i〈length;i++){ </p>
<p>　　 if(bt[i] == 0){ </p>
<p>　　 i++; </p>
<p>　　 bt2[j] = bt[i]; </p>
<p>　　 }else{ </p>
<p>　　 bt2[j] = (byte)(bt[i]|0x80); </p>
<p>　　 } </p>
<p>　　 j++; </p>
<p>　　 } </p>
<p>　　String tt = new String(bt2); </p>
<p>　　return tt; </p>
<p>　　} </p>
<p>　　上例在实际编程中效果很好，只是存储的中文信息需要经过同样处理，才能被其他系统使用。而且如果中文字串出现英文字符，实际上增加了额外的存储空间。<br />
<br />
<span style="color: red">5、Solaris下Servlet编程的中文问题及解决办法 <br />
</span>在使用Java开发Internet上的一个应用系统时，发现在Windows下调试完全正常的Servlet，上传到Solaris 服务器上，运行却出现故障——返回的网页不能显示中文，应为中文的信息全为乱码；用中文信息做关键字，不能正确检索数据库。后来采用加入检查代码等方法探知故障原因如下： </p>
<p>　　显示乱码主要是因为通过类 HttpServletResponse提供的方法setContentType 无法改变返回给客户的数据的编码方式，正确的编码方式应为GB2312或者GBK，而事实上为缺省的ISO8859-1。无法检索中文信息则是因为，客户提交的中文信息经浏览器编码到达服务器后，Servlet无法将其正确解码。 </p>
<p>　　举例说明显示乱码解决方法 <br />
　　Servlet 一般通常做法如下： </p>
<p>　　public class ZldTestServlet extends HttpServlet { </p>
<p>　　public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{ </p>
<p>　　//在使用 Writer向浏览器返回数据前，设置 content-type header ，在这里设置相应的字符集gb2312 </p>
<p>　　response.setContentType("text/html;charset=gb2312"); </p>
<p>　　PrintWriter out = response.getWriter(); //* </p>
<p>　　// 正式返回数据 </p>
<p>　　out.println("〈html〉〈head〉〈title〉Servlet test〈/title〉〈/head〉" ); </p>
<p>　　out.println("这是一个测试页！"); </p>
<p>　　out.println("〈/body〉〈/html〉"); </p>
<p>　　out.close(); </p>
<p>　　} </p>
<p>　　 ... </p>
<p>　　} </p>
<p>　　解决页面显示乱码问题，需将*处代码换成如下内容： </p>
<p>　　PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(),"gb2312")); </p>
<p>　　Solaris中文信息检索问题的解决 <br />
　　浏览器利用表单向服务器提交信息时，一般采用x-www-form-urlencoded 的MIME格式对数据进行编码。如果使用get方法，参数名称和参数值经编码后附加在URL后，在Java中称作查询串（query string）。 </p>
<p>　　在Servlet程序中，如果采用ServletRequest的方法getParameter取得参数值，在Solaris环境下，对汉字却不能正确解码。因而无法正确检索数据库。 </p>
<p>　　在Java 1.2的包——java.net中提供了URLEncode和URLDecode类。类URLEncode提供了按x-www-form-urlencoded格式对给定串进行转换的方法。类URLEncode则提供了逆方法。 </p>
<p><span style="color: red">6、Common Mail乱码问题</span><br />
common mail是一个小而方便的mail包，他实现了对Java Mail的封装，使用起来十分的方便，但是我在使用他的时候发现，使用纯文本的内容发送，结果是乱码，代码如下：<br />
public class TestCommonMail {<br />
public static void main(String[] args) throws EmailException, MessagingException {<br />
SimpleEmail email = new SimpleEmail();<br />
email.setCharset("GB2312");<br />
email.setHostName("smtp.163.com");<br />
email.setSubject("test");<br />
email.addTo("<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#101;&#115;&#116;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">test@163.com</a>");<br />
email.setFrom("<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#101;&#115;&#116;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">test@163.com</a>");<br />
email.setMsg("我的测试");<br />
email.setAuthentication("test", "test");<br />
email.send();<br />
}<br />
}</p>
<p>分析了一下commons mail的源码找到了原因。源码如下:<br />
public class SimpleEmail extends Email<br />
{<br />
public Email setMsg(String msg) throws EmailException, MessagingException<br />
{<br />
if (EmailUtils.isEmpty(msg))<br />
{<br />
throw new EmailException("Invalid message supplied");<br />
}</p>
<p>setContent(msg, TEXT_PLAIN);<br />
return this;<br />
}<br />
}</p>
<p>Email代码片段<br />
public void setContent(Object aObject, String aContentType)<br />
{<br />
this.content = aObject;<br />
if (EmailUtils.isEmpty(aContentType))<br />
{<br />
this.contentType = null;<br />
}<br />
else<br />
{<br />
// set the content type<br />
this.contentType = aContentType;</p>
<p>// set the charset if the input was properly formed<br />
String strMarker = "; charset=";<br />
int charsetPos = aContentType.toLowerCase().indexOf(strMarker);<br />
if (charsetPos != -1)<br />
{<br />
// find the next space (after the marker)<br />
charsetPos += strMarker.length();<br />
int intCharsetEnd =<br />
aContentType.toLowerCase().indexOf(" ", charsetPos);</p>
<p>if (intCharsetEnd != -1)<br />
{<br />
this.charset =<br />
aContentType.substring(charsetPos, intCharsetEnd);<br />
}<br />
else<br />
{<br />
this.charset = aContentType.substring(charsetPos);<br />
}<br />
}<br />
}<br />
}</p>
<p>email.send();的send方法将调用<br />
public void buildMimeMessage() throws EmailException<br />
{<br />
try<br />
{<br />
this.getMailSession();<br />
this.message = new MimeMessage(this.session);</p>
<p>if (EmailUtils.isNotEmpty(this.subject))<br />
{<br />
if (EmailUtils.isNotEmpty(this.charset))<br />
{<br />
this.message.setSubject(this.subject, this.charset);<br />
}<br />
else<br />
{<br />
this.message.setSubject(this.subject);<br />
}<br />
}</p>
<p>// ========================================================<br />
// Start of replacement code<br />
if (this.content != null)<br />
{<br />
this.message.setContent(this.content, this.contentType);<br />
}<br />
// end of replacement code<br />
// ========================================================<br />
else if (this.emailBody != null)<br />
{<br />
this.message.setContent(this.emailBody);<br />
}<br />
else<br />
{<br />
this.message.setContent("", Email.TEXT_PLAIN);<br />
}</p>
<p>if (this.fromAddress != null)<br />
{<br />
this.message.setFrom(this.fromAddress);<br />
}<br />
else<br />
{<br />
throw new EmailException("Sender address required");<br />
}</p>
<p>if (this.toList.size() + this.ccList.size() + this.bccList.size() == 0)<br />
{<br />
throw new EmailException(<br />
"At least one receiver address required");<br />
}</p>
<p>if (this.toList.size() &gt; 0)<br />
{<br />
this.message.setRecipients(<br />
Message.RecipientType.TO,<br />
this.toInternetAddressArray(this.toList));<br />
}</p>
<p>if (this.ccList.size() &gt; 0)<br />
{<br />
this.message.setRecipients(<br />
Message.RecipientType.CC,<br />
this.toInternetAddressArray(this.ccList));<br />
}</p>
<p>if (this.bccList.size() &gt; 0)<br />
{<br />
this.message.setRecipients(<br />
Message.RecipientType.BCC,<br />
this.toInternetAddressArray(this.bccList));<br />
}</p>
<p>if (this.replyList.size() &gt; 0)<br />
{<br />
this.message.setReplyTo(<br />
this.toInternetAddressArray(this.replyList));<br />
}</p>
<p>if (this.headers.size() &gt; 0)<br />
{<br />
Iterator iterHeaderKeys = this.headers.keySet().iterator();<br />
while (iterHeaderKeys.hasNext())<br />
{<br />
String name = (String) iterHeaderKeys.next();<br />
String value = (String) headers.get(name);<br />
this.message.addHeader(name, value);<br />
}<br />
}</p>
<p>if (this.message.getSentDate() == null)<br />
{<br />
this.message.setSentDate(getSentDate());<br />
}</p>
<p>if (this.popBeforeSmtp)<br />
{<br />
Store store = session.getStore("pop3");<br />
store.connect(this.popHost, this.popUsername, this.popPassword);<br />
}<br />
}<br />
catch (MessagingException me)<br />
{<br />
throw new EmailException(me);<br />
}<br />
}<br />
由代码可以知道纯文本方式最终调用了Java Mail的<br />
message.setContent(this.content, this.contentType);<br />
content是内容<br />
contentType是类型，如text/plain,<br />
(我们可以试试直接用Java mail发邮件，设置文本内容不使用setText方法，也使用setContent("测试", "text/plain")方式，你可以看到内容也是乱码)<br />
关键就在于text/plain，我们改成text/plain;charset=gb2312，ok乱码解决了。在commons mail我们看SimpleEmail 类中setMsg方法调用的就是 setContent(msg, TEXT_PLAIN);我们只需要将Email类中的常量TEXT_PLAIN修改一下加入 charset=你的字符集 ，重新打包jar，这样就可以了</p>
<p><span style="color: red">7、toad的字符集的设置与oracle的安装</span><br />
oracle数据库服务器的安装一般是中文字符集，有时安装在不同的平台下，设置为ISO编码，toad是oracle开发的最好工具，不是我说的，可是中文环境下安装的toad，打开英文字符的oracle时，中文全是乱码。必须进行设置</p>
<p>环境变量---〉系统变量<br />
加<br />
&nbsp; NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br />
&nbsp; 或<br />
&nbsp; NLS_lANG=AMERICAN_AMERICA.WE8ISO8859P1</p>
<p>AMERICAN_AMERICA.WE8MSWIN1252<br />
&nbsp;<br />
&nbsp;或者</p>
<p>&nbsp;打开注册表，点击HKEY_LOCAL_MATHINE<br />
再点击Software,再点击ORACLE<br />
在点击HOME（ORACLE所在目录）<br />
在注册表的右半面有NLS_LANG,<br />
双击它，将你想要的覆盖掉原来的就可以了<br />
最好记下旧的，以便可以改回来。</p>
<p><br />
connect sys/chang_on_install<br />
update props$<br />
set value$='ZHS16CGB231280'<br />
where name='NLS_CHARACTERSET';<br />
commit;<br />
&nbsp;这样就OK了</p>
<p>&nbsp;<br />
<span style="color: red">8、如何解決GWT(google web toolkit)中文的問題</span><br />
GWT 中文乱码解决方法 </p>
<p>1.把你要显示的中文&#8220;测试字符串&#8221;输入到一个文件，如:1.txt <br />
2.进入命令行,进入1.txt所在的目录,敲入以下命令:native2ascii.exe 1.txt 2.txt 回车。这样就生成了另外一个文件2.txt。 <br />
3.2.txt的内容如下:\u6d4b\u8bd5\u5b57\u7b26\u4e32 <br />
4.然后用上面的编码，在gwt中使用，就可以了. </p>
<p><span style="color: red">9、xmlHttp得到的网页怎么是乱码？</span> <br />
(1)在服务器端使用WebRequest而不是xmlHttp<br />
(2) 将 </p>
<p>StreamReader sr = new StreamReader(stream);</p>
<p><br />
对于简体中文改成：</p>
<p>StreamReader sr = new StreamReader(stream , Encoding.Default );<br />
对于utf-8改成：</p>
<p><br />
StreamReader sr = new StreamReader(stream , Encoding.UTF8 );<br />
当然，Encoding枚举还有很多其他的成员，对于不同的编码content-type可以有选择的应用</p>
<p>(3)后来我发现无论是content-type是gb2312还是utf-8,用</p>
<p><br />
StreamReader sr = new StreamReader(stream , Encoding.Default );</p>
<p>都可以返回正常的汉字，所以统一的改成Encoding.Default</p>
<p>&nbsp;</p>
<p><br />
--------------------------------------------------------------------------------</p>
<p>最后，在服务器端从一个url获得网页的源代码的代码如下：</p>
<p>&nbsp;</p>
<p>/// &lt;summary&gt;<br />
/// post一个指定的url，获得网页的源代码(用WebRequest实现)<br />
/// &lt;/summary&gt;<br />
/// &lt;param name="url"&gt;&lt;/param&gt;<br />
/// &lt;returns&gt;<br />
/// 如果请求失败，返回null<br />
/// 如果请求成功，返回网页的源代码<br />
/// &lt;/returns&gt;<br />
public static string GetContentFromUrl2( string url )<br />
{<br />
&nbsp;&nbsp;&nbsp; //变量定义<br />
&nbsp;&nbsp;&nbsp; string respstr;</p>
<p>&nbsp;&nbsp;&nbsp; WebRequest myWebRequest=WebRequest.Create(url);<br />
&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myWebRequest.PreAuthenticate=true;<br />
&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetworkCredential networkCredential=new NetworkCredential( username , password , domain );<br />
&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myWebRequest.Credentials=networkCredential;</p>
<p>&nbsp;&nbsp;&nbsp; // Assign the response object of 'WebRequest' to a 'WebResponse' variable.<br />
&nbsp;&nbsp;&nbsp; WebResponse myWebResponse=myWebRequest.GetResponse();<br />
&nbsp;&nbsp;&nbsp; System.IO.Stream stream = myWebResponse.GetResponseStream();<br />
&nbsp;&nbsp;&nbsp; StreamReader sr = new StreamReader(stream , Encoding.Default );<br />
&nbsp;&nbsp;&nbsp; //以字符串形式读取数据流<br />
&nbsp;&nbsp;&nbsp; respstr = sr.ReadToEnd();<br />
&nbsp;&nbsp;&nbsp; sr.Close(); <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return respstr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}</p>
<p><span style="color: red">10、解决weblogic／webshpere中文问题：</span> <br />
在web.xml文件中需要配置中文环境。r如下： <br />
&lt;context-param&gt; <br />
&nbsp;&nbsp;&lt;param-name&gt;weblogic.httpd.inputCharset./*&lt;/param-name&gt; <br />
&nbsp;&nbsp;&lt;param-value&gt;GB2312&lt;/param-value&gt; <br />
&lt;/context-param&gt;</p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/153077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-10-15 20:31 <a href="http://www.blogjava.net/xiaohu/archive/2007/10/15/153077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】成年人必看的五个故事 </title><link>http://www.blogjava.net/xiaohu/archive/2007/10/15/153075.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Mon, 15 Oct 2007 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/10/15/153075.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/153075.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/10/15/153075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/153075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/153075.html</trackback:ping><description><![CDATA[1、 情况不同
<p>一只小猪、一只绵羊和一头乳牛，被关在同一个畜栏里。有一次，牧人捉住小猪，牠大声号叫，猛烈地抗拒。绵羊和乳牛讨厌牠的号叫，便说：「他常常捉我们，我们并不大呼小叫。小猪听了回答道：「捉你们和捉我完全是两回事，他捉你们，只是要你们的毛和乳汁，但是捉住我，却是要我的命呢! <br />
立场不同、所处环境不同的人，很难了解对方的感受；因此对别人的失意、挫折、伤痛，不宜幸灾乐祸，而应要有关怀、了解的心情。要有宽容的心！ </p>
<p>2、 *自己 </p>
<p>小蜗牛问妈妈：为什么我们从生下来，就要背负这个又硬又重的壳呢？ <br />
妈妈：因为我们的身体没有骨骼的支撑，只能爬，又爬不快。所以要这个壳的保护！ <br />
小蜗牛：毛虫姊姊没有骨头，也爬不快，为什么她却不用背这个又硬又重的壳呢？ <br />
妈妈：因为毛虫姊姊能变成蝴蝶，天空会保护她啊。 <br />
小蜗牛：可是蚯蚓弟弟也没骨头爬不快，也不会变成蝴蝶他什么不背这个又硬又重的壳呢？ <br />
妈妈：因为蚯蚓弟弟会钻土, 大地会保护他啊。 <br />
小蜗牛哭了起来：我们好可怜，天空不保护，大地也不保护。 <br />
蜗牛妈妈安慰他：「所以我们有壳啊！」我们不*天，也不*地，我们*自己。 </p>
<p>3、 鲨鱼与鱼 </p>
<p>曾有人做过实验，将一只最凶猛的鲨鱼和一群热带鱼放在同一个池子，然后用强化玻璃隔开，最初，鲨鱼每天不断冲撞那块看不到的玻璃，耐何这只是徒劳，它始终不能过到对面去，而实验人员每天都有放一些鲫鱼在池子里，所以鲨鱼也没缺少猎物，只是它仍想到对面去，想尝试那美丽的滋味，每天仍是不断的冲撞那块玻璃，它试了每个角落，每次都是用尽全力，但每次也总是弄的伤痕累累，有好几次都浑身破裂出血，持续了好一些日子，每当玻璃一出现裂痕，实验人员马上加上一块更厚的玻璃。 <br />
后来，鲨鱼不再冲撞那块玻璃了，对那些斑斓的热带鱼也不再在意，好像他们只是墙上会动的壁画，它开始等着每天固定会出现的鲫鱼，然后用他敏捷的本能进行狩猎，好像回到海中不可一世的凶狠霸气，但这一切只不过是假像罢了，实验到了最后的阶段，实验人员将玻璃取走，但鲨鱼却没有反应，每天仍是在固定的区域游着它不但对那些热带鱼视若无睹，甚至于当那些鲫鱼逃到那边去，他就立刻放弃追逐，说什么也不愿再过去，实验结束了，实 验人员讥笑它是海里最懦弱的鱼。 </p>
<p>可是失恋过的人都知道为什么，它怕痛。 </p>
<p>4、 神迹 </p>
<p>法国一个偏僻的小镇，据传有一个特别灵验的水泉，常会出现神迹，可以医治各种疾病。有一天，一个拄着拐杖，少了一条腿的退伍军人，一跛一跛的走过镇上的马路，旁边的镇民带着同情的回吻说：「可怜的家伙，难道他要向上帝祈求再有一条腿吗??」这一句话被退伍的军人听到了，他转过身对他们说：「我不是要向上帝祈求有一条新的腿，而是要祈求祂帮助我，叫我没有一条腿后，也知道如何过日子。」 <br />
试想：学习为所失去的感恩，也接纳失去的事实，不管人生的得与失，总是要让自已的生命充满了亮丽与光彩，不再为过去掉泪，努力的活出自己的生命。 </p>
<p>5、 钓竿 </p>
<p>有个老人在河边钓鱼，一个小孩走过去看他钓鱼，老人技巧纯熟，所以没多久就钓上了满篓的鱼，老人见小孩很可爱，要把整篓的鱼送给他，小孩摇摇头，老人惊异的问道：「你为何不要？」小孩回答：「我想要你手中的钓竿。」老人问：「你要钓竿做什么？」小孩说：「这篓鱼没多久就吃完了，要是我有钓竿，我就可以自己钓，一辈子也吃不完。」 <br />
我想你一定会说：好聪明的小孩。错了，他如果只要钓竿，那他一条鱼也吃不到。因为，他不懂钓鱼的技巧，光有鱼竿是没用的，因为钓鱼重要的不在＜钓竿＞，而在＜钓技＞有太多人认为自己拥有了人生道上的钓竿，再也无惧于路上的风雨，如此，难免会跌倒于泥泞地上。就如小孩看老人，以为只要有钓竿就有吃不完的鱼，像职员看老板，以为只要坐在办公室，就有滚进的财源</p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/153075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-10-15 20:26 <a href="http://www.blogjava.net/xiaohu/archive/2007/10/15/153075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】怎样成为优秀的软件模型设计者 </title><link>http://www.blogjava.net/xiaohu/archive/2007/10/15/153073.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Mon, 15 Oct 2007 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/10/15/153073.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/153073.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/10/15/153073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/153073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/153073.html</trackback:ping><description><![CDATA[<p>我们期待自己成为一个优秀的软件模型设计者，但是，要怎样做，又从哪里开始呢？ </p>
<p>将下列原则应用到你的软件工程中，你会获得立杆见影的成果。 </p>
<p>1. 人远比技术重要 </p>
<p>你开发软件是为了供别人使用，没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平，因为他们那时侯将主要精力都集中在技术上。显然，构件（components），EJB（Enterprise <br />
Java <br />
Beans）和代理（agent）是很有趣的东西。但是对于用户来说，如果你设计的软件很难使用或者不能满足他们的需求，后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。 </p>
<p><br />
2. 理解你要实现的东西 </p>
<p>好的软件设计人员把大多数时间花费在建立系统模型上，偶尔写一些源代码，但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。 </p>
<p>3. 谦虚是必须的品格 </p>
<p>你不可能知道一切，你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作，因为软件开发所用到的工具和技术是在不断更新的。而且，一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说，每天可以学习很多新东西（如果愿意的话）。 </p>
<p><br />
4. 需求就是需求 </p>
<p>如果你没有任何需求，你就不要动手开发任何软件。成功的软件取决于时间（在用户要求的时间内完成）、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么，或者软件的需求定义，那么你的工程注定会失败。 </p>
<p><br />
5. 需求其实很少改变，改变的是你对需求的理解 </p>
<p>Object ToolSmiths公司（www.objecttoolsmiths.com）的Doug <br />
Smith常喜欢说：&#8220;分析是一门科学，设计是一门艺术&#8221;。他的意思是说在众多的&#8220;正确&#8221;分析模型中只存在一个最&#8220;正确&#8221;分析模型可以完全满足解决某个具体问题的需要（我理解的意思是需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力 <br />
- 译者注）。 </p>
<p>如果需求经常改动，很可能是你没有作好需求分析，并不是需求真的改变了。 </p>
<p>你可以抱怨用户不能告诉你他们想得到什么，但是不要忘记，收集需求信息是你工作。 </p>
<p>你可以说是新来的开发人员把事情搞得一团糟，但是，你应该确定在工程的第一天就告诉他们应该做什么和怎样去做。 </p>
<p>如果你觉得公司不让你与用户充分接触，那只能说明公司的管理层并不是真正支持你的项目。 </p>
<p>你可以抱怨公司有关软件工程的管理制度不合理，但你必须了解大多同行公司是怎么做的。 </p>
<p>你可以借口说你们的竞争对手的成功是因为他们有了一个新的理念，但是为什么你没先想到呢？ </p>
<p>需求真正改变的情况很少，但是没有做好需求分析工作的理由却很多。 </p>
<p>6. 经常阅读 </p>
<p>在这个每日都在发生变化的产业中，你不可能在已取得的成就上陶醉太久。 </p>
<p>每个月至少读2、3本专业杂志或者1本专业书籍。保持不落伍需要付出很多的时间和金钱，但会使你成为一个很有实力的竞争者。 </p>
<p>7. 降低软件模块间的耦合度 </p>
<p>高耦合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。 </p>
<p>你可以通过以下方法降低程序的耦合度：隐藏实现细节，强制构件接口定义，不使用公用数据结构，不让应用程序直接操作数据库（我的经验法则是：当应用程序员在写SQL代码的时候，你的程序的耦合度就已经很高了）。 </p>
<p><br />
耦合度低的软件可以很容易被重用、维护和扩充。 </p>
<p>8. 提高软件的内聚性 </p>
<p>如果一个软件的模块只实现一个功能，那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。 </p>
<p>判断一个模块是否有高的内聚性，看一看你是否能够用一个简单的句子描述它的功能就行了。如果你用了一段话或者你需要使用类似&#8220;和&#8221;、&#8220;或&#8221;等连词，则说明你需要将该模块细化。 </p>
<p><br />
只有高内聚性的模块才可能被重用。 </p>
<p>9. 考虑软件的移植性 </p>
<p>移植是软件开发中一项具体而又实际的工作，不要相信某些软件工具的广告宣传（比如java 的宣传口号write once run many ? 译者注）。 </p>
<p>即使仅仅对软件进行常规升级，也要把这看得和向另一个操作系统或数据库移植一样重要。 </p>
<p>记得从16位Windows移植到32位windows的&#8220;乐趣&#8221;吗 <br />
？当你使用了某个操作系统的特性，如它的进程间通信(IPC)策略，或用某数据库专有语言写了存储过程。你的软件和那个特定的产品结合度就已经很高了。 </p>
<p>好的软件设计者把那些特有的实现细节打包隐藏起来，所以，当那些特性该变的时候，你的仅仅需要更新那个包就可以了。 </p>
<p>10. 接受变化 </p>
<p>这是一句老话了：唯一不变的只有变化。 </p>
<p>你应该将所有系统将可能发生的变化以及潜在需求记录下来,以便将来能够实现（参见&#8220;Architecting for Change&#8221;，Thinking <br />
Objectively, May 1999） </p>
<p>通过在建模期间考虑这些假设的情况，你就有可能开发出足够强壮且容易维护的软件。设计强壮的软件是你最基本的目标。 </p>
<p>11. 不要低估对软件规模的需求 </p>
<p>Internet 带给我们的最大的教训是你必须在软件开发的最初阶段就考虑软件规模的可扩充性。 </p>
<p>今天只有100人的部门使用的应用程序，明天可能会被有好几万人的组织使用，下月，通过因特网可能会有几百万人使用它。 </p>
<p>在软件设计的初期，根据在用例模型中定义的必须支持的基本事务处理，确定软件的基本功能。然后，在建造系统的时候再逐步加入比较常用的功能。 </p>
<p>在设计的开始考虑软件的规模需求，避免在用户群突然增大的情况下，重写软件。 </p>
<p>12. 性能仅仅是很多设计因素之一 </p>
<p>关注软件设计中的一个重要因素--性能，这好象也是用户最关心的事情。一个性能不佳的软件将不可避免被重写。 </p>
<p>但是你的设计还必须具有可靠性，可用性，便携性和可扩展性。你应该在工程开始就应该定义并区分好这些因素，以便在工作中恰当使用。性能可以是，也可以不是优先级最高的因素，我的观点是，给每个设计因素应有的考虑。 </p>
<p><br />
13. 管理接口 </p>
<p>&#8220;UML User Guide&#8221;（Grady Booch，Ivar Jacobson和Jim Rumbaugh ,Addison Wesley, <br />
1999）中指出，你应该在开发阶段的早期就定义软件模块之间的接口。 </p>
<p>这有助于你的开发人员全面理解软件的设计结构并取得一致意见，让各模块开发小组相对独立的工作。一旦模块的接口确定之后，模块怎样实现就不是很重要了。 </p>
<p>从根本上说，如果你不能够定义你的模块&#8220;从外部看上去会是什么样子&#8221;，你肯定也不清楚模块内要实现什么。 </p>
<p>14. 走近路需要更长的时间 </p>
<p>在软件开发中没有捷径可以走。 </p>
<p>缩短你的在需求分析上花的时间，结果只能是开发出来的软件不能满足用户的需求，必须被重写。 </p>
<p>在软件建模上每节省一周，在将来的编码阶段可能会多花几周时间，因为你在全面思考之前就动手写程序。 </p>
<p>你为了节省一天的测试时间而漏掉了一个bug，在将来的维护阶段，可能需要花几周甚至几个月的时间去修复。与其如此，还不如重新安排一下项目计划。 </p>
<p>避免走捷径，只做一次但要做对（do it once by doing it right）。 </p>
<p>15. 别信赖任何人 </p>
<p>产品和服务销售公司不是你的朋友，你的大部分员工和高层管理人员也不是。 </p>
<p>大部分产品供应商希望把你牢牢绑在他们的产品上，可能是操作系统，数据库或者某个开发工具。 </p>
<p>大部分的顾问和承包商只关心你的钱并不是你的工程（停止向他们付款，看一看他们会在周围呆多长时间）。 </p>
<p>大部分程序员认为他们自己比其他人更优秀，他们可能抛弃你设计的模型而用自己认为更好的。 </p>
<p>只有良好的沟通才能解决这些问题。 </p>
<p>要明确的是，不要只依靠一家产品或服务提供商，即使你的公司（或组织）已经在建模、文档和过程等方面向那个公司投入了很多钱。 </p>
<p>16. 证明你的设计在实践中可行 </p>
<p>在设计的时候应当先建立一个技术原型， 或者称为&#8220;端到端&#8221;原型。以证明你的设计是能够工作的。 </p>
<p>你应该在开发工作的早期做这些事情，因为，如果软件的设计方案是不可行的，在编码实现阶段无论采取什么措施都于事无补。技术原型将证明你的设计的可行性，从而，你的设计将更容易获得支持。 </p>
<p><br />
17. 应用已知的模式 </p>
<p>目前，我们有大量现成的分析和设计模式以及问题的解决方案可以使用。 </p>
<p>一般来说，好的模型设计和开发人员，都会避免重新设计已经成熟的并被广泛应用的东西。 <br />
http://www.ambysoft.com/processPatternsPage.html 收藏了许多开发模式的信息。 </p>
<p>18. 研究每个模型的长处和弱点 </p>
<p>目前有很多种类的模型可以使用,如下图所示。用例捕获的是系统行为需求，数据模型则描述支持一个系统运行所需要的数据构成。你可能会试图在用例中加入实际数据描述，但是，这对开发者不是非常有用。同样，数据模型对描述软件需求来说是无用的。每个模型在你建模过程中有其相应的位置，但是，你需要明白在什么地方，什么时候使用它们。 </p>
<p><br />
19. 在现有任务中应用多个模型 </p>
<p>当你收集需求的时候，考虑使用用例模型，用户界面模型和领域级的类模型。 </p>
<p>当你设计软件的时候，应该考虑制作类模型，顺序图、状态图、协作图和最终的软件实际物理模型。 </p>
<p>程序设计人员应该慢慢意识到，仅仅使用一个模型而实现的软件要么不能够很好地满足用户的需求，要么很难扩展。 </p>
<p>20. 教育你的听众 </p>
<p>你花了很大力气建立一个很成熟的系统模型，而你的听众却不能理解它们，甚至更糟－连为什么要先建立模型都不知道。那么你的工作是毫无意义的。 </p>
<p>教给你开发人员基本的建模知识；否则，他们会只看看你画的漂亮图表，然后继续编写不规范的程序。 </p>
<p>另外， 你还需要告诉你的用户一些需求建模的基础知识。给他们解释你的用例(uses <br />
case)和用户界面模型，以使他们能够明白你要表达地东西。当每个人都能使用一个通用的设计语言的时候（比如UML-译者注），你的团队才能实现真正的合作。 </p>
<p>21. 带工具的傻瓜还是傻瓜 </p>
<p>你给我CAD/CAM工具，请我设计一座桥。但是，如果那座桥建成的话，我肯定不想当第一个从桥上过的人，因为我对建筑一窍不通。 </p>
<p>使用一个很优秀的CASE工具并不能使你成为一个建模专家，只能使你成为一个优秀CASE工具的使用者。成为一个优秀的建模专家需要多年的积累，不会是一周针对某个价值几千美元工具的培训。一个优秀的CASE工具是很重要，但你必须学习使用它，并能够使用它设计它支持的模型。 </p>
<p><br />
22. 理解完整的过程 </p>
<p>好的设计人员应该理解整个软件过程，尽管他们可能不是精通全部实现细节。 </p>
<p>软件开发是一个很复杂的过程，还记得《object-oriented software <br />
process》第36页的内容吗？除了编程、建模、测试等你擅长工作外，还有很多工作要做。 </p>
<p>好的设计者需要考虑全局。必须从长远考虑如何使软件满足用户需要，如何提供维护和技术支持等。 </p>
<p>23. 常做测试，早做测试 </p>
<p>如果测试对你的软件来说是无所谓的，那么你的软件多半也没什么必要被开发出来。 </p>
<p>建立一个技术原型供技术评审使用，以检验你的软件模型。 </p>
<p>在软件生命周期中，越晚发现的错误越难修改，修改成本越昂贵。尽可能早的做测试是很值得的。 </p>
<p>24. 把你的工作归档 </p>
<p>不值得归档的工作往往也不值得做。归档你的设想，以及根据设想做出的决定；归档软件模型中很重要但不很明显的部分。 <br />
给每个模型一些概要描述以使别人很快明白模型所表达的内容。 </p>
<p>25. 技术会变，基本原理不会 </p>
<p>如果有人说&#8220;使用某种开发语言、某个工具或某某技术，我们就不需要再做需求分析，建模，编码或测试&#8221;。不要相信，这只说明他还缺乏经验。抛开技术和人的因素，实际上软件开发的基本原理自20世纪70年代以来就没有改变过。你必须还定义需求，建模，编码，测试，配置，面对风险，发布产品，管理工作人员等等。 </p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/153073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-10-15 20:12 <a href="http://www.blogjava.net/xiaohu/archive/2007/10/15/153073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>恍然大悟！？为什么我们总是比别人钱少</title><link>http://www.blogjava.net/xiaohu/archive/2007/04/19/111877.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Thu, 19 Apr 2007 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/04/19/111877.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/111877.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/04/19/111877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/111877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/111877.html</trackback:ping><description><![CDATA[<p><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.blogjava.net/lidahe/archive/2007/04/17/111426.html"><font color=#4371a6>恍然大悟！？为什么我们总是比别人钱少(转载)</font></a> <br></p>
<p>无意间看到这篇文章，感觉写的很真实，很能反映目前许多人的情况。转载过来与大家分享。 </p>
<p>　　一条猎狗将兔子赶出了窝，一直追赶他，追了很久仍没有捉到。牧羊看到此种情景，讥笑猎狗说"你们两个之间小的反而跑得快得多。" 猎狗回答说："你不知道我们两个的跑是完全不同的！我仅仅为了一顿饭而跑，他却是为了性命而跑呀！"</p>
<strong>目标<br></strong>　　 这话被猎人听到了,猎人想:猎狗说的对啊,那我要想得到更多的猎物,得想个好法子。于是,猎人又买来几条猎狗,凡是能够在打猎中捉到兔子的,就可以得到几根骨头,捉不到的就没有饭吃.这一招果然有用,猎狗们纷纷去努力追兔子,因为谁都不愿意看着别人有骨头吃,自已没的吃.就这样过了一段时间,问题又出现了。大兔子非常难捉到,小兔子好捉.但捉到大兔子得到的奖赏和捉到小兔子得到的骨头差不多,猎狗们善于观察,发现了这个窍门,专门去捉小兔子。慢慢的,大家都发现了这个窍门。猎人对猎狗说:最近你们捉的兔子越来越小了,为什么?猎狗们说:反正没有什么大的区别,为什么费那么大的劲去捉那些大的呢?
<p>　　<strong>动力<br></strong>　　猎人经过思考后,决定不将分得骨头的数量与是否捉到兔子挂钩,而是采用每过一段时间,就统计一次猎狗捉到兔子的总重量.按照重量来评价猎狗,决定一段时间内的待遇。于是猎狗们捉到兔子的数量和重量都增加了。猎人很开心。但是过了一段时间,猎人发现,猎狗们捉兔子的数量又少了,而且越有经验的猎狗,捉兔子的数量下降的就越利害.于是猎人又去问猎狗。猎狗说"我们把最好的时间都奉献给了您,主人,但是我们随着时间的推移会老,当我们捉不到兔子的时候,您还会给我们骨头吃吗?" </p>
<p>　　<strong>长期的骨头</strong><br>　　猎人做了论功行赏的决定。分析与汇总了所有猎狗捉到兔子的数量与重量,规定如果捉到的兔子超过了一定的数量后,即使捉不到兔子,每顿饭也可以得到一定数量的骨头. 猎狗们都很高兴,大家都努力去达到猎人规定的数量。一段时间过后,终于有一些猎狗达到了猎人规定的数量.这时,其中有一只猎狗说:我们这么努力,只得到几根骨头,而我们捉的猎物远远超过了这几根骨头.我们为什么不能给自己捉兔子呢?"于是,有些猎狗离开了猎人,自己捉兔子去了。</p>
<p>　　<strong>骨头与肉兼而有之</strong><br>　　猎人意识到猎狗正在流失，并且那些流失的猎狗像野狗一般和自己的猎狗抢兔子。情况变得越来越糟，猎人不得已引诱了一条野狗，问他到底野狗比猎狗强在那里。野狗说：&#8220;猎狗吃的是骨头，吐出来的是肉啊！&#8221;，接着又道：&#8220;也不是所有的野狗都顿顿有肉吃，大部分最后骨头都没的舔！不然也不至于被你诱惑。&#8221; 于是猎人进行了改革，使得每条猎狗除基本骨头外，可获得其所猎兔肉总量的n，而且随着服务时间加长，贡献变大，该比例还可递增,并有权分享猎人总兔肉的m。就这样，猎狗们与猎人一起努力，将野狗们逼得叫苦连天，纷纷强烈要求重归猎狗队伍。</p>
<p>　　<strong>故事还在继续</strong></p>
<p>　　<strong>只有永远的利益，没有永远的朋友<br></strong>　　日子一天一天地过去，冬天到了，兔子越来越少，猎人们的收成也一天不如一天。而那些服务时间长的老猎狗们老得不能捉到兔子，但仍然在无忧无虑地享受着那些他们自以为是应得的大份食物。终于有一天猎人再也不能忍受，把他们扫地出门，因为猎人更需要身强力壮的猎狗。。。。。 </p>
<p>　　 <strong>成立公司</strong><br>　　被扫地出门的老猎狗们得了一笔不菲的赔偿金，于是他们成立了MicroBone公司。他们采用连锁加盟的方式招募野狗，向野狗们传授猎兔的技巧，他们从猎得的兔子中抽取一部分作为管理费。当赔偿金几乎全部用于广告后，他们终于有了足够多的野狗加盟。公司开始赢利。一年后，他们收购了猎人的家当... </p>
<p>　　<strong>发展公司</strong><br>　　MicroBone公司许诺给加盟的野狗能得到公司n的股份。这实在是太有诱惑力了。这些自认为是怀才不遇的野狗们都以为找到了知音：终于做公司的主人了，不用再忍受猎人们呼来唤去的不快，不用再为捉到足够多的兔子而累死累活，也不用眼巴巴地乞求猎人多给两跟骨头而扮得楚楚可怜。这一切对这些野狗来说，这比多吃两根骨头更加受用。于是野狗们拖家带口地加入了MicroBone，一些在猎人门下的年轻猎口也开始蠢蠢欲动，甚至很多自以为聪明实际愚蠢的猎人也想加入。好多同类型的公司象雨后春笋般地成立了，BoneEase, Bone.com, ChinaBone....一时间，森林里热闹起来。</p>
<p>　　 <strong>F4 的诞生</strong><br>　　猎人凭借出售公司的钱走上了老猎狗走过的路，最后千辛万苦要与MicroBone公司谈判的时候，老猎狗出人意料的顺利答应了猎人，把MicroBone公司卖给了猎人。老猎狗们从此不再经营公司，转而开始写自转《老猎狗的一生》，又写：《如何成为出色的猎狗》，《如何从一只普通猎狗成为一只管理层的猎狗》《猎狗成功秘诀》《成功猎狗500条》《穷猎狗，富猎狗》，并且将老猎狗的故事搬上屏幕，取名《猎狗花园》，四只老猎狗成为了家喻户晓的明星F4. 收版权费，没有风险，利润更高。</p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/111877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-04-19 11:45 <a href="http://www.blogjava.net/xiaohu/archive/2007/04/19/111877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN的安装和配置</title><link>http://www.blogjava.net/xiaohu/archive/2007/04/12/110271.html</link><dc:creator>小虎(年轻)</dc:creator><author>小虎(年轻)</author><pubDate>Thu, 12 Apr 2007 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohu/archive/2007/04/12/110271.html</guid><wfw:comment>http://www.blogjava.net/xiaohu/comments/110271.html</wfw:comment><comments>http://www.blogjava.net/xiaohu/archive/2007/04/12/110271.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohu/comments/commentRss/110271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohu/services/trackbacks/110271.html</trackback:ping><description><![CDATA[<p align=left><strong><span>工具：</span> </strong></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>1.<span> Windows 2003 sp1</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>2. <span>svn-1.3.0-setup.exe <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;</span></span><span>SVN服务端软件</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>3. <span>SVNService.exe&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;</span></span><span>添加到Windows服务需要的工具</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>4. <span>TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi&nbsp;</span><span>SVN客户端软件</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>5.<span> LanguagePack-1.4.0.7501-win32-zh_CN.exe<span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp; </span></span><span>SVN客户端软件的中文语言包</span></span> </p>
<p align=left>&nbsp;</p>
<p align=left><strong><span>相关下载：</span> </strong></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>1．<span>Subversion</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>http://subversion.tigris.org</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>2．客户端软件<span>TortoiseSVN</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>http://tortoisesvn.tigris.org</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Eclipse</span> <span>下使用的插件,需要在线更新</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>更新地址:</span> <span>http://subclipse.tigris.org/update_1.0.x</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>安装指南:</span> <span>http://subclipse.tigris.org/install.html</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p align=left><strong><span>安装SVN服务器</span> </strong><strong></strong></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>1. 安装服务器软件</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>2. 将SVN添加到Windows服务</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>1. 新建一个文件夹用来存放库文件 <span>c:\SVN</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>2. 运行命令:<span>SVNService -install -d -r c:\svn </span><span>安装 Windows 服务</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>3. 通过Windows服务管理平台启动SVN服务</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>4. 其它命令</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1. 改变服务设置:</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>运行命令:<span>SVNService -setup -d -r &lt;newsvnroot&gt;</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>在实际操作中,&lt;newsvnroot&gt;代表与SubVersion服务启动时不同的电子仓库目录.</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>2. 删除服务:</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>运行命令:<span>SVNService -remove</span></span> <strong></strong></p>
<p align=left><strong>&nbsp;</strong></p>
<p align=left><strong><span>安装客户端工具</span> </strong><strong></strong></p>
<p align=left><strong><span><span>&nbsp;&nbsp;&nbsp; </span></span></strong><span>因为安装TortoiseSVN 需要重启系统，所以在这里略过安装步骤</span> </p>
<p align=left><strong>&nbsp;</strong></p>
<p align=left><strong><span>配置SVN</span> </strong><strong></strong></p>
<p align=left><span>1. 配置服务器</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>打开仓库目录下的 <span>conf/svnserve.conf</span> 文件</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>********************************************</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span><span>[general]</span> </span></p>
<p align=left><span># anon-access = read</span> </p>
<p align=left><span># auth-access = write</span> </p>
<p align=left><span>password-db = passwd</span> </p>
<p align=left><span>authz-db = authz</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>--------------------------------------------</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>去掉 <span>password-db = passwd </span><span>和</span><span> authz-db = authz </span><span>的注释</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>前两行为匿名用户的权限</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>后两行为启用配置文件来对用户和权限进行管理</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span><strong><span>注意：所有配置信息必须顶格</span> </strong></span><strong></strong></p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>2. 配置用户</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>打开仓库目录下的 <span>conf/passwd</span> 文件</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>[users]</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>admin</span>=<span>admin&nbsp;</span><span>等号左边为用户名，右边为密码</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>新增用户只需要在这里直接增加即可，如：</span> <span>oksonic</span> <span>=</span> <span>123456</span> </p>
<p align=left>&nbsp;</p>
<p align=left><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span><span>&nbsp;&nbsp;&nbsp; </span>增加好用户以后需要重启SVN服务器</span> </strong></p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>3. 配置工作组</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>打开仓库目录下的 <span>conf/authz </span>文件，文件内容如下：</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>********************************************</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><span># [groups]<span>&nbsp;&nbsp; </span></span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># harry_and_sally = harry,sally</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># [/foo/bar]</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># harry = rw</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># * =</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># [repository:/baz/fuz]</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># @harry_and_sally = rw</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># * = r</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>--------------------------------------------</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>因为所有配置信息都被注释掉了，所以所有的用户都有管理员的权限(所有目录的读/写)</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>[groups]<span>&nbsp;&nbsp;&nbsp; </span></span><span>这里的内容为组的配置</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>把已经建好的两个用户合并为一个分组，用户名之内以逗号分隔，配置内容如下：</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>********************************************</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><span>[groups]</span> </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>admin_group = admin,oksonic</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>--------------------------------------------</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>4. 配置权限</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>SVN 的权限只有两个，1 是<span>只读</span>，2 是<span>读/写</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>例：</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>********************************************</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><span>[/]</span> </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># 指定所有的仓库默认只读</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>* = r</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span># 指定 admin_group 组的用户对库中所有内容具有读/写权限 </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>@admin_group = rw</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>--------------------------------------------</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><span>[/]</span> ：这里代表的仓库的目录，此为根目录</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span><span>* = r</span> : <span>*</span> 号代表所有的用户， <span>r </span>为只读</span> </p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>现在需要建一个项目到仓库中</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>1. 在桌面建一个文件夹，如：<span>SVN测试</span></span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>2. 在目录中新建几个文件和文件夹以作测试</span> </p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><span>&nbsp;&nbsp;&nbsp; </span>3. 使用客户端工具把目录中的所有文件加入到SVN服务器中的 test 目录中</span> <br><br>补充哈: <br>SVN1.4.3 安装和配置: <br><br>1)下载svn-1.4.3-setup.exe,安装的目录为: D:\Subversion ; 仓库目录: F:\Major\Java\ExerciseSVN <br><br>2)由于1.4版本的更新,不需要SVNService.exe(添加到Windows服务需要的工具),先创建SVN服务,命令如下: <br><br>D:\&gt;sc create SVNService binpath= "\"D:\Subversion\bin\svnserve.exe\" --service --root \"F:\Major\Java\ExerciseSVN\"" displayname= "Subversion Server" depend= Tcpip start= auto <br><br>其中SVNService为服务名, start属性为确定SVNService服务的属性,此为自动启动, 注意=左右边的空格,还有""; <br>启动服务: D:\&gt; net start SVNService 停止:D:\&gt; net stop SVNService <br><br>3)创建仓库, D:\&gt;svnadmin create F:\Major\Java\ExerciseSVN <br><br>其实见SVN1.4帮助文档</p>
<img src ="http://www.blogjava.net/xiaohu/aggbug/110271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohu/" target="_blank">小虎(年轻)</a> 2007-04-12 20:34 <a href="http://www.blogjava.net/xiaohu/archive/2007/04/12/110271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>