<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jxb8901</title>
    <description></description>
    <link>http://jxb8901.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>ubuntu on thinkpad x61</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/226166" style="color:red;">http://jxb8901.javaeye.com/blog/226166</a>&nbsp;
          发表时间: 2008年08月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在面板上显示网速、CPU温度和CPU频率<br /><pre name="code" class="java">
sudo apt-get install netmon-applet sensors-applet
sudo chmod +s /usr/bin/cupfreq-selector</pre><br /><br />这样不只可以显示CPU频率，还可以选择以使CPU在特定频率上工作。然后在Gnome面板上添加相应的applet <br /><br />显示笔记本生产商及版本信息：<br />sudo dmidecode -s system-manufacturer<br />sudo dmidecode -s system-product-name<br />sudo dmidecode -s system-version<br />LENOVO<br />7673AN6<br />ThinkPad X61<br /><br />修改笔记本合上时的默认动作为休眠：<br />修改/etc/acpi/events/lidbtn，<br />把其中的action=/etc/acpi/lid.sh改成action/etc/acpi/sleep.sh sleep<br /><br />设置扩展桌面：<br /><pre name="code" class="java">
xrandr --output VGA --auto // 找开第二个显示器
xrandr --output VGA --off // 关闭第二个显示器
xrandr --output VGA --right-of LVDS --auto // 扩展第二个显示到右边
</pre><br /><pre name="code" class="java">
 Section "Screen"
         Identifier      "Default Screen"
         Monitor         "Configured Monitor"
         Device          "Configured Video Device"
         # 以下为需要增加的部分配置
         Monitor         "default"
         Defaultdepth    24
         SubSection      "Display"
                 Depth   24
                 Virtual 2048 768
                 Modes   "1024x768@60"
         EndSubSection
 EndSection
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/226166#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 09 Aug 2008 13:20:08 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/226166</link>
        <guid>http://jxb8901.javaeye.com/blog/226166</guid>
      </item>
      <item>
        <title>vimrc</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/224563" style="color:red;">http://jxb8901.javaeye.com/blog/224563</a>&nbsp;
          发表时间: 2008年08月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="c">
" multi-encoding setting
if has("multi_byte")
"set bomb
set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, untested
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif

set syntax=on
syntax on
set number

:map &lt;F2> :!~/bin/xmms_sitman.sh F2&lt;CR>
:map &lt;F3> :!~/bin/xmms_sitman.sh F3&lt;CR>
:map &lt;F4> :!~/bin/xmms_sitman.sh F4&lt;CR>
:map &lt;F5> :!~/bin/xmms_sitman.sh F5&lt;CR>
:map &lt;F6> :!~/bin/xmms_sitman.sh F6&lt;CR>
:map &lt;F7> :!~/bin/xmms_sitman.sh F7&lt;CR>
:command Now :read !echo `date +'\%Y\%m\%d \%H:\%M:\%S'` &lt;CR>
:map &lt;F12> :Now&lt;CR>kJ$

""""""""""""""""""""""""""""""
" netrw setting
""""""""""""""""""""""""""""""
let g:netrw_browse_split=2
let g:netrw_winsize=30


</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/224563#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Aug 2008 14:52:27 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/224563</link>
        <guid>http://jxb8901.javaeye.com/blog/224563</guid>
      </item>
      <item>
        <title>OGNL &amp; ValueStack 入门</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/223612" style="color:red;">http://jxb8901.javaeye.com/blog/223612</a>&nbsp;
          发表时间: 2008年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          h1. 一个例子<br />请看下面的需求，假设有如下用户对象模型：<br /><pre name="code" class="java">
public interface User {
    public String getName();
    public Date getRegisterDate();
    public Customer getCustomer();
}
public interface Customer {
    public String getId();
    public String getName();
    public boolean isVip();
}
public interface EntCustomer extends Customer {
    public String getTrustId(); // 组织机构代码证号
}
</pre><br />对于给定的用户jack，且该用户所属客户是企业客户，那么我们如何获取该用户的姓名？如何获取用户所属客户的名称？如何判断该用户所属客户是否是VIP客户？如何取jack所属企业的组织机构代码证号？<br /><br />* 采用java代码的方式，我们可以用如下的API调用得到所需信息：<br /><pre name="code" class="java">
jack.getName();
jack.getCustomer().getName();
jack.getCustomer().isVip();
((EntCustomer)jack.getCustomer()).getTrustId();
</pre><br /><br />* 但我们现在在讲述OGNL，因此通过采用OGNL，我们可以用如下方式取得我们所需要的信息：<br /><pre name="code" class="java">
jack.name
jack.customer.name
jack.vip
jack.customer.trustId
</pre><br />由此我们可以看到OGNL的表达方式与java表达方式有以下几点不同：<br />** 不需关注对象类型，不需进行类型转换<br />** 表达方式更简短和直观<br /><br />OGNL表达式最大的优点就是：*简单* 和 *直观*，你不这样认为吗？ 如果你觉得上面的表达式还不够简单和直观，那我们再来看：<br /><pre name="code" class="java">name</pre><br />这也是一个OGNL表达式，也就是取姓名！简单吗？至少足够直观了吧:)<br /><br />h1. 基本概念<br />我们前面看到了OGNL的一个最简单的例子，事实上OGNL确实很简单，如果能理解上面那个例子的用法，那么我们就掌握了OGNL的80%的用法了。<br />上面的例子虽然简单，但其中却含有OGNL的两个最基本的概念：*表达式(expression)* 和 *上下文(context)*，我们先看*表达式*。<br /><br />h3. 表达式<br />OGNL就是表达式！它能让我们用简洁直观的语法表达我们的想法，如同上面的例子一般。简洁直观就是表达式的最大优点！我们知道表达式总是有一个结果，也就是说表达式总是会求值出一个结果，这个结果可能是一个字符串（如名称、组织机构代码证号等），或者是一个布尔值（如是否是VIP客户等），至于这个结果要怎么使用，那就是我们自己来决定的了。<br /><br />h3. 上下文（context）<br />表达式的概念，我相信很好理解，但什么是上下文（context）？简单来说上下文就是环境，表达式求值的环境！还是不理解吗？我们来看一个例子：<br />还是上面最后那个例子：<pre name="code" class="java">name</pre> 细心的你是否会问，这个表达式要取谁的姓名呢？OK，很好！这就是环境，"谁"就存在于环境之中，也就是存在上下文之中。对于不同的环境/上下文，相同的表达式会有不同的结果！而环境/上下文的实质是什么呢？就是一组带名称的对象集合。<br /><div class="quote_title">引用</div><div class="quote_div">思考：表达环境或上下文这个概念的最好的数据结构是什么？</div><br /><br />h3. OGNL上下文概念详解<br />我们前面说上下文就是一组名称-对象对的集合，如下图所示就是一个简单的上下文：<br /><pre name="code" class="java">
user ---> User(name:"jack", ...)
request ---> HttpServletRequest(header: ...)
</pre><br />那么在上面的环境中，我们可以有如下的OGNL表达式：<br /><pre name="code" class="java">
#user.name // 取用户的姓名
#user.age // 取用户年龄
#user.birthday // 取用户生日
#user.customer.name // 取用户所属客户的名称
#request.parameters // 取请求参数
</pre><br />请注意上面表达式中的"#user"和"#request"的用法，"#"表示访问环境/上下文中的对象。<br /><br />现在可以很方便地访问环境中的对象了，那么如果你比较懒惰的话（记住：在程序员群体，懒惰是褒义词！），你是否觉得访问用户的姓名，年龄，生日，等等其它属性如果全部要使用"#user"来访问会不会太麻烦了呢？OK，ONGL的设计者早就考虑了这个问题，我们可以指定user为环境中的特权对象，访问该对象可以不需要使用#user的方式，如下所示代码与上面的完全等价，当然，前提是要预先指定user为特权对象：<br /><pre name="code" class="java">
name // 取用户的姓名
age // 取用户年龄
birthday // 取用户生日
customer.name // 取用户所属客户的名称
#request.parameters // 取请求参数
</pre><br /><br />我们上面所说的"特权对象"在OGNL中称为"根对象"(root)<br /><br />h3. 小结<br />综上所述，理解OGNL表达式的关键是理解其上下文的概念，因为OGNL的上下文概念中引入了"根对象"的概念，所以初学者往往会在这里迷失方向。<br /><br /><div class="quote_title">引用</div><div class="quote_div"><br />OGNL的中文全称是对象图导航语言，也就是说OGNL是一门语言，如同java是一门语言一样。你是否会认为OGNL的作者太夸张了，竟敢把表达式谎称为语言？不，OGNL的语法确实非常简洁，OGNL的代码（我没有说表达式，因为代码是和语法相匹配的词语）通常不会换行，这意味着我们不可能把OGNL的代码写得很长，但是，这并不意味着OGNL的表达能力很弱。事实上，OGNL的语法设计非常简洁，但其功能却相当强大，如果你有兴趣，可以深入阅读OGNL参考手册的集合与lambda章节。<br /></div><br /><br />慢着，事情还未至此结束！struts2对OGNL中的上下文的概念又定义了新的含义，且听我慢慢道来！<br /><br />h3. struts2中的OGNL上下文<br />struts2对OGNL上下文的概念又做了进一步扩充，在struts2中，OGNL上下文通常如下所示：<br /><pre name="code" class="java">
|
                     |--request
                     |
                     |--application
                     |
       context map---|--OgnlValueStack(root) [ user, action, OgnlUtil, ... ]
                     |
                     |--session
                     |
                     |--attr
                     |
                     |--parameters
</pre><br />我们可以使用"#requet"访问HttpServletRequest对象, "#session"访问HttpSession对象，但请注意"根对象"是什么？是ValueStack!<br />那么ValueStack是什么？值栈。也就是一组对象的堆栈。也就是说，在struts2中，根对象不是我们通常的一个对象，而是一组对象。我们可以push新的对象到值栈中，也可以弹出值栈的栈顶对象。如上图所示，假设我们将user对象push到值栈中，那么如下的表达式将与之前我们见过的表达式一样，具有相同的结果：<br /><pre name="code" class="java">
name // 取用户的姓名
age // 取用户年龄
birthday // 取用户生日
customer.name // 取用户所属客户的名称
#request.parameters // 取请求参数
</pre><br />也就是说，我们使用name这个表达式的时候，ONGL会取"根对象"的name属性，但现在根对象是ValueStack！那么访问ValueStack的name属性意味着什么呢？这意味着: ValueStack会先查看栈顶元素是否有name属性，如果有就返回该属性值，否则取出栈顶下的元素，继续查看，直到栈底为止。<br /><br />以上就是OGNL表达式的核心概念，你理解了吗？下一步，你需要了进一步了解OGNL的语法，以发掘其更强大的功能！
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/223612#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 03 Aug 2008 12:53:45 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/223612</link>
        <guid>http://jxb8901.javaeye.com/blog/223612</guid>
      </item>
      <item>
        <title>jira 启停脚本</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/222946" style="color:red;">http://jxb8901.javaeye.com/blog/222946</a>&nbsp;
          发表时间: 2008年08月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          atlassian
# Required-Start:    
# Required-Stop:     
# Should-Start:      $mysql
# Should-Stop:       $mysql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the Jira&Confluence server
# Description:       Start and stop the Jira&Confluence server.
### END INIT INFO
#

tomcat=/home/jxb/apps/atlassian-jira-enterprise-3.6.5-standalone
startup=$tomcat/bin/startup.sh
shutdown=$tomcat/bin/shutdown.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun

start(){
 echo -n $"Starting Jira&Confluence service: "
 #daemon -c
 $startup
 RETVAL=$?
 echo
}

stop(){
 echo $"Stopping Jira&Confluence service: " 
 $shutdown 
 RETVAL=$?
 echo
}

restart(){
  stop
  start
}

status(){
	numproc=`ps -ef | grep atlassian-jira | grep -v "grep atlassian-jira" | wc -l`
	if [ $numproc -gt 0 ]; then
		echo "Jira&Confluence is running..."
	else
		echo "Jira&Confluence is stopped..."
	fi
}


# See how we were called.
case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
status)
 status
 ;;
restart)
 restart
 ;;
*)
 echo $"Usage: $0 {start|stop|status|restart}"
 exit 1
esac

exit 0
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/222946#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Aug 2008 20:43:54 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/222946</link>
        <guid>http://jxb8901.javaeye.com/blog/222946</guid>
      </item>
      <item>
        <title>一个使用线程局部存储(ThreadLocal)技术导致用户会话信息泄露案例的剖析</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/156378" style="color:red;">http://jxb8901.javaeye.com/blog/156378</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个使用线程局部存储(ThreadLocal)技术导致用户会话信息泄露案例的剖析<br /><br />我们的系统是一个B/S架构的WEB系统，采用的是类似struts的基于action的WEB框架，近期系统上线后碰到了一个用户会话信息泄露的问题，虽然问题最终于半天后得到了解决，但对此问题的剖析有利于我们更深地理解与多线程并发相关的线程局部存储(ThreadLocal)技术，故特撰此文与大家共飨。<br /><br />线程局部存储(ThreadLocal)技术是多线程技术中用于解决并发问题的一个最轻量级且使用起来最简单的技术。其原理是将一块内存与线程关联，每个线程访问的的变量都存在于本线程的局部存储区中，因此多个线程间访问相同的变量名时不会产生并发问题。对应就到java中，类ThreadLocal就是JVM用来实现线程局部存储的。<br /><br />我们磁到的问题是这样的，正常情况下用户登录后系统首页会显示用户的账户等信息，但某用户登录后发现其首页显示的却是其他人的信息。当其再次刷新首页后，页面信息显示却又恢复了正常。发生这样的问题后，我们在测试环境下进行了测试，分别使用两个用户在不同的浏览器中登录系统，并同时刷新首页，此时问题被复现了，而且发生此问题的机率还比较高，粗略估计每10笔就有一两笔发生。另外测试中还发现一个现象比较值得注意，就是此问题并非是并发情况下才会发生，当一个用户未发送任何交易时，另一用户多次刷新页面后还有可能会显示前一用户的信息。<br /><br />经验告诉我们，如果一个问题有时发生有时不发生，而且发生的机率不是很高，那么该问题很有可能与多线程并发有关。问题发生后我们首先想到是否是程序中的交易处理类未考虑多线程并发呢？最后的结果表明这个问题确实与多线程并发有关，但却并非是交易类未考虑并发而导致的，事实上系统中的所有交易类都是线程安全的（类似Webwork中的Action类），根本不需考虑多线程并发的问题。为了更好地让大家思考这个问题，下面先描述一下系统中交易的基本处理流程，如下图：<br /><pre name="code" class="java">
----> EncodingFilter, UserSessionFilter ---> MainServlet ---> Transaction ---> JSP
</pre><br />用户发起的交易首先经过一组过滤器进行交易的通用处理，其中包括字符集转换过滤器、用户会话处理过滤器等，其中用户会话过滤器实现了基于线程局部存储技术的用户会话访问（后面会详细描述）。过滤器处理后所有交易全部交由一个主控的Sevlet根据交易名进行交易的转发。具体交易处理类调用相关领域对象实现交易处理，并为JSP页面准备展示所需数据。<br /><br />在上述过程中，因为交易类需要频繁访问用户会话信息，比如获取当前用户的权限信息、获取当前用户的帐户信息等，为了减少参数传递，系统中的RequestContext类实现了获取上述对象的便捷方法。以下是该类的部分方法：<br /><pre name="code" class="java">
public class RequestContext {
	private static ThreadLocal context = new ThreadLocal() {
		 protected synchronized Object initialValue() {
			return new RequestContext();
		}
	};
	
	public static RequestContext get() {
		return (RequestContext) context.get();
	}
	
	public User getUser();
	public UserSession getSession();
	public String getIP();
	...
}
</pre><br />各交易类使用如下方式获取所需信息：<br /><pre name="code" class="java">
User user = RequestContext.get().getUser();
UserSession session = RequestContext.get().getIP();
String ip = RequestContext.get().getIP();
...
</pre><br />系统通过用户会话过滤器拦截所有经由主控Servlet处理的交易，在交易处理前将用户信息注入到一个RequestContext的实例中，然后将该实例与当前线程绑定，这样随后的交易类就可以便利地访问用户会话信息了，相关代码如下：<br /><pre name="code" class="java">
public class UserSessionFilter implements Filter {
	...
	public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
		...
		UserSession session = getSession();
		User user = getUserFromSession(session);
		RequestContext.get().clear();
		RequestContext.get().setSession(session);
		RequestContext.get().setUser(user);
		...
		chain.doFilter(request, response);
		...
	}
	...
}
</pre><br />以上对系统的交易处理流程作了一个大致的介绍，那么回到文章开头的问题中，是什么导致了用户会话信息的泄露呢？也就是说是什么导致了另一个用户可以访问其它用户的RequestContext中的数据呢？<br /><br />答案相当简单，就是因为这个首页交易只是一个纯粹的JSP页面，该交易并未经过用户会话过滤器的处理。有人可能会问，既然该页面并未经过滤器处理，那么该JSP页面对应的处理线程的RequestContext中就不应该有任何用户信息，这样JSP页面上就应该不显示任何内容才对，为什么页面上反而会显示出其它人的用户信息呢？要解答这个问题就要先了解应用服务器是如何使用线程技术处理用户请求的。应用服务器收到一个用户请求后，总是分配一个独立的线程对该请求进行处理，考虑到频繁创建和销毁线程的开销太大，一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程，也就是说当某个请求被处理完后，相应线程并不会被销毁，而是被返回到线程池中以再次响应其它请求。这样一说，大家是不是就明白问题原因所在了呢？<br /><br />是的，当某个用户提交访问页面的请求时，应用服务器会从线程池中取得一个空闲线程以处理该请求，如果此时分配的线程是曾经响应过其它用户请求的线程时，该线程的局部存储中就还保留有其它用户的用户信息，因为系统中所有交易都经由会话过滤器处理过，所以当执行流程转到交易类时，线程的局部存储中已经有了正确的用户信息，此时并不会产生任何问题。而一旦所访问的交易没有经过会话过滤器处理时，页面上就出现仍然存留于线程局部存储中的其它用户的信息了。<br /><br />一旦问题的原因分析清楚了，要解决就很容易。<br /><br /><br />通过以上的剖析，你是否对线程局部存储(ThreadLocal)、线程池等技术有了更深的理解呢？欢迎大家多谈谈自己的看法。
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/156378#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 10:02:33 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/156378</link>
        <guid>http://jxb8901.javaeye.com/blog/156378</guid>
      </item>
      <item>
        <title>windows下常用黑客工具软件</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/129886" style="color:red;">http://jxb8901.javaeye.com/blog/129886</a>&nbsp;
          发表时间: 2007年10月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.technipages.com/downloadview-details-44-Orca_MSI_Editor.html" target="_blank">Orca MSI Editor</a><br />Edit the properties of any MSI. Change the title, and text within the installer. Look at how and where the files are delivered. Enables you to right click any MSI and open with Orca.<br /><br /><a href="http://www.skycn.com/soft/4988.html" target="_blank">InstallRite V2.5c</a><br /> 对于经常需要反复安装软件的朋友们来说，最麻烦的莫过于反复安装软件时那长时间的等待，而InstallRite可以节省您花在这方面的时间。使用过 Ghost等软件的朋友们一定对InstallRite的功能不陌生：Ghost能帮您将整个操作系统及所有已安装的应用程序做一个映像文件，而 InstallRite则是针对目前安装在电脑上的某个应用程序做一个映像文件，更加“专一”。在您安装完InstallRite后，每次当您要安装新的应用程序时，InstallRite都会启动安装监视功能，帮您将所有软件的安装资料储存起来，这些信息包括系统设置、使用者设置及软件的默认值等等。 InstallRite所产生的安装映像文件用可执行文件的方式存储，所以无论您将这个映像文件储存在本地硬盘、光盘还是服务器上，都能正常执行还原程序。<br /><br /><a href="http://www.onlinedown.net/soft/45894.htm" target="_blank">Program Icon Changer 3.7</a><br />程序图标变更软件。该软件可以替换可执行文件的图标。即使你将这个文件拷贝到另一台电脑，图标依旧可以正常显示。支持所有PE可执行文件，即使文件被压缩或是图标尺寸不一样。还可以为.dll文件更改图标。支持提取和保存图标，可将图标保存为BMP和ICO两种格式。<br /><br /><a href="http://www.crsky.com/soft/169.html" target="_blank">W32Dasm v10.0 </a><br />W32Dasm是一个静态反汇编工具，也是破解人常用的工具之一，它也被比作破解人的屠龙刀。W32Dasm10.0修改版是经Killer在W32Dasm8.93基础上修改的，修改后的W32Dasm功能更强大，能完美显示中文字符串及VB程序，内含16进制编辑器，破解修改软件更容易，真可谓是反汇编极品!<br /><br /><a href="http://www.crsky.com/soft/1747.html" target="_blank">Resource Hacker v3.4.0 Build 79</a><br />一个类似于eXeScope的但在某些方面比它还好一些的工具。1. 查看 Win32 可执行和相关文件的资源 (*.exe, *.dll, *.cpl, *.ocx)，在已编译和反编译的格式下都可以。2. 提取 (保存) 资源到文件 (*.res) 格式，作为二进制，或作为反编过的译资源脚本或图像。图标，位图，指针，菜单，对话，字符串表，消息表，加速器，Borland 窗体和版本信息资源都可以被完整地反编译为他们各自的格式，不论是作为图像或 *.rc 文本文件。3. 修改 (替换) 可执行文件的资源。图像资源 (图标，指针和位图) 可以被相应的图像文件 (*.ico, *.cur, *.bmp)，*.res 文件，甚至另一个 *.exe 文件所替换。对话，菜单，字符串表，加速器和消息表资源脚本 (以及 Borland 窗体) 可以通过使用内部资源脚本编辑器被编辑和重新编译。资源也可以被一个 *.res 文件所替换，只要替换的资源与它是同一类型并且有相同的名称。4. 添加新的资源到可执行文件。允许一个程序支持多种语言，或者添加一个自定义图标或位图 (公司的标识等) 到程序的对话中。5. 删除资源。大多数编译器添加了应用程序永远不会用到的资源到应用程序中。删除这些不使用的资源可以减小一个应用程序的大小。<br /><br /><a href="http://www.crsky.com/soft/995.html" target="_blank">eXeScope v6.50</a><br />你想自定义应用软件吗? 例如：更改字体，更改菜单，更改对话框的排列，等等。但你会认为这是不可能的，因为你没有资源文件。eXeScope能在没有资源文件的情况下分析，显示不同的信息，重写可执行文件的资源，包括(EXE，DLL，OCX）等。是方便强大的汉化工具，可以直接修改用 VC++ 及 DELPHI 编制的程序的资源，包括菜单、对话框、字串表等。<br /><br />反汇编类：<br />W32dsm	1.40M	W32dsm最好的反汇编工具 内附中英版本 Gold.exe 为中文版	<br />KillFlower	245K	一款指令过滤器 中文	<br /><br />反编译<br />DeDe 3.5	5.06M	Delphi反编译程序	<br />IDA Pro	11.1M	IDA Pro Advanced 最棒的一个静态反编译软件	<br />decafe	615K	Java反编译程序	<br />AssemblyView	22.7K	.Net反编译程序	<br />DePB1.0	307K	PowerBuilder反编译程序	<br />VBParser	115K	VB pcode反编译程序	<br />unfoxall	1.02M	VFP反编译程序	<br />WinPack	473K	安装程序反编译工具	<br /><br />调试<br />OllyDbg v1.09c	671K	OllyDbg最好的调试工具 必备	<br />softice	2.86M	比较早的调试工具	<br />vbdebug14e	409K	一款调试工具	<br /><br />编辑工具<br />WinHex11.2	392K	WinHex最好的编辑工具 附中文注册破解版	<br />Hex Workshop	2.54M	还不错的编辑工具 附注册码	<br />Rta	399K	一款编辑工具	<br /><br />编译工具<br />ApiList	446K	API列表	<br />turboc2	0.97M	TC不用介绍了吧	<br />RadASM	800K	一款汇编编译器	<br />masm	712K	汇编编译器	<br />masm32v8	2.98K	汇编编译器	<br /><br />脱壳<br />PEiD侦壳	319K	侦察是什么壳	<br />dillodumper	226K	脱Armadillo的壳	<br />AspackDie	27.7K	脱ASPack的壳	<br />Caspr	82.6K	脱ASProtect的壳	<br />stripper	132K	脱ASProtect的壳	<br />Krykiller	66.4K	脱Kryton壳	<br />Safedisc Cleaner	58.9K	脱SafeDisc壳	<br />untElock	39.1K	脱tElock壳	<br />Upxfix	139K	脱UPX壳	<br />WUN	214K	脱wise安装程序	<br />undbpe	10.1K	幻影壳	<br />Aspr loader	3.57K	寻找加壳软件的入口点	<br /><br />加壳<br />UPXShell	343K	UPX加壳工具 附Shell界面	<br />ACProtect	1.35M	加壳工具	<br />Armadillo	1.28M	加壳工具	<br /><br />补丁工具<br />keymake	1M	制作补丁的工具	下载<br />Patcher.zip	56.3K	制作补丁的工具	下载<br /><br />其它<br />SoftSnoop	60.7K	监视工具	<br />Regmon	68K	注册表监视工具	<br />filemon	76.7K	文件监视工具	<br />eXeSc	589K	资源修改工具	<br />Resource Hacker	336K	最好用的资源修改工具
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/129886#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 08 Oct 2007 20:44:32 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/129886</link>
        <guid>http://jxb8901.javaeye.com/blog/129886</guid>
      </item>
      <item>
        <title>javascript中鲜为人知String.replace方法</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/100456" style="color:red;">http://jxb8901.javaeye.com/blog/100456</a>&nbsp;
          发表时间: 2007年07月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          近日看Ext-1.0.1源代码，在Ext.js的第552行有如下代码：<br /><pre name="code" class="java">    format : function(format){
        var args = Array.prototype.slice.call(arguments, 1);
        return format.replace(/\{(\d+)\}/g, function(m, i){
            return args[i];
        });
    }</pre><br />该方法实现如下功能：<br /><pre name="code" class="java">String.format("name is {0} and age is {1}", "John", 12) => name is John and age is 12</pre><br /><br />上述代码中的replace方法的调用很意思，它接收的第二个参数是一个function，而我们通常调用replace方法时第二个参数传递的一般是String。<br /><br />直接上google查找javascript reference，但很少有提到这种用法的。后来在<a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:String:replace#Specifying_a_function_as_a_parameter" target="_blank">mozilla的参考文档</a>中终于找到了这种用法，这里有详细的API及javascript版本兼容性说明。
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/100456#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jul 2007 16:38:59 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/100456</link>
        <guid>http://jxb8901.javaeye.com/blog/100456</guid>
      </item>
      <item>
        <title>SQL也能这样写</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/69328" style="color:red;">http://jxb8901.javaeye.com/blog/69328</a>&nbsp;
          发表时间: 2007年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          根据一个表的数据update另一个表数据的SQL语句通常如下：<br />Mysql语法：<br /><pre name="code" class="java">update T1 inner join (select ID, TYPE, sum(AMOUNT)
as NEW_AMOUNT from T2 group by ID, TYPE) as T3
on T1.ID = T3.ID and T1.TYPE = T3.TYPE 
set T1.AMOUNT = T1.AMOUNT+T3.NEW_AMOUNT</pre><br />SqlServer语法：<br /><pre name="code" class="java">update T1 set T1.AMOUNT = T1.AMONT+T3.NEW_AMOUNT
from T1 inner join (select ID, TYPE, sum(AMOUNT)
as NEW_AMOUNT from T2 group by ID, TYPE) as T3
on T1.ID = T3.ID and T1.TYPE = T3.TYPE </pre><br /><br />但不幸的是上面两种语法均不符合ANSI92的SQL标准，也不能在Hsql中使用。<br />难道ANSI92不支持这样常用的update功能吗？答案是否，使用如下的SQL语句<br />即可实现与上面写法相同的功能：<br /><br /><pre name="code" class="java">update T1 set T1.AMOUNT = T1.AMOUNT+
(select sum(T2.AMOUNT) from T2 
group by T2.ID, T2.TYPE 
having T2.ID=T1.ID and T2.TYPE=T1.TYPE)</pre><br /><br />上述SQL在Hsql1.7.2和Mysql5.1下测试成功，测试数据如下：<br /><br /><pre name="code" class="java">CREATE TABLE T1 (
ID varchar(255), 
TYPE varchar(255), 
AMOUNT decimal
);
CREATE TABLE T2 (
ID varchar(255), 
TYPE varchar(255), 
AMOUNT decimal
);</pre><br /><br /><pre name="code" class="java">delete from T2;
delete from T1;

insert into T2(ID,TYPE,AMOUNT) 
values('0000000001', 'P', 10);
insert into T2(ID,TYPE,AMOUNT) 
values('0000000001', 'P', 20);
insert into T2(ID,TYPE,AMOUNT) 
values('0000000002', 'P', 30);

insert into T2(ID,TYPE,AMOUNT) 
values('0000000001', 'N', 10);
insert into T2(ID,TYPE,AMOUNT) 
values('0000000002', 'N', 20);
insert into T2(ID,TYPE,AMOUNT) 
values('0000000002', 'N', 30);

insert into T1 values('0000000001', 'P', 0);
insert into T1 values('0000000001', 'N', 0);
insert into T1 values('0000000002', 'P', 0);
insert into T1 values('0000000002', 'N', 0);</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/69328#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 09 Apr 2007 18:29:54 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/69328</link>
        <guid>http://jxb8901.javaeye.com/blog/69328</guid>
      </item>
      <item>
        <title>linux常用命令</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/46391" style="color:red;">http://jxb8901.javaeye.com/blog/46391</a>&nbsp;
          发表时间: 2007年01月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          将当前目录中所的jsp文件中的gb2312的字符集声明修改为UTF-8声明<br /><pre name="code" class="java">find . -name "*.jsp"|xargs sed -i -e 's/charset=gb2312/charset=UTF-8/g'</pre><br /><br />将*.java.bak的文件命名为*.java<br />ls -l|awk '{print $8}'|awk -F . '{print $1}'|xargs -I '{}' mv '{}'.java.bak '{}'.java<br /><br />将本目录中的文件由GBK转码为UTF－8，结果文件命名为*.bak<br />find . -name '*.java' |xargs -I '{}' iconv -f GBK -t UTF-8 -o '{}'.bak '{}'<br /><br />全文查找替换<br />find . -name '*.jsp' |xargs sed -i 's/test/test1/g'
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/46391#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 11 Jan 2007 21:33:44 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/46391</link>
        <guid>http://jxb8901.javaeye.com/blog/46391</guid>
      </item>
      <item>
        <title>linux下在shell中判断文件名后缀</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/46366" style="color:red;">http://jxb8901.javaeye.com/blog/46366</a>&nbsp;
          发表时间: 2007年01月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          方式1：<br /><pre name="code" class="java">case "$f" in
	.java) echo "java"
	;;
	*.ftl) echo "ftl"
	;;
esac</pre><br />		<br />方式2：	<br /><pre name="code" class="java">echo build.xml | awk -F. '{print $NF}'</pre><br />上面的命令结果为：<br /><pre name="code" class="java">xml</pre><br /><br />方式3：<br /><pre name="code" class="java">basename build.xml .xml</pre><br />上面的命令结果为：<br /><pre name="code" class="java">build</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/46366#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 11 Jan 2007 17:33:00 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/46366</link>
        <guid>http://jxb8901.javaeye.com/blog/46366</guid>
      </item>
      <item>
        <title>xml转义字符</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/44402" style="color:red;">http://jxb8901.javaeye.com/blog/44402</a>&nbsp;
          发表时间: 2007年01月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">和           &      & amp;
单引号     '      & apos;
双引号     "      & quot;
大于号     >      & gt;
小于号     &lt;      & lt;</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/44402#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 08 Jan 2007 15:31:32 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/44402</link>
        <guid>http://jxb8901.javaeye.com/blog/44402</guid>
      </item>
      <item>
        <title>让lua在sco下编译</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/43634" style="color:red;">http://jxb8901.javaeye.com/blog/43634</a>&nbsp;
          发表时间: 2007年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          将lua/Makefile中的<br /><pre name="code" class="java">PLATS= aix ansi bsd generic linux macosx mingw posix solaris</pre><br />改为<br /><pre name="code" class="java">PLATS= sco aix ansi bsd generic linux macosx mingw posix solaris</pre><br /><br />将lua/src/Makefile中的<br /><pre name="code" class="java">PLATS= aix ansi bsd generic linux macosx mingw posix solaris
...
none:
	@echo "Please choose a platform: $(PLATS)"</pre><br />改为<br /><pre name="code" class="java">PLATS= sco aix ansi bsd generic linux macosx mingw posix solaris
...
none:
	@echo "Please choose a platform: $(PLATS)"
sco:
        $(MAKE) all CC="cc" CFLAGS="-O2" RANLIB=""</pre><br /><br />编译时执行命令：<br /><pre name="code" class="java">make sco
make sco test</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/43634#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 07 Jan 2007 11:29:31 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/43634</link>
        <guid>http://jxb8901.javaeye.com/blog/43634</guid>
      </item>
      <item>
        <title>JavaEye博客中怎样新写一篇Blog? Don't make me think</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/41079" style="color:red;">http://jxb8901.javaeye.com/blog/41079</a>&nbsp;
          发表时间: 2006年12月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天进javaeye首页，点顶部“我的博客”链接，想写点东西，上上下下，左左右右，看了好几遍，没找到“新增文章”的链接或按钮，<br /><br />看到了左边的“博客分类”，心想也许在这里面，点击进去，上上下下又看了几遍，还是未找到； <br /><br />最后看到上面的一个小链接“管理博客”，试着进去，......，原来在这里<img src="/images/smiles/icon_surprised.gif"/><br /><br />一度比较沮丧！<br /><br />想起今天刚看了“别让我思考”一书的第一章：“别让我思考”，终于可以理直气壮地说：robbin，能不能别让我思考？  ^_^
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/41079#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Dec 2006 21:14:06 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/41079</link>
        <guid>http://jxb8901.javaeye.com/blog/41079</guid>
      </item>
      <item>
        <title>linux下如何定时启动图形应用程序</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/41075" style="color:red;">http://jxb8901.javaeye.com/blog/41075</a>&nbsp;
          发表时间: 2006年12月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          linux下使用crontab工具可以方便地定义计划任务，以下设置是每天22：30到23：00每两分种执行一次关机操作（强制休息，防止关机后又重启^_^）<br /><br /><pre name="code" class="java"># m h  dom mon dow   command
30-59/2 22-23 * * * halt -p</pre><br /><br />如下设置是希望每天22：10启动xmms<br /><br /><pre name="code" class="java"># m h  dom mon dow   command
10 22 * * * xmms</pre><br /><br />但上述设置却启动不了xmms，原因何在呢？原来xmms是图形应用，启动时需要有桌面环境，为此只需设置环境变量DISPLAY为:0.0即可：<br /><pre name="code" class="java"># m h  dom mon dow   command
DISPLAY=:0.0
# 22：10启动xmms
10 22 * * * xmms
# 每小时的55和59分锁定屏幕
55,59 * * * * /usr/bin/xlock</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/41075#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Dec 2006 20:49:20 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/41075</link>
        <guid>http://jxb8901.javaeye.com/blog/41075</guid>
      </item>
      <item>
        <title>看看哪家银行缩写最牛［转自QQ群］</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/24951" style="color:red;">http://jxb8901.javaeye.com/blog/24951</a>&nbsp;
          发表时间: 2006年09月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看看哪家银行缩写最牛！ <br />中国建设银行（CBC）："存不存？" <br />中国银行（BC）：" 不存！" <br />中国农业银行（ABC）："啊？不存？" <br />中国工商银行（ICBC）："爱存不存！ " <br />民生银行（CMSB）："存么，傻B！ " <br />招行（CMBC）："存么，白痴 ！" <br />国家开发银行（CDB）："存点吧！" <br />兴业银行（CIB）："存一百！" <br />北京市商业银行（BCCB）："白存，存不？" <br />汇丰银行（HSBC）："还是不存!
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/24951#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 25 Sep 2006 09:11:28 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/24951</link>
        <guid>http://jxb8901.javaeye.com/blog/24951</guid>
      </item>
      <item>
        <title>收藏：Linux必学的60个命令</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/24892" style="color:red;">http://jxb8901.javaeye.com/blog/24892</a>&nbsp;
          发表时间: 2006年09月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这篇文章写得很好，介绍了LINUX下常用的六类命令，在网上广为流传，本想收藏到我的<a href="http://del.icio.us/jxb8901" target="_blank">美味书签</a>，可在GOOGLE上找了半天，也不见一个带目录的版本，这里仅建立这篇文章的链接，以便随时查阅。<br />另：在GOOGLE上搜索后发现，这篇文章被很多人转载，有的注明了转载字样，但未说明出处，有的根本未注明转载字样［或许那是原作？]，有的则将文章改了标题，各种花样，不一而足，足见网民的版权意识之淡薄。<br /><br /><a href="http://zhanjun.net/?q=node/27" target="_blank">Linux必学的60个命令(1)-安装与登陆</a><br />安装和登录命令：login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last；<br /><br /><a href="http://zhanjun.net/?q=node/28" target="_blank">Linux必学的60个命令(2)-文件处理</a><br />文件处理命令：file、mkdir、grep、dd、find、mv、ls、diff、cat、ln；<br /><br /><a href="http://zhanjun.net/?q=node/29" target="_blank">Linux必学的60个命令(3)-系统管理</a><br />系统管理相关命令：df、top、free、quota、at、lp、adduser、groupadd、kill、crontab；<br /><br /><a href="http://zhanjun.net/?q=node/30" target="_blank">Linux必学的60个命令(4)-网络操作</a><br />网络操作命令：ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup；<br /><br /><a href="http://zhanjun.net/?q=node/31" target="_blank">Linux必学的60个命令(5)-系统安全</a><br />系统安全相关命令：passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who；<br /><br /><a href="http://zhanjun.net/?q=node/32" target="_blank">Linux必学的60个命令(6)-其它</a><br />其它命令：tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/24892#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Sep 2006 18:40:29 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/24892</link>
        <guid>http://jxb8901.javaeye.com/blog/24892</guid>
      </item>
      <item>
        <title>HTML,CSS</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/22626" style="color:red;">http://jxb8901.javaeye.com/blog/22626</a>&nbsp;
          发表时间: 2004年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.w3cn.org/" target="_blank">http://www.w3cn.org/</a>
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/22626#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 02 Sep 2004 09:36:47 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/22626</link>
        <guid>http://jxb8901.javaeye.com/blog/22626</guid>
      </item>
      <item>
        <title>Linux中数百种 Windows 软件的免费替代品列表</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/22624" style="color:red;">http://jxb8901.javaeye.com/blog/22624</a>&nbsp;
          发表时间: 2004年09月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          数百种 Windows 软件的免费替代品列表<br />http://www.huihoo.com/gnu/windows100.html
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/22624#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 01 Sep 2004 13:36:35 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/22624</link>
        <guid>http://jxb8901.javaeye.com/blog/22624</guid>
      </item>
      <item>
        <title>smalltalk资源</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/22557" style="color:red;">http://jxb8901.javaeye.com/blog/22557</a>&nbsp;
          发表时间: 2004年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          smalltalk官方网站<br />http://www.smalltalk.org<br /><br />SmallWorld -- A Little Smalltalk Interpreter written in Java<br />http://web.engr.oregonstate.edu/~budd/Books/little/info/SmallWorld/<br /><br />smalltalk电子书: Smalltalk by Example: the Developer's Guide<br />http://www.iam.unibe.ch/%7Educasse/FreeBooks/ByExample/<br /><br />smalltalk的基本介绍[中文]<br />http://www2.linuxforum.net/mhss/smalltalk/squeak.html
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/22557#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Aug 2004 11:39:36 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/22557</link>
        <guid>http://jxb8901.javaeye.com/blog/22557</guid>
      </item>
      <item>
        <title>[转]CVSNT用户管理方案</title>
        <author>jxb8901</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jxb8901.javaeye.com">jxb8901</a>&nbsp;
          链接：<a href="http://jxb8901.javaeye.com/blog/22541" style="color:red;">http://jxb8901.javaeye.com/blog/22541</a>&nbsp;
          发表时间: 2004年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.51cmm.com/CasePanel/CM/No051.htm" target="_blank">http://www.51cmm.com/CasePanel/CM/No051.htm</a><br /><br />CVSNT用户管理方案<br />来自：CSDN.NET 作者：dyroro [2003/12/15]<br />  所有这些操作基于的环境和软件版本：WINDOWS2000 Pro、CVSNT2.0.4、WinCVS1.3.9.1Beta9 在前面的介绍CVSNT配合WinCVS进行用户管理的文章中，已经对CVSNT的用户管理，权限分配进行了比较详细的叙述，但是还有一些概念没有交待清楚，在这里，我会根据项目的实际需要，以及自己的一些经验给出一套用户管理、权限管理方案，在看这篇文章之前你最好已经阅读了前面的一篇文章，对用户的增加删除，权限的修改，等等这些操作能够了解，否则，会有一点困难。<br />  1、 CVSNT的用户验证方式<br />  我们这里所讨论的是工作在pserver方式下。<br />  在CVSNT的文档中给出了两种验证方式，我总结了一下，可以这样称呼：Window和CVSNT混合验证方式，CVSNT独立验证方式。在前面的文章中，我们没有详细的给出这两种方式的内容，所讲述的启示就是混合验证方式。<br />  决定CVSNT工作于何种验证方式是由CVS的管理文件来决定的，这些管理文件处在库的目录下的CVSROOT目录中，这里可以得出结论，对于不同的库，可以给不同的验证方式。所以，在每个库建立的时候要首先设定好这些前提。<br />  下面的操作如果没有特殊指出则都是在客户端来进行管理的，下面首先是对一些控制原理和相关的文件做一些说明，如果你正在进行相关的模拟操作，请停下来暂时停止你的操作，因为这些操作的步骤是有先后的，如果你顺序不对，那么你可能就权限失效，进行不了下面的操作了。<br />  1．1 config文件<br />   在库建立好了以后，你还没有对控制文件进行修改之前，CVSNT是工作在混合验证方式之下的，这个时候，CVS服务器的管理员就是CVSNT的管理员，你以一个管理员身份登陆，检出你要操作的库的CVSROOT模块，看一下文件列表，控制CVSNT的验证工作方式的是config文件，你可以在文件列表中找到它，双击看看其中的内容，这里对我们最重要的就是第一个设置内容，你会看到下面的内容：<br />  # Set this to `no' if pserver shouldn't check system users/passwords<br />  #SystemAuth=yes<br />  第二行就是我们要修改的内容，默认状态是被注释掉的，SystemAuth有两个值yes和no<br />yes：pserver将使用系统用户数据库和passwd文件（这个文件后面会详细讲述）来共同验证（若passwd文件不存在或者文件中没有相应的资料，则用系统用户来进行验证）默认为yes<br />  no：所有的用户必须在passwd中存在，根据passwd的内容来进行用户的验证。<br />  我这里所阐述的方案就是工作在no的下面的，修改完之后提交到服务器，提交完毕服务器就处在CVSNT的独立验证模式下了。在这个工作方式下，NT本地的用户和CVSNT用户没有任何本质的联系和影响（仅仅是要建立一个别名）。<br />  1．2 passwd文件<br />   在讲述上面的时候提到了这个文件，在服务器工作在CVSNT验证模式下的时候，这个文件就可以称之为CVSNT的用户数据库，这个里面存储着用户列表，用户的密码，以及别名的一些信息。默认状态下这个文件是不存在的，所以，如果我们要在CVSNT验证模式下工作，必须建立这个文件。注意：这个文件是不能够在客户端进行修改的。这个文件的内容是相当简单的，就像下面：<br />  bach:ULtgRLXo7NRxs<br />  spwang:1sOp854gDF3DY<br />  melissa:tGX1fS8sun6rY:pubcvs<br />  qproj:XR4EZcEs0szik:pubcvs<br />  这里分别拿第一个用户bach和第三个用户melissa来进行说明，每一行代表一个用户，总共有三部分信息，用户名、密码、本地用户三部分之间使用冒号“:”来进行分割。<br />  用户名：就是登陆CVS的用户名<br />  密 码：用户的密码，这里是经过加密的，如果为空，那么就是空密码<br />  本地用户：CVS用户这个别名对应的本地用户，（跟本地用户没有任何其他关系，仅仅是别名的关系）<br />  如果在本地系统中存在一个用户名bash，那么要在CVS建立一个bach这样的用户就不需要在后面指出对应的系统用户，melissa后面的pubcvs就是系统用户，在本地系统上面存在的用户。对于要用命令增加这两种用户的格式如下：<br />  cvs passwd –a bach<br />  cvs passwd –r pubcvs –a melissa<br />  在库建立的时候可以在服务器上建立一个简单的passwd初始化文件，加一行<br />  cvsadmin:<br />  这样，就给出了一个cvsadmin这个空密码用户（本地系统中有这样的用户，就可以不加到后面去），然后在客户端来进行修改和以后的用户增加工作。注意：在客户端进行其他之前请先首先修改这个密码，以防止别人进行破坏。<br />  在服务器端建立了这个文件以后，就不用再手动进行修改了，当你在客户端进行密码或者用户的增加删除的时候，系统会自动进行这个文件的更新。这个文件是管理着CVSNT系统中的所有的用户，所以，要特别重视，不了解这个文件格式的，不要去随便修改，更加不要尝试在客户端进行修改！<br />  1．3 admin文件<br />  这个文件是指定CVSNT的管理员列表的文件，CVSNT会根据这个文件中的内容来判断一个用户是否是管理员。这个文件的内容很简单，是一个用户列表。类似下面<br />  user1<br />  user2<br />  user3<br />  这些代表user1,user2,user3都是管理员，当然，这些用户必须要存在才能够正确登陆系统来执行管理。<br />  这个文件默认状态下是没有的，但是，可以在客户端进行添加，在你的客户端进行新建这个文件然后add上去再commit一下，这个文件就可以上传到服务器，但是这个时候还没有生效，请修改checkoutlist这个文件，加入admin这一行，checkoutlist也可以在客户端进行修改再提交，这个时候admin就可以被系统自动的build了。<br />  Checkoutlist是维护的一个文件列表，可以放入系统自动build的用户自定义的系统文件列表，注意：对passwd没有用！！<br />  1．4 group文件<br />  这个文件是定义系统的组，我们可以将同样性质的用户归入一个组，然后用给用户赋权限的方式给组赋权限，这样，一个组的用户就会具有同样的权限。Group的内容如下：<br />  group1:user1 user2 user3<br />  group2:me you he<br />  group3:tom honey<br />  有上面可以看出来，这个文件的内容也是相当的简单，首先是组的名称然后是冒号，接着是用户名，多个用户名之间用空格来进行分割。<br />  Group文件可以在客户端进行新建和修改，不用修改checkoutlist这个文件，系统会自动build这个文件并且使之生效。<br />  作为组里面的特定成员还可以赋给特定的权限，权限分为两类c,w,r和n，否定权限是有高的优先级的。<br />  好，上面已经介绍了本方案所涉及到的几个重要的文件以及修改方式。这里再强调一下，passwd只能够再服务器端进行建立和修改，不能够在客户端进行操作！<br />现在根据上面介绍的内容，可以开始你的操作了，下面给出修改顺序，库刚刚建立起来的时候，使用一个服务器上的本地管理员用户进行登陆检出CVSROOT模块。<br />  1、 现在服务器端加上passwd文件，给一个初始的用户，比如cvsadmin:<br />  2、 在客户端增加admin，将cvsadmin加入admin文件，作为出是管理员，并提交加入到库中。<br />  3、 在修改checkoutlist文件，加入admin，使其能够自动build。<br />  4、 最后修改config文件的SystemAuth=no，在提交之前要确认一下你上面的修改是否正确，如果提交了这个文件，CVSNT验证模式就开始生效了！<br />  5、 好，现在请修改你的参数再重新进行的登陆吧。因为你的系统已经切换了工作模式，你当前的用户已经失效了。<br />  完成了上面的步骤，整个服务器就会有效的工作在CVSNT验证模式下了。而group文件在你需要的任何时候可以加入。<br />  在上面的文章关于CVSNT的用户的管理方案的，在这里做一点补充，在后面的操作中全部是针对在客户端使用WinCVS来进行的（出了增加 passwd）文件，其实，在我的实践当中config，passwd，admin，checkoutlist，这些文件的起始修改（初始化）都可以在新建了库以后一起完成，然后再让相应的库的管理员来进行相关的操作。<br />  在我上面的文章中也提到这篇文章是基于另外一篇文章的，在网上可以搜索到关于CVSNT和WINCVS的操作的，在CSDN上也有。不过，自己觉得那份东西有点乱，所以后来自己进行了一点点修改。总想在这里贴出来，不过，图太多了，：（<br />  欢迎进入我的Blog http://scottding.blogger.cn
          <br/>
          <span style="color:red;">
            <a href="http://jxb8901.javaeye.com/blog/22541#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 29 Jul 2004 15:48:00 +0800</pubDate>
        <link>http://jxb8901.javaeye.com/blog/22541</link>
        <guid>http://jxb8901.javaeye.com/blog/22541</guid>
      </item>
  </channel>
</rss>