<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>snowolf</title>
    <description></description>
    <link>http://snowolf.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>axis 自定义对象序列化</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/211663" style="color:red;">http://snowolf.javaeye.com/blog/211663</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          axis 自定义对象序列化,只使用了beanMapping,未说明typeMapping,arrayMapping （参考axis user guide) <br />基于Axis的自定义对象序列化<br />1. 在Axis服务端，注册自定义对象的序列化/反序列化器<br />主要是修改axis安装目录下WEB-INF/server-config.wsdd文件。<br />&lt;service name="SimpleObjectService" provider="java:RPC"><br />  &lt;parameter name="allowedMethods" value="*"/> <br />  &lt;parameter name="className" value="com.whcyit.axis.SimpleObjectService"/><br />  &lt;beanMapping languageSpecificType="java:com.whcyit.axis.SimpleObject" <br />	qname="ns:SimpleObject" xmlns:ns="urn:BeanService"/><br />&lt;/service> <br />注意service/beanMapping的定义。languageSpecificType中定义使用那个类, qname定义类的名称。<br /> <br /> <br />2.  在Axis客户端，注册自定义对象的序列化/反序列化器。<br /> <br /> <br />核心代码如下：<br />//创建调用对象<br />Service service = new Service();<br />Call call = null;<br />call = (Call) service.createCall();<br /> <br />//注册SimpleObject的序列化类型<br />QName qn = new QName("urn:BeanService","SimpleObject");<br />call.registerTypeMapping(SimpleObject.class, qn,<br />        new BeanSerializerFactory(SimpleObject.class, qn),<br />        new BeanDeserializerFactory(SimpleObject.class, qn)); <br /> <br />全部代码示例如下：<br /> <br />//SimpleObject.java<br />//Web Service对象传递的对象，必需继承Serializable<br />package com.whcyit.axis;<br />import java.io.Serializable;<br />public class SimpleObject implements Serializable {       <br />       private static final long serialVersionUID = -6414428095965735488L;       <br />       private int i = 0;<br />       private float f = 0.0f;<br />       private String str = "";<br />       public SimpleObject() { <br />       }<br />       public float getFloat() {<br />              return f;<br />       }<br />       public void setFloat(float f) {<br />              this.f = f;<br />       }       public int getInt() {<br />              return i;<br />      } <br />       public void setInt(int i) { <br />              this.i = i; <br />       } <br />       public String getString() { <br />              return str;<br />       }<br /> <br />       public void setString(String str) {<br />              this.str = str; <br />       } <br />}<br /> <br /><br /> <br />// SimpleObjectService.java <br />//服务程序 <br />package com.whcyit.axis; <br />public class SimpleObjectService {<br />       public String sayHello(String name) {<br />              return "Hello " + name +"!";<br />       }<br /> <br />       public String getString(SimpleObject obj) {<br />              System.out.println("SimpleObjectService getString invoked!"); <br />              return "return by serviced:"+obj.getString();<br />       }<br /> <br />       public SimpleObject createSimpleObject(int i,float f,String str) {<br />              System.out.println("SimpleObjectService createSimpleObject invoked!");               <br />	      SimpleObject so = new SimpleObject();<br />              so.setInt(i);<br />              so.setFloat(f); <br />              so.setString(str); <br />              return so; <br />       }<br /> }<br /> <br /> <br />// SimpleObjectClient.java<br />//客户端调用文件 <br />package com.whcyit.axis; <br />import javax.xml.namespace.QName; <br />import org.apache.axis.client.Call; <br />import org.apache.axis.client.Service; <br />import org.apache.axis.encoding.ser.BeanDeserializerFactory;<br />import org.apache.axis.encoding.ser.BeanSerializerFactory;<br /> <br />public class SimpleObjectClient {<br /> <br />       public static void main(String[] args) {<br />              String ret = "";<br />              try {<br />                     String wsdlUrl = "http://localhost:8080/axis/services/SimpleObjectService?wsdl"; <br />		   String nameSpaceUri = "http://localhost:8080/axis/services/SimpleObjectService"; <br /> <br />                     //创建调用对象 <br />                     Service service = new Service(); <br />                     Call call = null; <br />                     call = (Call) service.createCall();                <br /> <br /> <br />                     //注册SimpleObject的序列化类型 <br />                     QName qn = new QName("urn:BeanService","SimpleObject");<br />                     call.registerTypeMapping(SimpleObject.class, qn, <br />                                   new BeanSerializerFactory(SimpleObject.class, qn), <br />                                   new BeanDeserializerFactory(SimpleObject.class, qn)); <br />                     //调用sayHello<br />                     System.out.println(">>>sayHello");<br />                     call.setOperationName(new QName(nameSpaceUri, "sayHello")); <br />                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl)); <br />                     ret = (String) call.invoke(new Object[] { "liu2" });<br />                     System.out.println("return value is " + ret);<br /> <br />                     //调用getDesc <br />                     System.out.println(">>>getString"); <br />                     SimpleObject so = new SimpleObject(); <br />                     so.setString("hello!"); <br />                     QName getDescQn = new QName(nameSpaceUri, "getString"); <br /> <br />                     call.setOperationName(getDescQn);<br />                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl)); <br />                     ret = (String) call.invoke(new Object[] { so }); <br />                     System.out.println("return value is " + ret);                 <br /> <br /> <br />                     //调用createSimpleObject<br />                     System.out.println(">>>createSimpleObject"); <br />                     QName getObjectQn = new QName(nameSpaceUri, "createSimpleObject"); <br />                     call.setOperationName(getObjectQn); <br />                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl)); <br />                     SimpleObject rtnSO = (SimpleObject) call.invoke(new Object[]<br />				 { new Integer(1),new Float(0.1f),"liu2" }); <br />                     System.out.println("return object " + rtnSO.getString()); <br />              } catch (Exception ex) { <br />                     ex.printStackTrace(); <br />              } <br />      } <br />}<br /> <br />/server-config.wsdd <br />//服务端配置文件<br /> &lt;?xml version="1.0" encoding="UTF-8"?><br />&lt;deployment xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" <br />xmlns="http://xml.apache.org/axis/wsdd/"><br />&lt;handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/><br /> &lt;service name="SimpleObjectService" provider="java:RPC"> <br />  &lt;parameter name="allowedMethods" value="*"/> <br />  &lt;parameter name="className" value="com.whcyit.axis.SimpleObjectService"/> <br />  &lt;beanMapping languageSpecificType="java:com.whcyit.axis.SimpleObject" <br />	qname="ns:SimpleObject" xmlns:ns="urn:BeanService"/><br /> &lt;/service><br />&lt;transport name="http"><br />  &lt;requestFlow><br />    &lt;handler type="URLMapper"/><br />  &lt;/requestFlow><br />&lt;/transport> <br />&lt;/deployment>
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/211663#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 16:46:09 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/211663</link>
        <guid>http://snowolf.javaeye.com/blog/211663</guid>
      </item>
      <item>
        <title>奇怪的 dtproperties 表 </title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/208189" style="color:red;">http://snowolf.javaeye.com/blog/208189</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SQL Server 2000中，当新建一个空的数据库后，得到dtproperties表，为系统表。<br />    SQL Server 2005中dtproperties 表不存在了，取而代之的是sysdiagram (记不住具体的名称了) ，这个bug也不存在了，SQL Server 2005中的系统表和SQL Server 2000有了很大的不同。删除dtproperties 表的同时删除依赖存储过程。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/208189#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jun 2008 12:37:00 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/208189</link>
        <guid>http://snowolf.javaeye.com/blog/208189</guid>
      </item>
      <item>
        <title>MS SQL Server 2005 安装注意事项</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/207955" style="color:red;">http://snowolf.javaeye.com/blog/207955</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近装数据库就是，反反复复，问题重重。<br />总结如下：<br />1.SQL Server 2005 重装失败 <br />问题描述：<br />    SQL Server 2005 卸载之后重新安装，在执行检查时报：对性能监视器计数器注册表值执行系统配置检查失败。有关详细信息，请参阅自述文件或 SQL Server 联机丛书中的“如何在 SQL Server 2005 中为安装程序增加计数器注册表项值”。<br /><br />解决方案：<br />    在开始==>运行==>regedit.exe ,在注册表里找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 里面有Last Counter和Last Help选项，查看其相应的值。<br />    如果你安装的是中文版，在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004里面找到Counter和Help查看它们的最大值，在它们的最大值基础上加2赋给Last Counter和Last Help，确定即可，无需重启。<br />    如果你安装的是英文版，在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009里找到 Counter 和Help  查看它们的最大值，执行上面的操作即可。<br /><br />2.安装后可能禁用了TCP/IP 导致IP方式不能访问 <br />    在 所有程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager 修改 SQL SERVER 2005 网络配置->MSSQLSERVER 的协议，将TCP/IP启用<br /><br />3.安装报表支持<br />    需要先安装SP2补丁，然后安装SQLServer2005_PerformanceDashboard.msi<br />接着执行C:\Program Files\Microsoft SQL Server\90\Tools\PerformanceDashboard\setup.sql
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/207955#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jun 2008 17:27:09 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/207955</link>
        <guid>http://snowolf.javaeye.com/blog/207955</guid>
      </item>
      <item>
        <title>MS SQL Server 2005 无法删除数据库作业</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/207945" style="color:red;">http://snowolf.javaeye.com/blog/207945</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          遇到MS SQL Server 2005 无法删除数据库作业。<br />首先，以sa账户登录，查看以下2个表的数据，如果不为空就有问题。<br /><pre name="code" class="sql">
select * from msdb.dbo.sysmaintplan_subplans
select * from msdb.dbo.sysmaintplan_log
</pre><br />如果不为空，执行以下操作，基本上不用考虑删除哪一条记录，有问题的作业就会在这里。<br />执行<br /><pre name="code" class="sql">
delete  from msdb.dbo.sysmaintplan_subplans 
delete  from msdb.dbo.sysmaintplan_log 
</pre><br />再进行作业操作，可以删除掉了。<img src="/images/smiles/icon_biggrin.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/207945#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jun 2008 17:09:53 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/207945</link>
        <guid>http://snowolf.javaeye.com/blog/207945</guid>
      </item>
      <item>
        <title>Java取得当前路径的方法</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/202412" style="color:red;">http://snowolf.javaeye.com/blog/202412</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          同样是Java的文件移动函数源代码（整个目录移动）中提到的写批处理是经常用到的一个功能：执行文件当前路径的取得。这个其实很简单，用下面的代码从系统的Property中就可以取到：<br />String curDir = System.getProperty("user.dir");<br /><br />另外getProperty还可以取到很多其他我们经常要用到的环境参数，下面列举出了一些：<br />键 相关值的描述<br />java.version Java 运行时环境版本<br />java.vendor Java 运行时环境供应商<br />java.vendor.url Java 供应商的 URL<br />java.home Java 安装目录<br />java.vm.specification.version Java 虚拟机规范版本<br />java.vm.specification.vendor Java 虚拟机规范供应商<br />java.vm.specification.name Java 虚拟机规范名称<br />java.vm.version Java 虚拟机实现版本<br />java.vm.vendor Java 虚拟机实现供应商<br />java.vm.name Java 虚拟机实现名称<br />java.specification.version Java 运行时环境规范版本<br />java.specification.vendor Java 运行时环境规范供应商<br />java.specification.name Java 运行时环境规范名称<br />java.class.version Java 类格式版本号<br />java.class.path Java 类路径<br />java.library.path 加载库时搜索的路径列表<br />java.io.tmpdir 默认的临时文件路径<br />java.compiler 要使用的 JIT 编译器的名称<br />java.ext.dirs 一个或多个扩展目录的路径<br />os.name 操作系统的名称<br />os.arch 操作系统的架构<br />os.version 操作系统的版本<br />file.separator 文件分隔符（在 UNIX 系统中是”/”）<br />path.separator 路径分隔符（在 UNIX 系统中是”:”）<br />line.separator 行分隔符（在 UNIX 系统中是”/n”）<br />user.name 用户的账户名称<br />user.home 用户的主目录<br />user.dir 用户的当前工作目录
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/202412#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 12 Jun 2008 10:57:47 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/202412</link>
        <guid>http://snowolf.javaeye.com/blog/202412</guid>
      </item>
      <item>
        <title>山重水复疑无路，柳暗花明又一村。</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/179506" style="color:red;">http://snowolf.javaeye.com/blog/179506</a>&nbsp;
          发表时间: 2008年04月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本来以为即将失业的我，又重获了新生。<img src="/images/smiles/icon_biggrin.gif"/><br />    就在今年愚人节的那天，我递交了辞职信。当时的那种感觉很复杂，有愤慨，有惋惜，也有解脱后的那种轻松。<br />    我开始回忆这两年的工作生涯。。。<br />    2006年4月，我来到现在的这家公司任Java程序员，任务是对一个已有项目的简要维护。当时，我们只有5-6个人，在东四十条的一件小陋室办公，而且只有我一个人做java，其他人都是做Symbian的，没有带，也没有人可以问，我很无奈。我不知道自己的大老板是谁，也不知道自己维护的东西是个什么玩意儿，有一种没有方向、没有希望、被丢弃的失落感。可是，为了解决肚皮问题，为了不再向家里借钱，就算再苦再没有前途也要撑过去。好在同事们还不错，氛围很好，大家工作的都很愉快。转眼一个月过去了，我们终于告别了陋室级别的工作环境，新的开始即将到来。<br />    2006年5月，公司迁址至外馆斜街，告别了那间小陋室，我们都搬进了新的复式商务楼办公，遇到了许多新面孔，结交了很多新朋友。大家共同为电子书项目而努力，也基于这个项目大家才拥有了今天的这份成就。那个时候，服务器端的开发团队只有4个人。大家都极其富有热情，又极其为自己的项目担忧，怕什么时候会出问题，每个晚上都很难睡得安稳。常常周六一起加班，偶尔晚上加班到很晚才走。现在回想那时一起吃苦的日子，突然觉得很温馨。<br />    2006年11月，功夫不负有心人，我们的项目终于上线了，终于涨了月钱，但同时也意味着我要脱离这个团队了。应公司的需要，成立独立的运管团队，而我就成为了这个团队的主力，负责电子书运营项目的开发。从研发划到运营，我的确有一种失落感。但部门经理对我说在这个部门我会有很大的发展空间，看在涨月钱的份上，我没有抱怨。接手电子书运营项目，是一个挑战。尽管这个项目我最了解，我也参与了运营项目的构建，但是里面的代码质量问题十分严重。简单的说就是，框架凌乱、技术起点低。凭着自己对技术的狂热，我运用新技术把原有运营项目完全重构，同时也为日后开发提供了可以参考的模式。<br />    2007年1月，花了一个多月的时间，新的运营项目已经投入使用了。项目做大了，已经不是我一个人能完成得了了，我终于有了一个搭档，开始了我的管理生涯。年底了，除了每个人都有的过节费，公司给我发了感谢信，还给我发了奖金，让我感到这小一年的奋斗是值得的。<br />    2007年5月，我已有了两个搭档，我们习惯称自己是“后台”。谁让我们做的东西就叫XXX后台呢？除了电子书的后台要归我们管，其他部门的后台也归我们来做。称自己是“后台”一点也不过。这个阶段，我依旧奋斗的编码的第一线，除了后台要维护，还有很多杂七杂八的项目要做，我已明显感到自己的待遇和自己的付出不成正比。部门经理找我谈了话，给我涨了月钱，升了高级程序员，让我兴奋不已。但与第一次涨月钱相比，我少了很多兴奋，更多的是期待。期待什么时候可以摆脱这杂七杂八的项目，期待可以回归研发团队。<br />    2007年6月，借调到其他部门做项目雏形研发。公司给涨了钱，升了职也就意味着你肩头的胆子更重了。一面我要保证现有后台的质量问题，一方面要和兄弟部门配合完成雏形的研发工作，我有种要被撕裂的感觉。其实，到了这个时候，公司的管理问题已经明显暴露了出来。一个高程既要带人负责不同部门的不同项目，又要直接参与其他部门的核心研发任务。在管理上，很难做到保证手头的任务可以保质保量完成。常常哪个需求急，先弄哪个，结果哪个做的都不是很好，都要返工，浪费人力物力，导致工作调度时常是闲的时候闲死，忙的时候忙死。这种状态就这么一直持续了下来，不知道什么时候会终结。尤其赶上公司7月的工作评审，又看到一张张熟悉的面孔，大家一起熬夜，一起加班。不同的是，我不再和他们一个部门，做的不再是同一个项目。<br />    2007年9月，公司迁址至亮马桥。这一次，公司租下了整整一层。工作环境更开阔了，可是，大家的的心却包得更紧了。彼此少了那些难得的开怀笑容，多了很多无奈。<br />    2007年11月，终于那个雏形项目告一段落，项目直接交接给新带的人。连人带项目一起送给兄弟部门。转眼又到了年底，只是今年的年关特别难过。比起去年来说，我付出的要更多，但却没有得到更多。又做项目，又带人，反而连奖金都没有。我开始失落，开始抱怨，自己的社会地位也受到怀疑，越来越觉得不受重视。做得是项目经理的该做的事情，顶着却是高级程序员的头衔，领得仍然是半年前涨过的工资。<br />    2008年3月，公司开始招聘新人。我有幸参加大型招聘会，为公司招贤纳士。一轮一轮的面试，一次一次的评审。我是面试新人，也是在审核自己。我开始在跳与不跳之间徘徊，我已经忍受不了这中没有希望的生活。这个季节，是不是也是自己的跳槽期？到了月底，我开放了简历，接到了面试电话。我开口要了几乎高出自己工资一半的薪水，结果，人事一面通过了。开始等待二面。<br />    2008年4月，转折。愚人节，这是极富决定性的一天，我终于下定决心提交了辞职信。公司同事感到很诧异。那天的心情很复杂，发现自己对公司原来很有感情，也发现自己早在大概3个月前就已经任命为项目经理。我感到太可笑了，我只能说太晚了，当我需要的时候怎么偏偏不给我呢？为什么到了我该离职的时候才让我知道呢？第二天早上，我机械性的来到公司，心情到了低谷。这一天比平时来的都要早，我开始回忆在这里的日日夜夜，等待最后的交接。正当我愣神儿的时候，公司副总裁找我谈话，要我考虑留下来。我依然开口要了几乎高出自己工资一半的薪水，副总裁有点为难，把薪资稍稍降了一点。我也做出了让步，接受了这份薪酬。得到副总裁的认可与信任，我又回归到了电子书部门，依旧负责运营后台的开发。我只能说，回家的感觉真好！～<br />    我开始重新规划我的人生，开始告别曾经的种种不满与抱怨，开始站在公司与下属的角度考虑问题，开始面临即将到来的种种新问题。在辞职这件事上，我赢了！<img src="/images/smiles/icon_biggrin.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/179506#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Apr 2008 15:20:35 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/179506</link>
        <guid>http://snowolf.javaeye.com/blog/179506</guid>
      </item>
      <item>
        <title>【转】从睡相看人的潜意识</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/176287" style="color:red;">http://snowolf.javaeye.com/blog/176287</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有些人的睡相很美，睡姿就像白雪公主 、睡美人一样优雅，看了以后都会忍不住想偷亲他们一下；有些人则很有气势，睡姿成大字型，古代称这种睡姿是皇帝相；另外还有人睡觉竟然可以像时钟一样旋转，每隔一段时间看他，他的头永远在不同的方位。 <br /><br />大字型睡相，即睡觉时仰面朝天，手脚大张。根据五行的说法，这是被称之为“木形”。此类睡相是表示心无一物，是属于天真浪漫的类型。由于心无杂念，因此在睡相中把他潜在的意识完全表露出来了。也唯有这样的人，其睡相才能成为一个“大字型”。 <br /><br />方火形的睡相，此种人睡觉时，双脚挺直，或呈八字形张开，一只脚伸开；另一脚曲起来，两手上下移动。这种人性情非常急躁，但为人却十分耿直，性情方面，热得快也冷得快。 <br /><br />土形睡相，是把手放在胸前，两只手臂弯起，或是两只脚弯起。这种睡相的人性情忧郁，不开朗，其睡姿好象是在吹气一般。有人说，如果睡觉中不断吹气的话，不出七年必死无疑。可见睡觉时不断吹气是有损健康的，而且也会遭致不良的命运。这是由于宿便而导致的结果，如果能排除宿便，就能突破此种状况。 <br /><br />金形睡相，这种睡相是把两手摆在头上，而脚部弯曲，此种人的消化器官十分衰弱。虽然他有金钱缘，但由于他是理论家，所以在人情方面他非常淡薄。<br /><br />水形睡相，此种人几乎都是仰天而睡的，他们往往用手按住自己的胸。此类人表面柔和，但内心却使人难以理解，对于好恶方面表现十分激烈。 <br /><br />通常俯卧睡觉的人肾脏都不好，否则就是肾脏负担过多。不论何人，如果吸收盐分过多，俯卧睡觉就可以感觉良好。换句话说，由此我们可以看出“症状即疗法”的真理。俯卧也是治疗疾病的一种方法。此外，也有一些仰卧无法入睡的人，必向左或右侧着才能入睡，如有此种状况出现，在他上侧部位可能有炎症现象或潜在疾病因子存在。 <br /><br />睡相不好的人，整个晚上要在床上辗转反侧，是想调整白天因过份活跃而感脊椎过于疲劳。这是因肠胃运动不规律现象所产生的自我调节方式。如要矫治，就必须采取正规的脊椎骨矫正方法。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/176287#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 13:50:54 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/176287</link>
        <guid>http://snowolf.javaeye.com/blog/176287</guid>
      </item>
      <item>
        <title>比尔盖茨的十条“金玉良言” </title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/176274" style="color:red;">http://snowolf.javaeye.com/blog/176274</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          比尔盖茨的十条“金玉良言” <br />    1 . 社会充满不公平现象。你先不要想去改造它，只能先适应它。（因为你管不了它）。 <br /><br />　　2 . 世界不会在意你的自尊，人们看的只是你的成就。在你没有成就以前，切勿过分强调自尊。（因为你越强调自尊，越对你不利）。<br /><br />　　3 . 你只是中学毕业，通常不会成为CEO，直到你把CEO职位拿到手为止。（直到此时，人们才不会介意你只是中学毕业）。 <br /><br />　　4 . 当你陷入人为困境时，不要抱怨，你只能默默地吸取教训。（你要悄悄地振作起来，重新奋起）。  <br /><br />　　5 . 你要懂得：在没有你之前，你的父母并不像现在这样“乏味”。你应该想到，这是他们为了抚养你所付出的巨大代价。（你永远要感恩和孝敬他们，才是硬道理）。<br /><br />　　6 . 在学校里，你考第几已不是那么重要，但进入社会却不然。不管你去到哪里，都要分等排名。（社会、公司要排名次，是常见的事，要鼓起勇气竞争才对）。<br /><br />　　7 . 学校里有节假日，到公司打工则不然，你几乎不能休息，很少能轻松地过节假日。（否则你职业生涯中一起跑就落后了，甚至会让你永远落后）。<br /><br />　　8 . 在学校，老师会帮助你学习，到公司却不会。如果你认为学校的老师要求你很严格，那是你还没有进入公司打工。因为，如果公司对你不严厉，你就要失业了。（你必须清醒地认识到：公司比学校更要严格要求自己）。<br /><br />　　9 . 人们都喜欢看电视剧，但你不要看，那并不是你的生活。只要在公司工作，你是无暇看电视剧的。（奉劝你不要看，否则你走上看电视连续剧之路，而且看得津津有味，那你将失去成功的资格）。<br /><br />　　10 . 永远不要在背后批评别人，尤其不能批评你的老板无知、刻薄和无能。（因为这样的心态，会使你走上坎坷艰难的成长之路）。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/176274#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 26 Mar 2008 13:38:13 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/176274</link>
        <guid>http://snowolf.javaeye.com/blog/176274</guid>
      </item>
      <item>
        <title>中国软件行业待遇问题</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/175527" style="color:red;">http://snowolf.javaeye.com/blog/175527</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在这个行业做了差不多3年了，也算是基本上领悟到了中国软件行业的特色。很多人都认为IT行业是阳光产业，做IT行业的都是白领，甚至是金领。但实际上呢？其实，我们就是个代码工人。很多同行一个月500的收入，你信吗？在北京500能做什么？物价飞涨的今天，中国软件行业待遇普遍偏低。<br />    为什么会有500元/月的收入人群，甚至是没有工资？<br />    拿这个价钱的有很多是大学应届毕业生。在学校里埋头学习了那么久，没有实际工作经验。在面试的时候，一再被公司以没有工作经验为由打压薪资标准。最后，甚至以培训、实习的名义进入公司，享受着像学徒工一样的待遇——只有餐补，没有薪水，更别提保险福利了，连交房租都很难保证。由此很多同事住宿公司、日日刷夜，算是原因之一。<br />    那么，这样的公司，以如此低薪招人目的何在？<br />    以如此低薪资招揽新人，目的其实很简单。很多公司技术起点很低，甚至可以说是很落后。他们不需要水平很高的技术员，换句话说，公司的技术主力很可能就是个二道贩子——自身技术并不高深，也未必对技术有着积极进取的强烈愿望，只是为了赚钱应付差事，这种思想的存在导致了中国软件行业技术发展的低迷。公司广招低薪技术人员所做的主要工作无非是两项：一、代码复制；二、徒手测试。可笑吗？代码复制，这是软件行业的大忌！公司技术起点低，又没有在技术上提高的意向，导致软件架构设计诸多不合理。使原本可以复用的代码像死循环一样到处重现。再一个，徒手测试。产品出来了，为了保证质量，就招来大量人员做测试，由于技术实现过程中没有测试用例，更没有单元测试、系统测试做保证，导致最终只能靠人工徒手测试。项目一结束，很多人就被辞掉了。技术没有学到多少，如果自己再不努力点，怕是还会再遇到这样的境遇。这就是我们熟悉的小公司。<br />    当然，并不是所有大学毕业生都是如此的境遇。<br />    一般在校期间为了挣零花钱而去做项目的应届生，或是有技术功底的应届生起初工作时，如果能说会道也能要到3000元/月的薪酬。什么是在校期间做项目？无非是跟着教授做点小项目。项目技术含量完全依赖于教授的实践水准，有的教授无非是看准了学生这样的廉价劳动力。一个过千近万的项目，到了学生手中也就只有区区200元。什么是有技术功底？有志向的人，不限于学校教得那点落伍的东西，自学成才。对感兴趣的计算机语言抱有强烈的热情，对喜爱的技术抱有极大的偏执。他们可以和你讨论技术不知疲倦，对自己坚持的观点毫不动摇。这是典型的技术人才，有主见的技术人才。什么是能说会道？公司管理层总认为能力与工作年限、相关经验直接挂钩。其实不然，软件行业有很多是领悟、自学能力远远高于工作经验的。很多做了3-5年的高级程序员，其能力远不及一个刚入行的程序员。为了避免管理层在这个经验问题上卡壳，要能说会道！合理的扩大自己的经验、工作年限，为自己博得尽可能高的薪酬。3000元的月收入是个分水岭，也有很多同行做了很久也就2000元/月，甚至不及这个数。<br />    终于，入行了，接下来又遇到新问题。<br />    在一个公司安稳工作，期望学到新东西，期望薪酬年年有新高。其实，不然。在一开始进入公司的时候，会发现有很多技术可以学，如果自己上进。用不了多久，主要的技术很快就可以掌握。逐步发现自己的技术开始受限于自己的经理，自己的主张受限于自己的上司。薪水也到了公司内部的标准，再没有升值空间。想走，舍不得；想留，又没有太多价值。十足的鸡肋。这时候公司并不一定在乎你留还是走，对于他们来说，你只是众多廉价劳动力的一员，多一个不多，少一个不少。<br />    抱着这种态度，导致了很多公司的技术始终是一个水准，薪酬只有一个范围。公司为了节约开支，不再研发新技术，导致很多有志向的技术员流失，但是公司也有考虑，既然有走的，就一定有来的。技术起点低，就可以引进很多大学毕业生。又听话、又便宜，就成了恶心循环，接着导致侥幸心理，最后使这行的入行价没有上涨多少，反而保持不变。甚至下跌，悲哀啊。。。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/175527#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 18:18:12 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/175527</link>
        <guid>http://snowolf.javaeye.com/blog/175527</guid>
      </item>
      <item>
        <title>META 标签介绍</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/175461" style="color:red;">http://snowolf.javaeye.com/blog/175461</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近做网站，希望自己的网站能被别的搜索引擎搜索到，就想到了meta，一下是在百度上扫荡来的，呵呵。<br />&lt;META NAME="GENERATOR" CONTENT="Macromedia Dreamweaver MX"><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br />&lt;Meta http-equiv="Content-Language" Content="zh-CN"> <br />&lt;Meta http-equiv="Refresh" Content="5; Url=http://hi.baidu.com/pihi"><br />&lt;Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT"><br />&lt;meta http-equiv="cache-control" content="no-cache"><br />&lt;META name="keywords" content="关键字"><br />&lt;meta name="description" content="描述"><br />&lt;meta name="author" content="作者"><br />&lt;meta name="build" content="日期"><br />&lt;meta name="coprright" content="版权"><br />&lt;meta name="reply-to" content="email"><br />&lt;meta name="robots" content="all"><br />&lt;meta http-equiv="Page-Enter" content="RevealTrans (Duration=3, Transition=23)"> <br />&lt;meta http-equiv="Page-Exit" content="RevealTrans (Duration=3, Transition=23)"> <br />&lt;link rel="shortcut icon" href="favicon.ico"> <br />------------------------------------------------------------------------------------------------------------<br /><br /><br />meta标签分两大部分：HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。 <br /><br /><br />1、Content-Type和Content-Language (显示字符集的设定) <br />         说明：设定页面使用的字符集，用以说明主页制作所使用的文字已经语言，浏览器会根据此来调用相应的字符集显示page内容。<br />          注意：　该meta标签定义了HTML页面所使用的字符集为GB2132，就是国标汉字码。如果将其中的“charset=GB2312”替换成“BIG5”，则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时，IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面Meta标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集，则IE就提示下载。其他的语言也对应不同的charset，比如日文的字符集是“iso-2022-jp ”，韩文的是“ks_c_5601”。<br />          Charset选项：ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集；Content-Language的Content还可以是：EN、FR等语言代码。<br /><br /><br />2、Refresh (刷新) <br />3、Expires (期限)<br />         说明：指定网页在缓存中的过期时间，一旦网页过期，必须到服务器上重新调阅。<br />         注意：必须使用GMT的时间格式，或直接设为0(数字表示多少时间后过期)。 <br /><br /><br />4、Pragma (cach模式) <br />         说明：禁止浏览器从本地机的缓存中调阅页面内容。<br />         注意：网页不保存在缓存中，每次访问都刷新页面。这样设定，访问者将无法脱机浏览。<br /><br /><br />5、Set-Cookie (cookie设定) <br />         说明：浏览器访问某个页面时会将它存在缓存中，下次再次访问时就可从缓存中读取，以提高速度。当你希望访问者每次都刷新你广告的图标，或每次都刷新你的计数器，就要禁用缓存了。通常HTML文件没有必要禁用缓存，对于ASP等页面，就可以使用禁用缓存，因为每次看到的页面都是在服务器动态生成的，缓存就失去意义。如果网页过期，那么存盘的cookie将被删除。<br />          用法：&lt;Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,<br />　　　　　　 21-Oct-98 16:14:21 GMT; path=/"><br />　　注意：必须使用GMT的时间格式。<br /><br /><br />6、Window-target (显示窗口的设定) <br />         说明：强制页面在当前窗口以独立页面显示。<br />　　用法：&lt;Meta http-equiv="Widow-target" Content="_top"><br />　　注意：这个属性是用来防止别人在框架里调用你的页面。Content选项：_blank、_top、_self、_parent。<br /><br /><br />7、Pics-label (网页RSAC等级评定)<br />         说明：在IE的Internet选项中有一项内容设置，可以防止浏览一些受限制的网站，而网站的限制级<br />　　　　　　别就是通过该参数来设置的。<br />　　用法：&lt;META http-equiv="Pics-label" Contect=<br />　　　　　　　　　　　　　　　"(PICS－1.1'http://www.rsac.org/ratingsv01.html'<br />　　　　　　 I gen comment 'RSACi North America Sever' by 'inet@microsoft.com' <br />　　　　　　　for 'http://www.microsoft.com' on '1997.06.30T14:21－0500' r(n0 s0 v0 l0))"> <br />          注意：不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer（IE3.0以上）来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的（n 0 s 0 v 0 l 0）表示该站点不包含不健康内容。级别的评定是由RSAC，即美国娱乐委员会的评级机构评定的，如果你想进一步了解RSAC评估系统的等级内容，或者你需要评价自己的网站，可以访问RSAC的站点：http://www.rsac.org/。<br /><br /><br />8、Page-Enter、Page-Exit (进入与退出) <br />         说明：这个是页面被载入和调出时的一些特效。<br />　　用法：&lt;Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)"><br />　　　　　&lt;Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)"><br />　　注意：blendTrans是动态滤镜的一种，产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果: <br />　　　　　&lt;Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)"><br />　　　　　&lt;Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)"><br />                         <br />                            Duration　　表示滤镜特效的持续时间(单位：秒)<br />　　　　　　　Transition　滤镜类型。表示使用哪种特效，取值为0-23。 <br /><br />                            0 矩形缩小<br />　　　　　　　1 矩形扩大<br />　　　　　　　2 圆形缩小<br />　　　　　　　3 圆形扩大<br />　　　　　　　4 下到上刷新<br />　　　　　　　5 上到下刷新<br />　　　　　　　6 左到右刷新<br />　　　　　　　7 右到左刷新<br />　　　　　　　8 竖百叶窗<br />　　　　　　　9 横百叶窗<br />　　　　　　 10 错位横百叶窗<br />　　　　　　 11 错位竖百叶窗<br />　　　　　　 12 点扩散<br />　　　　　　 13 左右到中间刷新<br />　　　　　　 14 中间到左右刷新<br />　　　　　　 15 中间到上下<br />　　　　　　 16 上下到中间<br />　　　　　　 17 右下到左上<br />　　　　　　 18 右上到左下<br />　　　　　　 19 左上到右下<br />　　　　　　 20 左下到右上<br />　　　　　　 21 横条<br />　　　　　　 22 竖条<br />　　　　　　 23 以上22种随机选择一种 <br /><br /><br />9、MSThemeCompatible (XP主题)<br />          说明：是否在IE中关闭 xp 的主题<br />　　用法：&lt;Meta http-equiv="MSThemeCompatible" Content="Yes"><br />　　注意：关闭 xp 的蓝色立体按钮系统显示样式，从而和win2k 很象。<br />10、IE6 (页面生成器)<br /><br /><br />　　　说明：页面生成器generator，是ie6<br />　　　用法：&lt;Meta http-equiv="IE6" Content="Generator"><br />　　　注意：用什么东西做的，类似商品出厂厂商。<br />11、Content-Script-Type (脚本相关)<br />　　　说明：这是近来W3C的规范，指明页面中脚本的类型。<br />　　　用法：&lt;Meta http-equiv="Content-Script-Type" Content="text/javascript"><br /><br /><br /><br />★NAME变量 <br /><br /><br />　　name是描述网页的，对应于Content（网页内容），以便于搜索引擎机器人查找、分类（目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类）。<br />　　name的value值（name=""）指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值，如：creationdate(创建日期) 、<br />document ID(文档编号)和level(等级)等。<br />　　name的content指定实际内容。如：如果指定level(等级)为value(值)，则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。 <br /><br /><br />　　1、Keywords (关键字)<br />　　　说明：为搜索引擎提供的关键字列表<br />　　　用法：&lt;Meta name="Keywords" Content="关键词1,关键词2，关键词3,关键词4,……"><br />　　　注意：各关键词间用英文逗号“,”隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时，搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如：<br />　　　　　　&lt;Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine"><br />　　　　　　&lt;Meta name="Kyewords" Lang="FR" Content="vacances,grè:ce,soleil"> <br /><br /><br />　　2、Description (简介)<br />　　　说明：Description用来告诉搜索引擎你的网站主要内容。<br />　　　用法：&lt;Meta name="Description" Content="你网页的简述"><br />　　　注意： <br /><br /><br />　　3、Robots (机器人向导)<br />　　　说明：Robots用来告诉搜索机器人哪些页面需要索引，哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。<br />　　　用法：&lt;Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow"><br />　　　注意：许多搜索引擎都通过放出robot/spider搜索来登录网站，这些robot/spider就要用到meta元素的一些特性来决定怎样登录。 <br /><br /><br />　　　 all：文件将被检索，且页面上的链接可以被查询；<br />　　　 none：文件将不被检索，且页面上的链接不可以被查询；(和 "noindex, no follow" 起相同作用)<br />　　　 index：文件将被检索；（让robot/spider登录）<br />　　　 follow：页面上的链接可以被查询；<br />　　　 noindex：文件将不被检索，但页面上的链接可以被查询；(不让robot/spider登录)<br />　　　nofollow：文件将不被检索，页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找) <br /><br /><br />　　4、Author (作者)<br />　　　说明：标注网页的作者或制作组<br />　　　用法：&lt;Meta name="Author" Content="张三，abc@sina.com"><br />　　　注意：Content可以是：你或你的制作组的名字,或Email <br /><br /><br />　　5、Copyright (版权)<br />　　　说明：标注版权<br />　　　用法：&lt;Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved"><br />　　　注意： <br /><br /><br />　　6、Generator (编辑器)<br />　　　说明：编辑器的说明<br />　　　用法：&lt;Meta name="Generator" Content="PCDATA|FrontPage|"><br />　　　注意：Content="你所用编辑器" <br /><br /><br />　　7、revisit-after (重访)<br />　　　说明：<br />　　　用法：&lt;META name="revisit-after" CONTENT="7 days" ><br />　　　注意： <br /><br />写好Keywords(关键字)要注意以下几点： <br /><br /><br />　　●　不要用常见词汇。例如www、homepage、net、web等。 <br /><br /><br />　　●　不要用形容词，副词。例如最好的，最大的等。 <br /><br /><br />　　●　不要用笼统的词汇，要尽量精确。例如“爱立信手机”，改用“T28SC”会更好。<br /><br /><br /><br />★小窍门 <br /><br /><br />　　为了提高搜索点击率，这里还有一些“捷径”可以帮得到你： <br /><br /><br />　　●　为了增加关键词的密度，将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。 <br /><br /><br />　　●　在图像的ALT注释语句中加入关键字。如：&lt;IMG SRC="xxx.gif" Alt="Keywords"> <br /><br /><br />　　●　利用HTML的注释语句，在页面代码里加入大量关键字。用法： &lt;!-- 这里插入关键字 -->
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/175461#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><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, 24 Mar 2008 15:36:05 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/175461</link>
        <guid>http://snowolf.javaeye.com/blog/175461</guid>
      </item>
      <item>
        <title>web html小技巧</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/173461" style="color:red;">http://snowolf.javaeye.com/blog/173461</a>&nbsp;
          发表时间: 2008年03月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天突然想玩玩html，看到opera地址栏的地址前面的图标就很有兴趣，其实之前也玩过。留给记号，以后接着用。<br />&lt;link rel="shortcut icon" href="image/favicon.ico" type="image/x-icon" /> <br />或者<br />&lt;link rel="icon" href="image/favicon.ico" type="image/x-icon" /> <br />在opera下都可以实现地址栏的logo图标。<br />控制滚动条的css样式<br />BODY {<br />SCROLLBAR-FACE-COLOR: #fcfcfc;<br /> SCROLLBAR-HIGHLIGHT-COLOR: #6c6c90;<br /> SCROLLBAR-SHADOW-COLOR: #fcfcfc;<br /> SCROLLBAR-3DLIGHT-COLOR: #fcfcfc;<br /> SCROLLBAR-ARROW-COLOR: #240024;<br /> SCROLLBAR-TRACK-COLOR: #fcfcfc;<br /> SCROLLBAR-DARKSHADOW-COLOR: #48486c;<br /> SCROLLBAR-BASE-COLOR: #fcfcfc<br />}
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/173461#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Mar 2008 17:06:37 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/173461</link>
        <guid>http://snowolf.javaeye.com/blog/173461</guid>
      </item>
      <item>
        <title>aop 学习（一）</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/173374" style="color:red;">http://snowolf.javaeye.com/blog/173374</a>&nbsp;
          发表时间: 2008年03月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近琢磨aop，看了好多大虾的aop例子，对比xml方式与注解方式，先整理一下。<br />根据bencode的介绍<br />圣诞到了， 小A小B 介绍完自己之后，说 "Merry Christmas"。但是这个祝福语由Spring来完成。属于后置通知。<br /><pre name="code" class="java">
public class A {
    public void sayHello() {
        System.out.println("Hello, I'm a");
    }
}
</pre><br /><pre name="code" class="java">
public class B {
	public void sayHi() {
		System.out.println("Hi, I'm b");
	}
}
</pre><br />引导<br /><pre name="code" class="java">
public final class Boot {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		A a = (A) ctx.getBean("a");
		a.sayHello();

		B b = (B) ctx.getBean("b");
		b.sayHi();
	}

}
</pre><br />注解方式<br /><pre name="code" class="java">
@Aspect   
public class SimpleAspect {   
  
    @Pointcut("execution(* org.snowolf.*.say*())")   
    public void simplePointcut() { }   
       
    @AfterReturning(pointcut="simplePointcut()")   
    public void simpleAdvice() {   
        System.out.println("Merry Christmas");   
    }   
}  
</pre><br /><pre name="code" class="java">
	&lt;bean id="a" class="org.snowolf.A" />
	&lt;bean id="b" class="org.snowolf.B" />
	&lt;bean id="simpleAspect"
		class="org.snowolf.SimpleAspect" />
	&lt;aop:aspectj-autoproxy />
</pre><br />完全通过xml配置<br /><pre name="code" class="java">
public class SimpleAspect {   
  public void simpleAdvice() {   
        System.out.println("Merry Christmas");   
    }   
}  
</pre><br /><pre name="code" class="java">
	&lt;bean id="simpleAspect"
		class="org.snowolf.SimpleAspect" />
	&lt;aop:config>
		&lt;aop:pointcut id="point"
			expression="execution(* org.snowolf.*.say*())" />
		&lt;aop:aspect id="simpleAspect" ref="simpleAspect">
			&lt;aop:after-returning method="simpleAdvice"
				pointcut-ref="point" />
		&lt;/aop:aspect>
	&lt;/aop:config>
</pre><br />以上两种方式都可以完成需要，代码也很清晰。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/173374#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Mar 2008 13:48:28 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/173374</link>
        <guid>http://snowolf.javaeye.com/blog/173374</guid>
      </item>
      <item>
        <title>tomcat小技巧</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/145770" style="color:red;">http://snowolf.javaeye.com/blog/145770</a>&nbsp;
          发表时间: 2007年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.apr<br />许多朋友可能在启动tomcat的时候都会看到类似这样的信息：<br /><pre name="code" class="java">org.apache.catalina.core.AprLifecycleListener init
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Java\jre\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS</pre><br />出现这种情况是这表示没有找到APR<br />简要解决办法：去 http://tomcat.heanet.ie/native/ 下载编译好的 tcnative-1.dll 文件因此可以到下面网站下载新版：http://tomcat.heanet.ie/native/，目前最新为1.1.10,拷贝至jdk\bin下，再启动就可以成功加载APR了。 <br /><pre name="code" class="java">org.apache.catalina.core.AprLifecycleListener init
信息: Loaded Apache Tomcat Native library 1.1.10.
org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], random [true].</pre><br />2.URIEncoding<br />有时候在做开发的时候经常发现文本框输入的中文到了程序中成了乱码，其实是因为在端口监听部分缺少编码。<pre name="code" class="java"> URIEncoding="UTF-8" </pre><br />解决方法如下：<br />原始部分<br />8080端口上<br /><pre name="code" class="java">&lt;Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" /></pre><br />修改后<br /><pre name="code" class="java">&lt;Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" /></pre><br />8009端口 ajp跳转服务上，关于这个端口在apache http 做跳转时，要相当注意<br /><pre name="code" class="java">&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /></pre><br />修改后<br /><pre name="code" class="java">&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /></pre><br />这样，服务器得到的中文字符就不会再有乱码了。
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/145770#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 04 Dec 2007 10:25:38 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/145770</link>
        <guid>http://snowolf.javaeye.com/blog/145770</guid>
      </item>
      <item>
        <title>Java 与 C++ 通讯</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/134686" style="color:red;">http://snowolf.javaeye.com/blog/134686</a>&nbsp;
          发表时间: 2007年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前段时间一直忙着做J2EE服务器与C++客户端的项目。终于，项目告一段落，有一些收获在这里与大家分享。<br /><pre name="code" class="java">
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * description: NetIOUtils
 * 仅仅适用于 Java 与 C++ 通讯中，网络流解析与生成使用
 *
 * @author Snowolf
 * @version 1.0
 * @since 1.0
 */
public abstract class NetIOUtils {
    public static final String CHARSET = "UTF-8";

    /**
     * 从流中读出一个定长度字节数组
     *
     * @param is
     * @param s
     * @return
     * @throws IOException
     */
    public static byte[] readBytes(DataInputStream is, int i)
        throws IOException {
        byte[] data = new byte[i];
        is.readFully(data);

        return data;
    }

    /**
     * 从流中读出一个长整型
     *
     * @param is
     * @return
     * @throws IOException
     */
    public static long readLong(DataInputStream is) throws IOException {
        long l = is.readLong();

        return Long.reverseBytes(l);
    }

    /**
     * 从流中读出一个整型
     *
     * @param is
     * @return
     * @throws IOException
     */
    public static int readInt(DataInputStream is) throws IOException {
        int i = is.readInt();

        return Integer.reverseBytes(i);
    }

    /**
     * 从流中读出一个短整型
     *
     * @param is
     * @return
     * @throws IOException
     */
    public static short readShort(DataInputStream is) throws IOException {
        short s = is.readShort();

        return Short.reverseBytes(s);
    }

    /**
     * 从流中读出一个指定长度的字符串
     * 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串
     *
     * @param is
     * @param s
     * @return
     * @throws IOException
     */
    public static String readString(DataInputStream is, short s)
        throws IOException {
        byte[] str = new byte[s];

        is.readFully(str);

        return new String(str, CHARSET);
    }

    /**
     * 从输入流中读字符串
     * 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串
     *
     * @param is
     * @return
     * @throws IOException
     */
    public static String readUTF(DataInputStream is) throws IOException {
        short s = readShort(is);

        return readString(is, s);
    }

    /**
     * 向输出流中写字节数组
     *
     * @param os
     * @param data
     * @throws IOException
     */
    public static void writeBytes(DataOutputStream os, byte[] data)
        throws IOException {
        os.write(data);
    }

    /**
     * 向输出流中 写长整型
     *
     * @param os
     * @param l
     * @throws IOException
     */
    public static void writeLong(DataOutputStream os, long l)
        throws IOException {
        os.writeLong(Long.reverseBytes(l));
    }

    /**
     * 向输出流中 写整型
     *
     * @param os
     * @param i
     * @throws IOException
     */
    public static void writeInt(DataOutputStream os, int i)
        throws IOException {
        os.writeInt(Integer.reverseBytes(i));
    }

    /**
     * 向输出流中 写短整型
     *
     * @param os
     * @param s
     * @throws IOException
     */
    public static void writeShort(DataOutputStream os, short s)
        throws IOException {
        os.writeShort(Short.reverseBytes(s));
    }

    /**
     * 向输出流中 写字符串
     * 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串
     *
     * @param os
     * @param str
     * @throws IOException
     */
    public static void writeString(DataOutputStream os, String str)
        throws IOException {
        os.write(str.getBytes(CHARSET));
    }

    /**
     * 向输出流中 写字符串
     * 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串
     *
     * @param os
     * @param str
     * @throws IOException
     */
    public static void writeUTF(DataOutputStream os, String str)
        throws IOException {
        byte[] data = str.getBytes(CHARSET);
        short s = (short) data.length;
        writeShort(os, s);
        os.write(data);
    }

    /**
     * 读拷贝
     *
     * @param target
     * @param src
     * @param start
     * @param end
     * @throws IOException
     */
    public static void readCopyBytes(byte[] target, byte[] src, int start,
        int end) throws IOException {
        ByteArrayInputStream bais = new ByteArrayInputStream(src);
        bais.read(target, start, end - start + 1);
        bais.close();
    }

    /**
     * 写拷贝
     *
     * @param src
     * @param start
     * @param end
     * @return
     * @throws IOException
     */
    public static byte[] writeCopyBytes(byte[] src, int start, int end)
        throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        baos.write(src, start, end - start + 1);

        byte[] target = baos.toByteArray();
        baos.flush();
        baos.close();

        return target;
    }
}

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/134686#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Tue, 23 Oct 2007 11:14:13 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/134686</link>
        <guid>http://snowolf.javaeye.com/blog/134686</guid>
      </item>
      <item>
        <title>acegi 我该从哪里取到用户的信息</title>
        <author>snowolf</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://snowolf.javaeye.com">snowolf</a>&nbsp;
          链接：<a href="http://snowolf.javaeye.com/blog/24784" style="color:red;">http://snowolf.javaeye.com/blog/24784</a>&nbsp;
          发表时间: 2006年09月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目需要 用acegi做为安全屏障，按acegi 1.0.1 官方自带的sample 拼了一个security-config.xml<br />但是 我不知道 登录后 当点击连接发送 xxx.do的请求后　我在Ｃｏｎｔｒｏｌｌｅｒ中如何得到用户的信息．例如ＩＤ，我该如何得到？<br />org.acegisecurity.userdetails.User中给的信息太少了<br />难不成　为了得到一个用户的ＩＤ我要由ｕｓｅｒｎａｍｅ再检索一遍数据库？<br />或者像众多兄弟一样除了接口几乎统统重写一遍？<br />希望是我文档没看够　大家指教～<br />另外　<br />ｓａｌｔＳｏｕｒｃｅ　我给了ｕｓｅｒｎａｍｅ　提示找不到　Ｕｓｅｒ．ｕｓｅｒｎａｍｅ（）方法　怪异<br />配置如下<br /><br /><pre name="code" class="java">
&lt;bean id="filterChainProxy"
		class="org.acegisecurity.util.FilterChainProxy">
		&lt;property name="filterInvocationDefinitionSource">
			&lt;value>
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
			&lt;/value>
		&lt;/property>
	&lt;/bean>
	&lt;!--  -->
	&lt;bean id="httpSessionContextIntegrationFilter"
		class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />

	&lt;bean id="logoutFilter"
		class="org.acegisecurity.ui.logout.LogoutFilter">
		&lt;!-- URL redirected to after logout -->
		&lt;constructor-arg value="/index.jsp" />
		&lt;constructor-arg>
			&lt;list>
				&lt;ref bean="rememberMeServices" />
				&lt;ref bean="securityContextLogoutHandler" />
			&lt;/list>
		&lt;/constructor-arg>
	&lt;/bean>

	&lt;bean id="securityContextLogoutHandler"
		class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />

	&lt;bean id="authenticationProcessingFilter"
		class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
		&lt;property name="authenticationManager"
			ref="authenticationManager" />
		&lt;property name="authenticationFailureUrl"
			value="/acegilogin.jsp?login_error=1" />
		&lt;property name="defaultTargetUrl" value="/" />
		&lt;property name="filterProcessesUrl"
			value="/j_acegi_security_check" />
		&lt;property name="rememberMeServices" ref="rememberMeServices" />
	&lt;/bean>

	&lt;bean id="securityContextHolderAwareRequestFilter"
		class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter" />

	&lt;bean id="rememberMeProcessingFilter"
		class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
		&lt;property name="authenticationManager"
			ref="authenticationManager" />
		&lt;property name="rememberMeServices" ref="rememberMeServices" />
	&lt;/bean>

	&lt;bean id="anonymousProcessingFilter"
		class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
		&lt;property name="key" value="changeThis" />
		&lt;property name="userAttribute"
			value="anonymousUser,ROLE_ANONYMOUS" />
	&lt;/bean>

	&lt;bean id="exceptionTranslationFilter"
		class="org.acegisecurity.ui.ExceptionTranslationFilter">
		&lt;property name="authenticationEntryPoint">
			&lt;ref bean="authenticationEntryPoint" />
		&lt;/property>
		&lt;property name="accessDeniedHandler">
			&lt;ref bean="accessDeniedHandler" />
		&lt;/property>
	&lt;/bean>

	&lt;bean id="authenticationEntryPoint"
		class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
		&lt;property name="loginFormUrl" value="/acegilogin.jsp" />
		&lt;property name="forceHttps" value="false" />
	&lt;/bean>

	&lt;bean id="accessDeniedHandler"
		class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
		&lt;property name="errorPage" value="/accessDenied.jsp" />
	&lt;/bean>

	&lt;bean id="filterInvocationInterceptor"
		class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
		&lt;property name="authenticationManager"
			ref="authenticationManager" />
		&lt;property name="accessDecisionManager">
			&lt;ref bean="accessDecisionManager" />
		&lt;/property>
		&lt;property name="objectDefinitionSource">
			&lt;value>
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				/secure/extreme/**=ROLE_SUPERVISOR
				/secure/**=IS_AUTHENTICATED_REMEMBERED
				/**=IS_AUTHENTICATED_ANONYMOUSLY
			&lt;/value>
		&lt;/property>
	&lt;/bean>

	&lt;bean id="accessDecisionManager"
		class="org.acegisecurity.vote.AffirmativeBased">
		&lt;property name="allowIfAllAbstainDecisions" value="false" />
		&lt;property name="decisionVoters">
			&lt;list>
				&lt;ref bean="roleVoter" />
				&lt;ref bean="authenticatedVoter" />
			&lt;/list>
		&lt;/property>
	&lt;/bean>

	&lt;bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" />
	&lt;bean id="authenticatedVoter"
		class="org.acegisecurity.vote.AuthenticatedVoter" />

	&lt;bean id="rememberMeServices"
		class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
		&lt;property name="userDetailsService" ref="userDetailsService" />
		&lt;property name="key" value="changeThis" />
	&lt;/bean>

	&lt;!-- 
		验证管理
	-->
	&lt;bean id="authenticationManager"
		class="org.acegisecurity.providers.ProviderManager">
		&lt;property name="providers">
			&lt;list>
				&lt;ref bean="daoAuthenticationProvider" />
				&lt;ref bean="anonymousAuthenticationProvider" />
				&lt;ref bean="rememberMeAuthenticationProvider" />
			&lt;/list>
		&lt;/property>
	&lt;/bean>

	&lt;bean id="anonymousAuthenticationProvider"
		class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
		&lt;!-- 未明确 -->
		&lt;property name="key" value="changeThis" />
	&lt;/bean>
	&lt;bean id="rememberMeAuthenticationProvider"
		class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
		&lt;!-- 未明确 -->
		&lt;property name="key" value="changeThis" />
	&lt;/bean>

	&lt;!-- 
		dao层验证 暂时由数据库数据校验完成
		可对数据库密码字段进行解密
		可替换为在数据库层提取数据后 解析密码 然后核对
	-->
	&lt;bean id="daoAuthenticationProvider"
		class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
		&lt;property name="userDetailsService" ref="userDetailsService" />
		&lt;property name="userCache">
			&lt;ref bean="userCache" />
		&lt;/property>
		&lt;!--property name="saltSource">
			&lt;ref bean="saltSource" />
			&lt;/property>
			&lt;property name="passwordEncoder">
			&lt;ref bean="passwordEncoder" />
			&lt;/property-->
	&lt;/bean>

	&lt;bean id="saltSource"
		class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource">
		&lt;property name="userPropertyToUse">
			&lt;value>username&lt;/value>
		&lt;/property>
	&lt;/bean>

	&lt;bean id="passwordEncoder"
		class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />

	&lt;!-- 
		以下3项为用户信息缓存设置
		减少数据库操作
	-->
	&lt;bean id="userCache"
		class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
		&lt;property name="cache">
			&lt;ref bean="cache" />
		&lt;/property>
	&lt;/bean>

	&lt;bean id="cache"
		class="org.springframework.cache.ehcache.EhCacheFactoryBean">
		&lt;property name="cacheManager">
			&lt;ref bean="cacheManager" />
		&lt;/property>
		&lt;property name="cacheName" value="userCache" />
	&lt;/bean>

	&lt;bean id="cacheManager"
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		&lt;property name="configLocation">
			&lt;value>/WEB-INF/ehcache.xml&lt;/value>
		&lt;/property>
	&lt;/bean>

	&lt;!-- 
		可以替换为任何 UserDetailsService 接口的实现类 
		如 org.acegisecurity.userdetails.memory.InMemoryDaoImpl
	-->

	&lt;bean id="userDetailsService"
		class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
		&lt;property name="dataSource">
			&lt;ref bean="dataSource" />
		&lt;/property>
	&lt;/bean>

	&lt;!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
	&lt;bean id="loggerListener"
		class="org.acegisecurity.event.authentication.LoggerListener" />
&lt;/beans>

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://snowolf.javaeye.com/blog/24784#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Sep 2006 17:32:17 +0800</pubDate>
        <link>http://snowolf.javaeye.com/blog/24784</link>
        <guid>http://snowolf.javaeye.com/blog/24784</guid>
      </item>
  </channel>
</rss>