<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>挨踢也疯狂 - 菠菜</title>
    <description>彪悍の人生无需解释</description>
    <link>http://gimgen1026.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>java进制互转</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/186740" style="color:red;">http://gimgen1026.javaeye.com/blog/186740</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          十进制转成十六进制：<br />Integer.toHexString(int i)<br />十进制转成八进制<br />Integer.toOctalString(int i)<br />十进制转成二进制<br />Integer.toBinaryString(int i) <br /><br />十六进制转成十进制<br />Integer.valueOf("FFFF",16).toString()<br />八进制转成十进制<br />Integer.valueOf("876",8).toString()<br />二进制转十进制<br />Integer.valueOf("0101",2).toString()<br /><br /><pre name="code" class="java">package com.ask.test;

public class Test16to2 {
 public static void main(String[] args) {
  String a = Integer.valueOf("E4E2C4",16).toString();
  System.out.println("16进制数据”E4E2C4“对应的10进制数据是：" + a);
  String b = Integer.toBinaryString(Integer.parseInt(a));
  System.out.println("16进制数据”E4E2C4“对应的2进制数据是：" + b);
 }
}</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/186740#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Fri, 25 Apr 2008 13:31:06 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/186740</link>
        <guid>http://gimgen1026.javaeye.com/blog/186740</guid>
      </item>
      <item>
        <title>hibernate自动建表</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/186452" style="color:red;">http://gimgen1026.javaeye.com/blog/186452</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          方案一<br />在hibernate.cfg.xml中添加：<br /><div class="quote_title">引用</div><div class="quote_div">&lt;properties>    <br />  &lt;property name="hibernate.hbm2ddl.auto" value="create" /><br />&lt;/properties></div><br />value的值可选项如下：<br /><div class="quote_title">引用</div><div class="quote_div"><ul><li>validate               加载hibernate时，验证创建数据库表结构</li><li>create                  每次加载hibernate，重新创建数据库表结构。</li><li>create-drop        加载hibernate时创建，退出是删除表结构</li><li>update                 加载hibernate自动更新数据库结构</li></ul></div><br /><br />方案二<br />用自动生成代码后，在/src下面有一个jdbc.properties文件，这里加一句hibernate.hbm2ddl.auto=update。值的可选项同上。
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/186452#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 24 Apr 2008 16:31:02 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/186452</link>
        <guid>http://gimgen1026.javaeye.com/blog/186452</guid>
      </item>
      <item>
        <title>Spring常用Interface&amp;Class，为自己make plan</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/185363" style="color:red;">http://gimgen1026.javaeye.com/blog/185363</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近对spring感兴趣，基本原理总算通过Spring In Action看明白了<br />剩下的事情就是看API了<br />我个人觉得spring掌握基本原理就足够了，然后看点自己能用到的Class以及context配置方式。不知道我的理解对不对，个人见解而已 -_-<br />下面我要为自己的spring学习制定计划，遍个list，就像刚才说的那样，先熟悉熟悉经常会用到的class或interface：<br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.aop.ClassFilter<br />org.springframework.aop.IntroductionInterceptor<br />org.springframework.aop.MethodMatcher<br />org.springframework.aop.Pointcut<br />org.springframework.aop.MethodBeforeAdvice<br />org.springframework.aop.BeforeAdvice<br />org.springframework.aop.AfterReturningAdvice<br />org.springframework.aop.ThrowsAdvice<br />org.springframework.aop.framework.AopConfigException<br />org.springframework.aop.framework.ProxyFactoryBean<br />org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator<br />org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator<br />org.springframework.aop.support.ControlFlowPointcut<br />org.springframework.aop.support.DefaultIntroductionAdvisor<br />org.springframework.aop.support.DefaultPointcutAdvisor<br />org.springframework.aop.support.DelegatingIntroductionInterceptor<br />org.springframework.aop.support.NameMatchMethodPointcutAdvisor<br />org.springframework.aop.support.Pointcuts<br />org.springframework.aop.support.RegExpPointcutAdvisor</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.beans.factory.BeanFactory<br />org.springframework.beans.factory.BeanFactoryAware<br />org.springframework.beans.factory.config.CustomEditorConfigurer<br />org.springframework.beans.factory.config.PropertyPlaceholderConfigurer<br />org.springframework.beans.factory.xml.XmlBeanFactory<br />org.springframework.beans.propertyeditors.URLEditor</div><div class="quote_title">引用</div><div class="quote_div">org.springframework.context.ApplicationContext<br />org.springframework.context.support.FileSystemXmlApplicationContext<br />org.springframework.context.support.ResourceBundleMessageSource</div><div class="quote_title">引用</div><div class="quote_div">org.springframework.dao.DataAccessException</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean<br />org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean</div><div class="quote_title">引用</div><div class="quote_div">org.springframework.jdbc.core.JdbcTemplate<br />org.springframework.jdbc.datasource.DataSourceTransactionManager<br />org.springframework.jdbc.datasource.DriverManagerDataSource</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.jms.JmsExceptions<br />org.springframework.jms.core.JmsTemplate<br />org.springframework.jms.core.MessageCreator<br />org.springframework.jms.support.converter.MessageConverter<br />org.springframework.jms.support.converter.SimpleMessageConverter</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.jndi.JndiObjectFactoryBean</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.mail.SimpleMailMessage<br />org.springframework.mail.javamail.JavaMailSenderImpl</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.metadata.commons.CommonsAttributes</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.orm.hibernate.HibernateTemplate<br />org.springframework.orm.hibernate3.LocalSessionFactoryBean<br />org.springframework.orm.hibernate3.HibernateTransactionManager<br />org.springframework.orm.hibernate3.support.HibernateDaoSupport<br />org.springframework.orm.ibatis.SqlMapClientFactoryBean<br />org.springframework.orm.ibatis.SqlMapClientTemplate<br />org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean<br />org.springframework.orm.jdo.JdoTemplate<br />org.springframework.orm.jdo.JdoTransactionManager<br />org.springframework.orm.ojb.PersistenceBrokerTransactionManager<br />org.springframework.orm.ojb.support.LocalDataSourceConnectionFactory<br />org.springframework.orm.ojb.support.LocalOjbConfigurer</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.payment.PaymentServiceImpl</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.remoting.RemoteAccessException<br />org.springframework.remoting.caucho.BurlapProxyFactoryBean<br />org.springframework.remoting.caucho.BurlapServiceExporter<br />org.springframework.remoting.caucho.HessianProxyFactoryBean<br />org.springframework.remoting.caucho.HessianServiceExporter<br />org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean<br />org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter<br />org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean<br />org.springframework.remoting.rmi.RmiProxyFactoryBean<br />org.springframework.remoting.rmi.RmiServiceExporter</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.scheduling.quartz.CronTriggerBean<br />org.springframework.scheduling.quartz.JobDetailBean<br />org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean<br />org.springframework.scheduling.quartz.QuartzJobBean<br />org.springframework.scheduling.quartz.SchedulerFactoryBean<br />org.springframework.scheduling.quartz.SimpleTriggerBean<br />org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean<br />org.springframework.scheduling.timer.ScheduledTimerTask<br />org.springframework.scheduling.timer.TimerFactoryBean</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.test.AbstractTransactionalDataSourceSpringContextTests</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.transaction.TransactionDefinition<br />org.springframework.transaction.interceptor.DefaultTransactionAttribute<br />org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource<br />org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource<br />org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor<br />org.springframework.transaction.interceptor.TransactionInterceptor<br />org.springframework.transaction.interceptor.TransactionProxyFactoryBean<br />org.springframework.transaction.jta.JtaTransactionManager<br />org.springframework.transaction.support.TransactionTemplate</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.validation.Validator</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.servlet.DispatcherServlet<br />org.springframework.web.servlet.HandlerMapping<br />org.springframework.web.servlet.ViewResolver<br />org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping<br />org.springframework.web.servlet.handler.SimpleMappingExceptionResolver<br />org.springframework.web.servlet.handler.SimpleUrlHandlerMapping<br />org.springframework.web.servlet.handler.commonsattributes.PathMap</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.servlet.mvc.AbstractCommandController<br />org.springframework.web.servlet.mvc.AbstractController<br />org.springframework.web.servlet.mvc.AbstractWizardFormController<br />org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter<br />org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver<br />org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver<br />org.springframework.web.servlet.mvc.throwaway.ThrowawayControllerHandlerAdapter</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.servlet.support.BindStatus</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.servlet.view.BeanNameViewResolver<br />org.springframework.web.servlet.view.InternalResourceViewResolver<br />org.springframework.web.servlet.view.JstlView<br />org.springframework.web.servlet.view.ResourceBundleViewResolver<br />org.springframework.web.servlet.view.XmlFileViewResolver<br />org.springframework.web.servlet.view.document.AbstractExcelView<br />org.springframework.web.servlet.view.document.AbstractPdfView<br />org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer<br />org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver<br />org.springframework.web.servlet.view.tiles.TilesConfigurer<br />org.springframework.web.servlet.view.tiles.TilesView<br />org.springframework.web.servlet.view.velocity.VelocityConfigurer<br />org.springframework.web.servlet.view.velocity.VelocityViewResolver</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.context.ContextLoaderListener<br />org.springframework.web.context.ContextLoaderServlet<br />org.springframework.web.context.WebApplicationContext<br />org.springframework.web.context.support.PerformanceMonitorListener<br />org.springframework.web.context.support.WebApplicationContextUtils</div><br /><div class="quote_title">引用</div><div class="quote_div">org.springframework.web.struts.ActionSupport<br />org.springframework.web.struts.ContextLoaderPlugIn<br />org.springframework.web.struts.DelegatingActionProxy<br />org.springframework.web.struts.DelegatingRequestProcessor<br />org.springframework.web.struts.DelegatingTilesRequestProcessor</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/185363#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Tue, 22 Apr 2008 11:02:24 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/185363</link>
        <guid>http://gimgen1026.javaeye.com/blog/185363</guid>
      </item>
      <item>
        <title>CHM文件打不开</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/158151" style="color:red;">http://gimgen1026.javaeye.com/blog/158151</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: darkblue"><span style="font-size: large"><strong>转自：百度知道</strong></span></span><br /><br /><br />最近经常听到朋友说chm文件打不开，自己也经常遇到，网上搜索后把方法总结： <br /><strong><span style="color: red">一.如果不能打开，可这样恢复文件关联</span></strong> <br />1、开始运行，输入：regsvr32 C:\windows\system32\hhctrl.ocx ，确定，重新关联文件。 <br />2、执行一下windows目录里的hh.exe 。 <br />有时候chm文件放在中文目录就不行。包括中文chm名字。试着把文件考出来.中文名字一改. <br /><br /><strong><span style="color: red">二.</span></strong>1.在微软网站上下载hhupd.exe,安装hh.exe后并运行。 <br />2.实际上,下载hhupd.exe后,运行后就可以了。这个东西大小为461kb 3.在c:\windows\system32里找到“Hhctrl.ocx”文件,然后运行:“regsvr32“c:\windows\system32\hhctrl.ocx... <br />网上的解决方法不可行，下载不了hhupd.exe.我直接执行regsvr32 c:\windows\system32\hhctrl.ocx就ok了。 <br /><br />解决方法2是： <br />1，右键关联chm文件的“打开方式”到\Windows\HH.exe <br />2，在命令行运行regsvr32 itss.dll <br />3，在命令行运行regsvr32 hhctrl.ocx <br /><br /><strong><span style="color: red">三.</span></strong>也许是 HH.EXE 所必需的某个组件出了问题。但是不知道 HH.EXE 会用到些什么组件，所以上网查了一下，有人建议重新注册 hhctrl.ocx。我在系统目录下找到了 hhctrl.ocx，重新注册一下 hhctrl.ocx 试试：regsvr32 hhctrl.ocx。依然不能正常阅读 CHM。 <br /><br />既然如此，很有可能是协议出了问题。HH.EXE 用的是 ms-its 等协议，这些协议应该是由某个 DLL 文件提供服务的。问题是，是什么 DLL 呢？于是再用 Google 搜索 ms-its 协议。终于找到了，原来是一个 itss.dll 在做服务。不过网上查到的解决方案是修改注册表。 <br /><br />要修改 ItssRestrictions 注册表项以启用特定的安全区域，请按照下列步骤操作： <br />1. 单击“开始”，单击“运行”，键入 regedit，然后单击“确定”。 <br />2. 找到并单击下面的子项： <br />HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions <br />注意：如果该注册表子项不存在，则使用方法 1 中的步骤 2a 和 2b 创建该子项。 <br />3. 右键单击“ItssRestrictions”子项，指向“新建”，然后单击“DWORD 值”。 <br />4. 键入 MaxAllowedZone，然后按 Enter 键。 <br />5. 右键单击“MaxAllowedZone”值，然后单击“修改”。 <br />6. 在“数值数据”框中，键入 0 至 4 之间的一个数字，然后单击“确定”。 <br />7. 退出注册表编辑器。 <br />注意：默认情况下，“MaxAllowedZone”值设置为 0。下表摘要列出了“MaxAllowedZone”值对各个项的解释。 MaxAllowedZone 本地计算机区域 本地 Intranet 区域 受信任的站点区域 Internet 区域 受限站点区域 <br />0 允许 阻止 阻止 阻止 阻止 <br />1 允许 允许 阻止 阻止 阻止 <br />2 允许 允许 允许 阻止 阻止 <br />3 允许 允许 允许 允许 阻止 <br />4 允许 允许 允许 允许 允许 <br /><br />注册表修改之后还是不能打开！ <br />试试偷懒的办法吧——重新注册DLL：regsvr32 itss.dll。 <br /><br /><strong><span style="color: red">四.操作系统的语言不是中文（经常出现这种情况）</span></strong> <br />1.看看你的 OS 是不是中文的 OS ？ 如果你的 OS 不是 中文的，那么到 Control Pane 中看看那个“语言和区域” 的option， 打开看看“区域选项” 是不是中国，这个选项对一些软件还是有一些影像的。 <br />2.如果你的CHM文件是中文的，可能存在缺省语言设置问题。可能你用是的英文版的WINDOWS，把RAGIONAL AND LANGUAGE OPTIONS中的LANGUAGE 和ADVANCED 中的 语言和国家选项都设置成中文（PRC）。就可以了 <br /><br /><strong><span style="color: red">五.可以试试改变此文件的名字</span></strong>.比如去掉多余的符号 <br /><br /><strong><span style="color: red">六.如果都不能，最后一招就是，把电子书CHM格式转换为PDF文件</span></strong><br />CHM Converter是一个专门转换CHM格式的文件，它可以把CHM文件转换成PDF、TXT、DOC等常用的格式。 <br />http://dl.pconline.com.cn/html/1/6/dlid=11896&dltypeid=1&pn=0&.html <br /><br />下载后运行软件，软件默认是英文界面，点击菜单“Tools-Language”，在弹出的对话框中选择“Chinese_Simplified”就可以换成中文了，软件还支持其他很多语言。 <br /><br />选好语言后点击左上角的“打开”按钮来选择要转换的CHM文件，如果CHM文件是英文版的，那么在旁边的下拉菜单中就选择 “DEFAILT_CHARSET”，如果是中文的，那需要在下拉菜单中选择“GB2312_CHARSET”，否则会产生乱码，然后在右面的“导出”中来选择要转换的文件类型，软件支持很多格式的文件，如这里选择“Word97-2003”，最后点击“另存数据库为”按钮，选择保存的文件夹后就开始进行转换了。 <br /><br /><strong><span style="color: blue">PS:</span></strong> Window2K中不能打开*.chm文件的解决办法 <br />这个问题的发生，是由于hhctrl.ocx的版本号出现错误或未正确注册。原因在于安装的其他软件用hhctrl.ocx的旧版本替换了原来的版本。 <br />IE6SP1中，这个文件的版本号应为5.2.3735.0。可以看看你的系统这个文件的版本号。 <br />位于winnt/system32这个文件夹。大小504K（英文版本）从其他相同的系统（IE版本也相同）中COPY一份 <br />粘贴到你的系统相应文件夹中。然后注册一下。 <br /><br /><strong><span style="color: red">注意</span></strong> <br />1、先替换winnt/system32/dllcache文件夹的这个文件 <br />后替换winnt/system32文件夹里的这个文件 <br />2、如果看不到这个文件， <br />先工具--文件夹选项中，设置显示隐藏文件 <br />并设置显示系统文件 <br />3、注册的方法是 <br />开始--运行，输入regsvr32 hhctrl.ocx <br />之后出来一个注册成功的对话框，确定然后重启系统。
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/158151#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 21 Jan 2008 19:55:02 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/158151</link>
        <guid>http://gimgen1026.javaeye.com/blog/158151</guid>
      </item>
      <item>
        <title>写给新入IT的新人们</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/158008" style="color:red;">http://gimgen1026.javaeye.com/blog/158008</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: red">转至：<a href="http://topic.csdn.net/u/20080120/20/934d7492-2c08-46e7-ad2b-4d0f396bc712.html" target="_blank">http://topic.csdn.net/u/20080120/20/934d7492-2c08-46e7-ad2b-4d0f396bc712.html</a></span><br /><br />　  IT=挨踢，这是IT人的自嘲，进入IT行业是有四五年了，也算得上是一个“老人”了吧，见了不少新人，面试了不少新人，也带了一些新人，多多少少还是有点发言权的。 <br />　　 <br /><strong>关于书本</strong> <br />        新人们常常会说我看了多少多少的书，看过某某人写的书，仿佛书看了就会做了。其实不然，很多新人在面试的时候夸夸其谈，说啥啥都知道一点，到真正做的时候，啥都不会。归根到底是没有经验，技术这玩意儿经验非常重要，很多东西如果不是你碰到了，你从书上一辈子都找不到答案。 <br />        我看书的习惯一般都是先把整个书翻翻，了解一下书的基本内容，然后在实际项目中遇到相应的问题再去翻书，当然这是因为我对技术已经有一定的了解，不需要通读整本书。初学者应该找一些适合自己的书，通读一遍，其中的例子要认真做，一定要自己去写代码，而不是Copy。我以前在学做网页的时候，别人都用Ddreamweaver去做，只有我打开源代码编辑器学习HTML源代码的编写。 <br />　　做完书的例子只能说明你会削木头了，但会削木头离会做柜子还有很远的路要走。还记得达·芬奇画鸡蛋的故事么？不停地重复肯定是枯燥的，所以你需要自己尝试去做一些实际的东西，比如做一个个人主页、一个留言本、一个通信地址本......在这些实际的东西中去实现你的创意，去实现你在书本上所学习的例子，并且将这些例子加入你的思想。 <br />        永远不要认为书本能给你带来多少东西，虽然它们很有用，但它们只是一个Key，一个引你入门的Key。我买的技术书中，最多的是VB.Net，但这却是我最烂的一门技术。而我用得比较好的Delphi、Sql   Server、Photoshop、CoreDRAW、CSS、HTML、Javascript、Xslt、Xml，我几乎没有买书，但因为实际的项目需要，或者是我个人的兴趣爱好。 <br />        当然，我并不是反对你去买书，去读书，我只是想告诉你，你需要有一种平和的心态。但你要记住，书本只是一个Key。 <br />  <br /><strong>关于基础</strong> <br />        现在很多新人们都是好高骛远，目空一切，基础的东西不想做，难一点的东西又做不了，真的很令人头疼。其实技术人员，尤其是中国技术人员，你要懂的东西太多太多了。我们拿Web程序员举例吧，HTML、Javascript、CSS、Photoshop切图，这些都是很基础的东西，但很多人就是不愿意去学，认为这些东西太低级，甚至有些老程序员也不擅长这些。但我要告诉你，在Web开发中，这些都很重要，尤其是CSS和HTML、Javascript，如果你不是做一个OA之类办公的Web系统的话，这些在网站用得太多太多了，是一些Web应用的基础。 <br />　　虽然我们现在涌现一大批如ASP.Net的优秀开发环境，可以让你完全不懂HTML也能开发出一套“网站”来，但正如其它程序化的东西一些，它会限制你的灵感与思维，它们都很霸道，所以才会有开源的兴起。我以前甚至不愿意用ASP.Net内置的GridView，我宁愿自己去构造Table，这觉得这样我更便于控制。 <br />　　很多新人们喜欢拿新兴的技术说事，比如说AJAX，但实质他根本就不懂AJAX实现的原理，连多线程的原理都不懂，怎么能明白AJAX呢？有些做了一年多ASP.Net的人，居然还不知道.Net   Framework框架的本质是什么，不知道ASP.Net是如何实现的，也不知道客户端也服务器端是如何交互的。 <br />        在这里，我建议做Web开的新人们，HTML、Javascript，CSS是实现一些Web功能的基础，一定要打好基础，当你会你记事本编辑这些代码的时候，恭喜你，你过关了。 <br />  <br /><strong>关于语言的选择</strong> <br />　　语言之争都是大公司战斗的结果，套用一句管理上的话来说，把合适的的技术用在合适的地方。我们没有必要跟风去不停地换新的语言，每种语言都有它的优劣，但在一般的项目中，很难看得出来。如果我们做一个只需要新闻发布功能的小公司网站，你说是Java和.Net好，还是Asp和PHP好呢？在很多时候，Java与.Net、Asp与PHP是难分高下的，他们之间的差异或许是你一辈子也不需要用到，我们范得着把自己拉入某一些阵营吗？ <br />　　当技术达到一定的水平之后，语言只不过是锦上添花了，武侠小说常无招胜有招就是这个道理。你现在让我换成Java或者是PHP，我很快就可以做项目，因为我掌握的不是语言，而是对技术深层次的理解，现在Java阵营也好，.Net阵营也好，不管你说它们之间有多少差别，但他们的本质始终没有变，掌握这些本质，换一种语言就好比换一辆车，只需要一个熟悉的过程和一个磨合期而已。 <br />　　最后，我建议新手们选择一种在你实质工作中需要的语言，坦坦实实地学好，不要中途“变节”，这样的成本太高了。.Net也好，Java也罢，只是一辆车而已，学好开本田就会驾丰田。 <br />  <br /><strong>关于学习态度</strong> <br />　　学习嘛，在学习的过程中自然会遇到一些问题，遇到问题自然会想到求助。古人有云：礼下于人，必有所求，言下之意是有求于人，必要礼下于人。可是现在有些人不仅不礼下于人，反而还趾高气扬，仿佛谁欠着他似的。我们老家有句俗话叫拜师学艺要吃二十四碗鼻涕，可见在学习过程中要受到多少的委屈。 <br />    吃得苦中苦，方为人上人，做技术尤是如此。我以前在学ASP的时候，同寝室有一哥们是学VB的，因为ASP也是用VBScript做为默认脚本，所以有很多问题请教他，他当是也是给了我不少的嘲笑，像“这些简单的问题都还要问”之类的话我倒是听了不少。但到后我们一起学Delphi的时候，我就已经超过他了。 <br />    新人们碰到问题的时候，第一个想法就是想找人解决，当你去帮他解决的时候，他却去做其它事了，好像这个问题是需要你来解决的，下次出现同样的问题他还得找你。遇到问题最好的办法是先排查问题，然后到互联网上查找问题的原因，这样你才不会忘记，不要忽略了互联网这个最好的老师。我以前在学ASP的时候，为了一个插入数据的问题，查了一个星期，但这个问题我永远也忘记不了，再也不会范同样的错误。 <br />　　高手们一般都比较忙，虽然我不是高手，但我还是不原意在我写代码正酣的时候，有人打断我的思路。先把问题记下来，趁机会问问高手，不要让他为你解决问题，你要的是一种解决问题的思路。公司常常有新人问我，这个地方出问题了，怎么办？我便问他，你上网查了吗？不是我不愿意帮他，而是授人鱼不如授人以渔，我直接告诉他怎么做，那不是在帮他，那是我在害他，我只能是告诉他排错的方法，解决问题的思路，否则他永远也不知道这个问题是怎么解决的，没有人会珍惜轻易得到的东西的。 <br />  <br />　　<strong>最后</strong>，我想给踏入这行的新人们一个忠告，编程没有捷径可言，如果一定要找出一个捷径，那只有六个字——多看、多问、多写 <br />        <br />        <br />　　<span style="color: red">版权所有©Conis</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/158008#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 21 Jan 2008 13:49:43 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/158008</link>
        <guid>http://gimgen1026.javaeye.com/blog/158008</guid>
      </item>
      <item>
        <title>dom4j操作xml</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/157993" style="color:red;">http://gimgen1026.javaeye.com/blog/157993</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="xml">&lt;Elements   xmlns="http://www.163.com"   xmlns:dc="http://www.163.com"> 
       &lt;test>
          &lt;title> 标题 &lt;/title>    
       &lt;/test> 
&lt;/Elements></pre><pre name="code" class="java">SAXReader saxReader = new SAXReader();     
Document document = saxReader.read(new File(filename));    

HashMap xmlMap = new HashMap();   
xmlMap.put("plugins","http://www.163.com");   //假设的命名空间
XPath x = document.createXPath("//plugins:test/plugins:title");   //读取二级节点，研究了半天
x.setNamespaceURIs(xmlMap);            
Element valueElement = (Element)x.selectSingleNode(document);   
System.out.println(valueElement.getText());   //输出该节点内容</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/157993#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 21 Jan 2008 13:23:10 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/157993</link>
        <guid>http://gimgen1026.javaeye.com/blog/157993</guid>
      </item>
      <item>
        <title>上网聊天--你都会说了吗？</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/157253" style="color:red;">http://gimgen1026.javaeye.com/blog/157253</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          随著网络的发达, 许多人都想到利用网络这样新工具来学英文.  最简单的方法ˉ在网络上抓一个老美来聊天! 但是有那么简单吗 一来两个人没有共同的话题, 老美跟你谈美式足球, 你跟他讲超级东西军, 再加上时下美国的青少年有许多独特的语言, 除此之外他们很喜欢用一些简写, 例如 I'll 有些人就直接打 ill, OK 就简称 k.  Because 呢就是简略为 coz;  Ready 又变成了 rdy. 所以要跟他们沟通实在粉困难.<br /><br /><br />        如果你有心想在网络上找老美会话, 小笨霖针对以上两点给你一些建议.  首先你可以到微软的网站.   这个网站上有不少多人对战而且是免费下载的网路游戏 (个人推荐 Ants), 跟老美一边玩游戏一边学英文, 时间一久自然就会创造出一些共同的话题, 而且如果你是常客的话, 还可以结交到许多朋友.   再来你还必须熟读本篇笔记, 这篇笔记会告诉你一些在网络上非常特别的英语.<br /><br />1.Hi, there. <br /><br /><br />嗨, 你好.<br /><br /><br />首先来谈谈在网路上聊天的基本大原则.  网上聊天凡事要尽可能简单.   因为打字的速度远不若说话的速度快, 所以能简写的简称的就要尽可能去简化.   例如平常老美见面打招呼最常用的是, "How are you doing?" 或是 "How are you?" 但在网路上比较常见的则是, "Hi!" 或是 "Hello." 如果是认识的人, 则在 "Hi!" 或 "Hello." 之后加上名字, 例如, "Hi! Claire." 或是 "Hello! Claire" 如果是不认识的人, 则用 "Hi! there." 或是 "Hi! you." <br /><br /><br />2. A/S/L? <br /><br /><br />年龄/性别/所在地?<br /><br /><br />如果你是第一次跟老美聊天, 他们通常都会先问你 A/S/L ? 有些人更懒, 连中间那一杠都不打, 直接打 asl? 意思虽然完全一样, 但是如果你之前没看过这样的用法, 包准你是很难猜出 asl 是什么意思. 回答的方式也很简单, 假设有个美眉今年芳龄十八, 家住芝加哥 (Chicago) 则她可以回答, "18/ f / Chicago"<br /><br /><br />如果你不会用 a/s/l ? 这种问法, 而分开问, "How old are you?".(你多大了?)   "Boy or girl?" (男的女的?)  "Where are you from?" (从哪里来?) 那么就违反了网路上要言简意该的大原则, 这样很快就会露出马脚, 让别人听出你不是跟他们一夥的.<br /><br /><br />3. S'up? <br /><br /><br />什么事?<br /><br /><br />"What's up?" 是老美彼此之间常用的一种打招呼方式. 但时下美国的青少年喜欢把 "What's up?" 发成 "S'up?" 因为他们觉得这样子很酷.  刚好昨天 (10/13/2000) 新播出的六人行 (Friends) 中就有这么一段:   Joey 为了要演一个十九岁的青少年, 他就故意耍酷说, "S'up?" 相信这个星期有看 Friends 的人都有印象才对. <br /><br /><br />网路上常看到的写法则是 "sup?" 第一次看到 "sup?" 我的第一个反应是  sup 是 supper (晚餐)的简写, 害我还以为人家问我吃过晚餐了没? 其实不是, "sup?" 只是一种打招呼的方式而已, 通常你可以简单地回答, "Not much." 或是 "Nothing much." 就行啦!<br /><br />4.  Lol. <br /><br />很好笑.<br /><br /><br />Lol 就是 laugh out loud 的简写, 就是「很好笑, 让我笑得很大声」的意思  通常是放在句尾来加强语气, 例如, "I got my butt kicked by an eight-year-old boy..... lol." (我被一个八岁的小男孩干掉了.... 真好笑).  其实这是我个人惨痛的经验, 网路游戏居然玩不过一个八岁的小男孩? <br /><br /><br />另外跟 lol 一样常见的则是表情符号, 例如笑脸就是 :D.   还有一些老中才比较常用的诸如单纯笑脸.  ^__^, 笑脸带酒涡   .^__^. 笑脸加胜利的手势 ^__^Y.   我觉得发明这些表情符号的人还是真乱有创意的.  注1 <br /><br />6. After seven sounds cool. <br /><br /><br />七点之后听起来不错. <br /><br /><br />许多老美喜欢把 cool 这个字挂在嘴边, 不管什么东西都可以说 cool. 例如, "He is a cool guy." (他是个好人.) 或是, "This game is cool." (这个游戏很棒)  不过由于 cool 这个字发音的关系, 有些人会把这个字误认为是「酷」的意思, 其实这是不太正确的.   Cool 意指很棒, 在程度上和 great 相去不远, 它比 good 和 fine 来的强一些, 但比 awesome, terrific 要来得弱一点.<br /><br /><br />所以如果你跟别人约某个时间上网厮杀, 别人循问你, "After seven?" 你就可以回答, "After seven sounds fine." (如果七点之后可以接受的话) 或是 "After seven sounds cool." (七点之后听来蛮不错的.) <br /><br />7. Are you a newbie? <br /><br />你是新手吗?<br /><br /><br />在网路上玩游戏最怕碰到两种人, 一种就是 newbie, 也就是所谓的新手, 这种人常常搞不清楚状况, 纯粹是来搅局的.   另外一种叫 lagger. 也就是指那些网路联机速度很慢的人, 由于是多人对战的游戏, 通常只要有一个人慢, 其它人的速度就全部会被拖慢.  所以有些游戏间乾脆注明了, "No newbie, no lagger." (不淮有新手, 不淮有联机太慢的人)<br /><br /><br />不过如果你是新手怎么办? 网路上的人也不是那么绝情的.   他们通常会开所谓 "Newbie Only" 的游戏间, 到这些地方来, 你就不必担心自己作了什么蠢事而被指责了. 另外还有一些人会开 "Chat Only" 的游戏间, 在这里是纯聊天不玩游戏.   可以先来这里适应一下也蛮不错的. <br /><br /><br />8. Give him a boot. <br /><br /><br />把它给踢出去.<br /><br /><br />在网路上不管是聊天室也好, 玩多人对战的游戏也好, 通常都会有一个主持人.  主持人最大的功用就是维持秩序.   所以例如有人说脏话的话, 他就可以把你给踢出去.   这个「踢」在这里老美比较不会用 kick, 而是用一个非常传神的字 boot (长筒靴), give someone a boot 意指给某人一脚, 也就是把某人踢出去的意思. 例如, "Alex is a cheater, give him a boot." (Alex 是一个会作弊的人, 把他给踢出去吧!)<br /><br /><br />另外 boot 这个字也常常单独当动词用, 例如 "Boot the goddamned newbie." (把那个该死的新手给踢出去.)<br /><br /><br />8. Yup/ Nope. <br />  <br /><br />是的/ 不是的.<br /><br /><br />老美在说 Yes 时, 常会有一些小小的变化, 例如 yup (或作 yep) 和 yeah 同样是 yes 的意思, 如果要细分的话, yup 听来简捷有力, 通常用在非常肯定的回答上.  例如, "Do you want to play? Yup." (你要玩吗? 是的.)  而 yeah 则比较是附合性质, 表示同意对方的看法.  例如, "That movie was really stupid.  Yeah, I guess so." (那部电影真的很无聊.  我想是吧!) <br /><br /><br />相同的道理, no 也可以说成 nope  Nope 表示坚决的否定.  例如, "Did you break my window? Nope."  (你打破了我的窗户吗? 不是我.) <br />  <br /><br />9. I think you are a cool guy.   Btw, do you know how to boot that guy? <br /><br /><br />我想你是个好人. 顺道一问, 你知道要怎么踢人吗?<br /><br /><br />Btw 是一个常见的简写, 代表 by the way 的意思.   它通常是被用在语气转折的地方.  例设你原来在说 A 事情, 突然你又想讲 B 事情, 那么中间就可以用一个 btw, 中文可以翻成「顺道一提」或是 「顺道一问」的意思. <br /><br /><br />相较于 btw 是一个连接词, 用来转折语气, well 则被用来当成是发语词.  目的是让整句话听来更顺畅. 例如你可以单说, "I think you are a cool guy." 但也可以这么说, "Well, I think you are a cool guy."<br /><br /><br />10. See ya. <br /><br /><br />再见. <br /><br /><br />如果两个人话不投机, 还是趁早溜之大吉.   所以「再见」这句话一定要会.  在网上说再见通常也很简单, 就说, "Bye." "See you." "See you later." 或是直接说 "Later." 就行了.<br /><br /><br />另外 you 这个字在网上常常会以简写的形式出现, 例如, ya, 或是 u 是同样代表 you 的意思.  所以 "See ya!" 或是 "See u." 就是 "See you." 的意思, 而 "Hiya" 其实就是 "Hi you" 的意思.
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/157253#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 18 Jan 2008 13:25:36 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/157253</link>
        <guid>http://gimgen1026.javaeye.com/blog/157253</guid>
      </item>
      <item>
        <title>书本里学不到的地道口语</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/157248" style="color:red;">http://gimgen1026.javaeye.com/blog/157248</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多英国人常用的习语，我们在书本里是学不到的。解决的一个好办法就是去英国旅游。如果不能去旅游的话，看看我给大家准备的这顿“习语大餐”也是不错的选择噢！<br /><br />    1. Are you all right? 你好吗？<br /><br />    绝对想不到“Are you all right?”还可以用来打招呼吧？其实这可是英国人最常用的打招呼句子，比“How are you?”还要流行哦！例如：<br /><br />    Are you all right, David?<br /><br />    Fine, thank you.<br /><br />    2. Cheers! 谢谢，再见！<br /><br />    我们干杯的时候常说Cheers!，以示宾主尽欢。当英国人下公车、买完东西的时候，他们常常对司机和售货员说“Cheers!”，来代替Thank you 和 Goodbye。例如：<br /><br />    Five pounds fifty, please. Cheers!<br /><br />    Cheers!<br /><br />    3. Give me a minute! 请稍等一会！<br /><br />    说到“稍等一会”，我们立刻想到的就是wait a minute，意思也是不错的。但是英国人会说“Give me a minute!”，例如：<br /><br />    Give me a minute, David! I will find the map for you.<br /><br />    4. I am behind you. 我支持你<br /><br />    “I am behind you.”这句话真的是非常明白的表示了“一个成功的男人背后必定有一个女人”的意思。说到“我支持你”，可能很多人都会想到“I support you.”，可就是想不到“I am behind you.”吧。例如：<br /><br />    Whatever decision you are going to make, I am behind you. <br />  5. Do you really mean it? 此话当真？<br /><br />    当别人许诺要给你什么好处的时候，你一定会以为是天上掉馅饼了，所以禁不住要问一句：Do you really mean it? 就是"此话当真"的意思。例如：<br /><br />    I can give what you want.<br /><br />    Do you really mean it?<br /><br />    Yes, I mean it!<br /><br />    6. Get on with it! 快点！<br /><br />    大家一起出去玩，有个人却总是磨磨蹭蹭的，害得所有人都要赶不上车。这时候你就可以说get on with it来催促他。例如：<br /><br />    Get on with it, we have no time left!<br /><br />    7. Get a move on! 赶快行动吧!<br /><br />    记得看战斗片的时候，指挥作战的军官总是一边跑着，一边对士兵大喊：Move! Move! Move! 就是"赶快行动"的意思。现在这个词在口语中可是非常的流行，例如：<br /><br />    Get a move on and help yourself to some food!
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/157248#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 18 Jan 2008 13:12:03 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/157248</link>
        <guid>http://gimgen1026.javaeye.com/blog/157248</guid>
      </item>
      <item>
        <title>JSP页面EL表达式无效的问题</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/155354" style="color:red;">http://gimgen1026.javaeye.com/blog/155354</a>&nbsp;
          发表时间: 2008年01月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以前用WSAD wizard做的，都可以在JSP页面中解析到EL表达式，当然前提是JSP2.0的情况下。<br />今天遇到了一个莫名其妙的问题。刚下载Eclipse3.3+MyEclipse6.0体验的过程中，遇上了解析不到EL表达式的问题。经过好几个小时的琢磨终于发现了，给大家share一下：<br />问题就出在建Web Project的时候web.xml声明上。<br />web.xml声明部分一般分为如下版本的xsd,<br />web-app_2_2.xsd<br />web-app_2_3.xsd<br />web-app_2_4.xsd<br />web-app_2_5.xsd<br /><br />更详细的列出各版本web.xml声明部分吧，如下：<br />web-app_2_2.xsd<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/dtd/web-app_2_2.dtd"></pre><br />web-app_2_3.xsd<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"></pre><br />web-app_2_4.xsd<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></pre><br />web-app_2_5.xsd<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"></pre><br /><br />确定web.xml里的xsd版本之后一定要在JSP的声明(&lt;%@page %>)部分加一行，如下：<br />&lt;%@ page isELIgnored="false" %><br />这样设为false才能解析EL表达式。<br />经过各版本的test之后....<br />注意!! 其中servlets 2.4(我没记错的话JSP 2.0出来之后的第一个版本)，这个版本的isELIgnored默认设置为false。所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明。<br /><br />下面是官方Documention中isELIgnored Attribute的详解：<br /><strong><span style="color: brown">The isELIgnored Attribute</span></strong><br /><strong>• Format</strong><br />– &lt;%@ page isELIgnored="false" %><br />– &lt;%@ page isELIgnored="true" %><br /><strong>Purpose</strong><br />– To control whether the JSP 2.0 Expression Language<br />(EL) is ignored (true) or evaluated normally (false).<br /><strong>• Notes</strong><br />– If your web.xml specifies servlets 2.3 (corresponding to<br />JSP 1.2) or earlier, the default is true<br />• But it is still legal to change the default—you are permitted<br />to use this attribute in a JSP-2.0-compliant server<br />regardless of the web.xml version.<br />– If your web.xml specifies servlets 2.4 (corresponding to<br />JSP 2.0) or earlier, the default is false
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/155354#comments" style="color:red;">已有 <strong>9</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 13 Jan 2008 01:33:14 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/155354</link>
        <guid>http://gimgen1026.javaeye.com/blog/155354</guid>
      </item>
      <item>
        <title>java.util.Properties类的使用</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/152023" style="color:red;">http://gimgen1026.javaeye.com/blog/152023</a>&nbsp;
          发表时间: 2007年12月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Properties 类已不是新东西了，它在 Java 编程的早期就有了，并且几乎没有什么变化。J2SE 的 Tiger 版本增强了这个类，不仅可以用它在单独一行中指定用等号分隔的多个键-值对，还可以用XML 文件装载和保存这些键-值对。在 驯服 Tiger的这一期文章中，John Zukowski 展示了如何驾驭这匹新一代的“役马”。<br /><br />    J2SE 1.5 以前的版本要求直接使用 XML 解析器来装载配置文件并存储设置。虽然这并非是一件困难的事情，并且解析器是平台的标准部分，但是额外的工作总是有点让人烦。最近更新的 java.util.Properties 类现在提供了一种为程序装载和存储设置的更容易的方法： loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。 <br /><br /><strong>Properties 基本知识</strong><br />如果不熟悉 java.util.Properties 类，那么现在告诉您它是用来在一个文件中存储键-值对的，其中键和值是用等号分隔的，如清单 1 所示。 <br /><br /><strong><span style="color: red">清单 1.</span></strong> 一组属性示例<br />foo=bar<br />fu=baz<br /><br />将清单 1 装载到 Properties 对象中后，您就可以找到两个键（ foo 和 fu ）和两个值（ foo 的 bar 和 fu 的 baz ）了。这个类支持带 \u 的嵌入 Unicode 字符串，但是这里重要的是每一项内容都当作 String 。 <br /><br />清单 2 显示了如何装载属性文件并列出它当前的一组键和值。只需传递这个文件的 InputStream 给 load() 方法，就会将每一个键-值对添加到 Properties 实例中。然后用 list() 列出所有属性或者用 getProperty() 获取单独的属性。 <br /><br /><strong><span style="color: red">清单 2.</span></strong> 装载属性<br /><pre name="code" class="java">import java.util.*;
import java.io.*;

public class LoadSample {
    public static void main(String args[]) throws Exception {
      Properties prop = new Properties();
      FileInputStream fis = 
        new FileInputStream("sample.properties");
      prop.load(fis);
      prop.list(System.out);
      System.out.println("\nThe foo property: " +
          prop.getProperty("foo"));
    }
}</pre><br />运行 LoadSample 程序生成如清单 3 所示的输出。注意 list() 方法的输出中键-值对的顺序与它们在输入文件中的顺序不一样。 Properties 类在一个散列表（hashtable，事实上是一个 Hashtable 子类）中储存一组键-值对，所以不能保证顺序。 <br /><br /><strong><span style="color: red">清单 3.</span></strong> LoadSample 的输出<br /><br />-- listing properties --<br />fu=baz<br />foo=bar<br /><br />The foo property: bar<br /><br /><strong>XML 属性文件</strong><br />这里没有什么新内容。 Properties 类总是这样工作的。不过，新的地方是从一个 XML 文件中装载一组属性。它的 DTD 如清单 4 所示。 <br /><br /><strong><span style="color: red">清单 4.</span></strong> 属性 DTD<br /><div class="quote_title">dtd 写道</div><div class="quote_div">&lt;?xml version="1.0" encoding="UTF-8"?><br />&lt;!-- DTD for properties --><br />&lt;!ELEMENT properties ( comment?, entry* ) ><br />&lt;!ATTLIST properties version CDATA #FIXED "1.0"><br />&lt;!ELEMENT comment (#PCDATA) ><br />&lt;!ELEMENT entry (#PCDATA) ><br />&lt;!ATTLIST entry key CDATA #REQUIRED></div><br /><br />如果不想细读 XML DTD，那么可以告诉您它其实就是说在外围 &lt;properties> 标签中包装的是一个 &lt;comment> 标签，后面是任意数量的 &lt;entry> 标签。对每一个 &lt;entry> 标签，有一个键属性，输入的内容就是它的值。清单 5 显示了 清单 1中的属性文件的 XML 版本是什么样子的。 <br /><br /><strong><span style="color: red">清单 5.</span></strong> XML 版本的属性文件<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
&lt;properties>
&lt;comment>Hi&lt;/comment>
&lt;entry key="foo">bar&lt;/entry>
&lt;entry key="fu">baz&lt;/entry>
&lt;/properties></pre><br />如果清单 6 所示，读取 XML 版本的 Properties 文件与读取老格式的文件没什么不同。 <br /><br /><strong><span style="color: red">清单 6.</span></strong> 读取 XML Properties 文件<br /><pre name="code" class="java">import java.util.*;
import java.io.*;

public class LoadSampleXML {
    public static void main(String args[]) throws Exception {
      Properties prop = new Properties();
      FileInputStream fis =
        new FileInputStream("sampleprops.xml");
      prop.loadFromXML(fis);
      prop.list(System.out);
      System.out.println("\nThe foo property: " +
          prop.getProperty("foo"));
    }
}</pre><br /><br /><strong>关于资源绑定的说明</strong><br />虽然 java.util.Properties 类现在除了支持键-值对，还支持属性文件作为 XML 文件，不幸的是，没有内置的选项可以将 ResourceBundle 作为一个 XML 文件处理。是的， PropertyResourceBundle 不使用 Properties 对象来装载绑定，不过装载方法的使用是硬编码到类中的，而不使用较新的 loadFromXML() 方法。 <br /><br />运行清单 6 中的程序产生与原来的程序相同的输出，如 清单 2所示。 <br /><br /><strong>保存 XML 属性</strong><br />新的 Properties 还有一个功能是将属性存储到 XML 格式的文件中。虽然 store() 方法仍然会创建一个类似 清单 1 所示的文件，但是现在可以用新的 storeToXML() 方法创建如 清单 5 所示的文件。只要传递一个 OutputStream 和一个用于注释的 String 就可以了。清单 7 展示了新的 storeToXML() 方法。 <br /><br /><strong><span style="color: red">清单 7.</span></strong> 将 Properties 存储为 XML 文件<br /><pre name="code" class="java">import java.util.*;
import java.io.*;

public class StoreXML {
    public static void main(String args[]) throws Exception {
      Properties prop = new Properties();
      prop.setProperty("one-two", "buckle my shoe");
      prop.setProperty("three-four", "shut the door");
      prop.setProperty("five-six", "pick up sticks");
      prop.setProperty("seven-eight", "lay them straight");
      prop.setProperty("nine-ten", "a big, fat hen");
      FileOutputStream fos =
        new FileOutputStream("rhyme.xml");
      prop.storeToXML(fos, "Rhyme");
      fos.close();
    }
}</pre><br /><br />运行清单 7 中的程序产生的输出如清单 8 所示。<br /><br /><strong><span style="color: red">清单 8.</span></strong> 存储的 XML 文件<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
&lt;properties>
&lt;comment>Rhyme&lt;/comment>
&lt;entry key="seven-eight">lay them straight&lt;/entry>
&lt;entry key="five-six">pick up sticks&lt;/entry>
&lt;entry key="nine-ten">a big, fat hen&lt;/entry>
&lt;entry key="three-four">shut the door&lt;/entry>
&lt;entry key="one-two">buckle my shoe&lt;/entry>
&lt;/properties></pre><br /><br /><strong>结束语</strong><br />使用 XML 文件还是使用老式的 a=b 类型的文件完全取决于您自己。老式文件从内存的角度看肯定是轻量级的。不过，由于 XML 的普遍使用，人们会期望 XML 格式流行起来，因为它已经被广泛使用了，只不过没有用到 Properties 对象。选择完全在您。分析软件包 private XMLUtils 类的源代码以获得关于所使用的 XML 解析的更多信息。<br /><pre name="code" class="java">import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 实现properties文件的读取
* @author bbflyerwww
* @date 2006-08-02
*/
public class PTest {
      public static void main(String[] args) {
          try {
              long start = System.currentTimeMillis();
              InputStream is = new FileInputStream("conf.properties");
              Properties p = new Properties();
              p.load(is);
              is.close();
              System.out.println("SIZE : " + p.size());
              System.out.println("homepage : " + p.getProperty("homepage"));
              System.out.println("author : " + p.getProperty("author"));
              System.out.println("school : " + p.getProperty("school"));
              System.out.println("date : " + p.getProperty("date"));
              long end = System.currentTimeMillis(); 
              System.out.println("Cost : " + (end - start));
          } catch (IOException ioe) {
              ioe.printStackTrace();
          }
      }
}</pre><br /><br />conf.properties<br /><pre name="code" class="java"># Configuration fileauthor = bbflyerwww
school = WuHan University
date = 2006-08-02</pre><br /><br />Result<br /><ul>SIZE:4<br />author : bbflyerwww<br />school : WuHan University<br />date : 2006-08-02<br />Cost : 0</ul>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/152023#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 31 Dec 2007 03:26:23 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/152023</link>
        <guid>http://gimgen1026.javaeye.com/blog/152023</guid>
      </item>
      <item>
        <title>Java解释Excel数据（jxl.jar包的使用）</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/152022" style="color:red;">http://gimgen1026.javaeye.com/blog/152022</a>&nbsp;
          发表时间: 2007年12月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>jxl.jar 包</strong><br />下载地址:<br /><a href="http://www.andykhan.com/jexcelapi/" target="_blank">http://www.andykhan.com/jexcelapi/</a><br />真实下载地址:<br /><a href="http://www.andykhan.com/jexcelapi/download.html" target="_blank">http://www.andykhan.com/jexcelapi/download.html</a><br /><br /><strong>网站上对它的特征有如下描述：</strong> <br />● 支持Excel 95-2000的所有版本 <br />● 生成Excel 2000标准格式 <br />● 支持字体、数字、日期操作 <br />● 能够修饰单元格属性 <br />● 支持图像和图表 <br />应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的，并不依赖Windows系统，即使运行在Linux下，它同样能够正确的处理Excel文件。另外需要说明的是，这套API对图形和图表的支持很有限，而且仅仅识别PNG格式。 <br /><strong>搭建环境</strong> <br />将下载后的文件解包，得到jxl.jar，放入classpath，安装就完成了。 <br /><br /><strong><span style="font-size: 18pt">基本操作</span></strong> <br /><br /><strong>一、创建文件</strong> <br />拟生成一个名为“测试数据.xls”的Excel文件，其中第一个工作表被命名为“第一页”，大致效果如下：<br /><pre name="code" class="java">/*
 * Created on Dec 30, 2007
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package JExcelTest.standard;

import java.io.*; 
import jxl.*; 
import jxl.write.*; 

/**
 * @author Ken
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class CreateXLS {

	public static void main(String[] args) {
		try {
			//open file.
			WritableWorkbook book =	Workbook.createWorkbook(new File("d:/Test.xls"));
			
			//create Sheet named "Sheet_1". 0 means this is 1st page.
			WritableSheet sheet = book.createSheet("Sheet_1", 0);
			
			//define cell column and row in Label Constructor, and cell content write "test".
			//cell is 1st-Column,1st-Row. value is "test".
			Label label = new Label(0, 0, "test");
			//add defined cell above to sheet instance.
			sheet.addCell(label);
			
			//create cell using add numeric. WARN:necessarily use integrated package-path, otherwise will be throws path-error.
			//cell is 2nd-Column, 1st-Row. value is 789.123.
			jxl.write.Number number = new jxl.write.Number(1, 0, 789.123);
			//add defined cell above to sheet instance.
			sheet.addCell(number);
			
			//add defined all cell above to case.
			book.write();
			//close file case.
			book.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}</pre><br />编译执行后，会在当前位置产生一个Excel文件。<br /><br /><strong>二、读取文件</strong> <br />以刚才我们创建的Excel文件为例，做一个简单的读取操作，程序代码如下： <br /><pre name="code" class="java">/*
 * Created on Dec 30, 2007
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package JExcelTest.standard;

import java.io.*;
import jxl.*;

/**
 * @author Ken
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class ReadXLS {

	public static void main(String[] args) {
		try {
			Workbook book = Workbook.getWorkbook(new File("d:/Test.xls"));
			//get a Sheet object. 
			Sheet sheet = book.getSheet(0);
			//get 1st-Column,1st-Row content.
			Cell cell = sheet.getCell(0, 0);
			String result = cell.getContents();
			System.out.println(result);
			book.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}</pre><br /><em>程序执行结果：test</em><br /><br /><strong>三、修改文件</strong> <br />利用jExcelAPI可以修改已有的Excel文件，修改Excel文件的时候，除了打开文件的方式不同之外，其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表：<br />修改Excel的类，添加一个工作表<br /><pre name="code" class="java">/*
 * Created on Dec 30, 2007
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package JExcelTest.standard;

import java.io.*;
import jxl.*;
import jxl.write.*;

/**
 * @author Ken
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class UpdateXLS {

	public static void main(String[] args) {
		try {
			//get file.
			Workbook wb = Workbook.getWorkbook(new File("d:/Test.xls"));
			//open a copy file(new file), then write content with same content with Test.xls.  
			WritableWorkbook book =
				Workbook.createWorkbook(new File("d:/Test.xls"), wb);
			//add a Sheet.
			WritableSheet sheet = book.createSheet("Sheet_2", 1);
			sheet.addCell(new Label(0, 0, "test2"));
			book.write();
			book.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}</pre><br /><br /><strong><span style="font-size: 18pt">高级操作</span></strong><br /> <br /><strong>一、 数据格式化</strong> <br />在Excel中不涉及复杂的数据类型，能够比较好的处理字串、数字和日期已经能够满足一般的应用。 <br /><strong>字串格式化</strong> <br />字符串的格式化涉及到的是字体、粗细、字号等元素，这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时，使用如下语句，为方便叙述，我们为每一行命令加了编号： <br />WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); <br />或<br />//设置字体格式为excel支持的格式<br />WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );<br />① WritableCellFormat format1=new WritableCellFormat(font1); <br />② Label label=new Label(0,0,”data 4 test”,format1) <br />③ 其中<br />I.指定了字串格式：字体为TIMES，字号16，加粗显示。WritableFont有非常丰富的构造子，供不同情况下使用，jExcelAPI的java-doc中有详细列表，这里不再列出。 <br />II.处代码使用了WritableCellFormat类，这个类非常重要，通过它可以指定单元格的各种属性，后面的单元格格式化中会有更多描述。 <br />III.处使用了Label类的构造子，指定了字串被赋予那种格式。 在WritableCellFormat类中，还有一个很重要的方法是指定数据的对齐方式，比如针对我们上面的实例，可以指定：<br />//把水平对齐方式指定为居中 <br />format1.setAlignment(jxl.format.Alignment.CENTRE); <br />//把垂直对齐方式指定为居中 <br />format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);<br />//设置自动换行<br /> format1.setWrap(true);<br /> <br /><strong>二、单元格操作</strong> <br />Excel中很重要的一部分是对单元格的操作，比如行高、列宽、单元格合并等，所幸jExcelAPI提供了这些支持。这些操作相对比较简单，下面只介绍一下相关的API。 <br /><strong>1、 合并单元格</strong> <br />WritableSheet.mergeCells(int m,int n,int p,int q); <br />作用是从(m,n)到(p,q)的单元格全部合并，比如： <br />WritableSheet sheet=book.createSheet(“第一页”,0); <br />//合并第一列第一行到第六列第一行的所有单元格 <br />sheet.mergeCells(0,0,5,0); <br />合并既可以是横向的，也可以是纵向的。合并后的单元格不能再次进行合并，否则会触发异常。 <br /><strong>2、 行高和列宽</strong> <br />WritableSheet.setRowView(int i,int height); <br />作用是指定第i+1行的高度，比如： <br />//将第一行的高度设为200 <br />sheet.setRowView(0,200); <br />WritableSheet.setColumnView(int i,int width); <br />作用是指定第i+1列的宽度，比如： <br />//将第一列的宽度设为30 <br />sheet.setColumnView(0,30); <br /><strong>三、操作图片</strong><br /><pre name="code" class="java">public static void write()throws Exception{
        WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
        WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
        File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png");
        WritableImage image=new WritableImage(1, 4, 6, 18,file);
        ws.addImage(image);
        wwb.write();
        wwb.close();
    }</pre>很简单和插入单元格的方式一样，不过就是参数多了些，WritableImage这个类继承了Draw，上面只是他构造方法的一种，最后一个参数不用了说了，前面四个参数的类型都是double，依次是 x, y, width, height,注意，这里的宽和高可不是图片的宽和高，而是图片所要占的单位格的个数，因为继承的Draw所以他的类型必须是double，具体里面怎么实现的我还没细看：）因为着急赶活，先完成功能，其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。<br /><br /><strong>读:</strong><br />读的时候是这样的一个思路,先用一个输入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作表中得某个单元格.<br /><em>InputStream->Workbook->Sheet->Cell,就得到了excel文件中的单元格</em><br /><pre name="code" class="java">String path="c:\\excel.xls";//Excel文件URL
InputStream is = new FileInputStream(path);//写入到FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄 
jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表
Cell cell=st.getCell(0,0);//得到工作表的第一个单元格,即A1
String content=cell.getContents();//getContents()将Cell中的字符转为字符串
wb.close();//关闭工作薄
is.close();//关闭输入流</pre><br />我们可以通过Sheet的getCell(x,y)方法得到任意一个单元格,x,y和excel中的坐标对应.<br />例如A1对应(0,0),A2对应(0,1),D3对应(3,2).Excel中坐标从A,1开始,jxl中全部是从0开始.<br />还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容.<br /><br /><strong>写:</strong><br />往Excel中写入内容主要是用jxl.write包中的类.<br />思路是这样的:<br /><em>OutputStream&lt;-WritableWorkbook&lt;-WritableSheet&lt;-Label</em><br />这里面Label代表的是写入Sheet的Cell位置及内容.<br /><pre name="code" class="java">OutputStream os=new FileOutputStream("c:\\test.xls");//输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表
Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容
ws.addCell(labelCF);//将Label写入sheet中
Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体
WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式
Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
现在可以写了
wwb.write();
写完后关闭
wwb.close();
输出流也关闭吧
os.close;</pre><br />OK,只要把读和写结合起来,就可以在N个Excel中读取数据写入你希望的Excel新表中,还是比较方便的.<br /><br />下面是程序一例:<br /><pre name="code" class="java">sql = "select * from tablename";
rs = stmt.executeQuery(sql);

//新建Excel文件
String filePath=request.getRealPath("aaa.xls");
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();

        //用JXL向新建的文件中添加内容
    OutputStream outf = new FileOutputStream(filePath);
        jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
        jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);

int i=0;
        int j=0;

for (int k = 0; k &lt; rs.getMetaData().getColumnCount(); k++) {
    ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}

while(rs.next()){
    out.println(rs.getMetaData().getColumnCount());

for (int k = 0; k &lt; rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
    }  

 i++;
}
wwb.write();
    wwb.close();
}catch(Exception e){e.printStackTrace();}
finally{

rs.close();
conn.close();
}

response.sendRedirect("aaa.xls"); </pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/152022#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 31 Dec 2007 03:17:07 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/152022</link>
        <guid>http://gimgen1026.javaeye.com/blog/152022</guid>
      </item>
      <item>
        <title>实战角度比较EJB2和EJB3的异同</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/151918" style="color:red;">http://gimgen1026.javaeye.com/blog/151918</a>&nbsp;
          发表时间: 2007年12月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　本文从实战角度比较EJB2和EJB3的异同，通过深入剖析揭示EJB3.0的真相，EJB3.0真是带来简化？还是一种表象上的简化？EJB3.0真的变得轻量了，还是披着羊皮的狼？<br /><br />　　<strong>EJB编程模型的简化</strong><br /><br />　　首先，EJB3简化的一个主要表现是：在EJB3中，一个EJB不再象EJB2中需要两个接口一个Bean实现类，虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB2的这三个类，好像不觉得复杂，但是当EJB个数增加时，就显得累赘了。<br /><br />　　简化后的EJB3的sessionBean依靠annotations元注释来定义SessionBean的类型，也就是说，EJB2中的SessionBean类型区分在EJB3继续继承，只不过书写代码的方式不同而已，例如下代码使用@Stateless表示一个无状态Bean.<br /><pre name="code" class="java">package example;

@Stateless
public class TestSessionBean implements TestSessionLocal{
public void xxxx(){

　　　　System.out.println("hello");　　

　　}
}</pre><br />　　上述Session Bean中没有了EJB2中ejbCreate等多余方法，这样TestSessionBean很象一个普通JavaBeans了。是不是简单？先别急，我们需要接着看看这个TestSessionBean是如何调用？<br /><br />　　在EJB2中，一个EJB对象的调用需要经过两个步骤：JNDI寻找和工厂创建，如下例：<br /><pre name="code" class="java">Context ctx = new InitialContext();
TestSessionLocalHome home = (TestSessionLocalHome)ctx.lookup("java:comp/env/ejb/TestSession");
TestSessionLocal bean = home.create();

bean.xxxx();//真正目的 对象使用</pre><br />　　其实上述代码最后一句才是我们真正目的，但是为了这个目的，必须经过前面冗长的代码创建，而在EJB3中，为创建型模式的Ioc模式（或称依赖注射）取代了home.create这样简单工厂创建模式，以一种更加松耦合和简洁的方式解决了对象创建问题，可以让我们精力更集中在对象的使用上了。<br /><br /> 　下面是annotations+Ioc/DI的EJB3调用代码：<br /><pre name="code" class="java"> @EJB //注意这里后面是空白
private TestSessionLocal testbean; //使用接口声明

public void invoke(){
　　testbean.xxxx(); //直接使用

}</pre><br />　　上述EJB3调用代码中，@EJB后面是空白，这其实使用了TestSessionLocal的缺省JNDI名称，一直到这里，我们一直满足于EJB3的简化，但是如果研究@EJB语法后，会发现其完整写法如下：<br /><pre name="code" class="java">@EJB(
name = “ejb/shopping-cart”,//被调用者Cart实现类的ejb-reference名称
beanName = “cart1”, //被调用者的名称 beanName
beanInterface = ShoppingCart.class, //接口名称
description = “The shopping cart for this application”
)
private Cart myCart;</pre><br />　　上述完整@EJB写法适用于同一个接口有多个实现子类时，其中关键是 beanName的定义：beanName是被调用EJB的类名 （不带包名，称为unqualified name ），或者， 如果被调用EJB有 XML descriptor定义， 它就是配置项ejb-name值（如果你使用过EJB2，就容易理解这个ejb-name了）。<br /><br />　　@EJB还有一个属性mappedName，这是被调用者的JNDI名称，一般不使用，因为这个JNDI名称和具体服务器有关，如果是JBoss4，那么它的缺省形式是："EAR-FILE-BASE-NAME/BEAN——CLASS-NAME/local" （or remote）。 也就是：被调用者EJB所在EAR包的名称/Bean实现子类（不带包名）/local，如果是remote调用，就是remote. 如果这个EJB被打包在jar包中，那么JNDI名称就是EJB-CLASS-NAME/local and EJB-CLASS-NAME/remote，当然，作为替换@RemoteBinding 和 @LocalBinding 也可定义JNDI名称。<br /><br />　　也就是说：JBoss的EJB3中，如果你不使用XML配置，直接使用annotations，那么JNDI缺省名称没有一个统一规定名称，有的可以直接是类名；在JBoss中还和EJB打包的形式有关，是动态变化的。如果你以为在EJB3中不会接触到这个变化的JNDI缺省名称，那你就错了。<br /><br />　　JBoss 4 在Servlet中不支持类似EJB调用EJB那样的依赖注射 binding-by-injection，因为Web容器和EJB容器是两个不同容器，当然借助另外JBoss Seam则是另外一回事，因此，在Web层调用EJB，就必须通过JNDI绑定一个session bean，这时，你就必须使用到那个变化不定的缺省JNDI名称了。<br /><br />    <strong>JNDI Naming Context</strong><br /><br />　　无论J2EE还是Java EE中，JNDI是一个好像不起眼，但是极其重要的概念，不理解JNDI可以说，对J2EE或JavaEE只了解一半。<br /><br />　　JNDI本来是EJB2中比较复杂的一个概念，不同容器有自己的JNDI名称，由此EJB2引入了第三者EJB-Reference，虽然解决了代码中耦合JNDI名称问题，但是又带来了更加烦琐的配置，这种现象当然被JavaEE5.0继续继承了下来，问题远非这么简单。<br /><br />　　J在Java EE5.0中（包括EJB3和Web环境），当我们需要访问一个JNDI环境下资源时，有两种方式：除了传统EJB2中的JNDI调用方式；还有一种就是：使用依赖注射Ioc模式，这个依赖注射的表达方式是使用annotations.<br /><br />　　因此，在EJB3中，必须好好搞清楚annotations、依赖注射和JNDI之间的关系，如果这个问题不弄明白，EJB3就绝非EJB2那么容易搞定，当然，搞定了的结果很简单，让人感觉简化轻量了，真不知道EJB3这种简化是不是有点象“掩耳盗铃”。<br /><br />　　可以总结一句：凡是EJB2中使用配置文件定义的；EJB3一般都可以使用 annotations定义（当然EJB3也支持配置文件定义）；凡是EJB2通过JNDI寻找的资源（调用容器中其他EJB、调用环境变量等Resource资源等），都是可以依靠annotations+依赖注射机制完成。<br /><br />　　<strong>JPA替代实体Bean</strong><br /><br />　　。如果说EJB3与EJB2变化最大的部分，就是持久层使用Java Persistence API 替代了EJB2的实体Bean，这样，我们通过Evans DDD建模得到的Domain Model类可以直接持久化保存到数据库，不像EJB2中还需要在Model类和实体Bean中进行一次转换。<br /><br />　　EJB3引入EntityManager进行需要持久实体的查询及其新增修改；EntityManager非常类似JDBCTemp/HibernateTemplate等持久化模板。<br /><br />　　JPA和JDO以及Hibernate等O/R mapping框架都是非常相似的。<br /><br />　　虽然在JPA中，我们都可以使用Annotation来替代配置，实现很多过去需要专门配置文件才能实现功能，不再一定需要 每个服务器不同的cmp映射文件，增强了移植性，但是EJB3还是需要 一个叫persistence.xml配置文件，在这个配置中进行数据库JNDI配置；当然，还有一些和具体服务器有关的配置属性，如果使用JBoss，JBoss的JPA底层使用Hibernate实现，因此在persistence.xml要进行有关Hibernate属性配置：<br /><pre name="code" class="java">&lt;persistence>
　　&lt;persistence-unit name="Ejb3Tutorial">
　　　　&lt;jta-data-source>java:/TestDS&lt;/jta-data-source>
　　　　&lt;properties>
　　　　　　&lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/>
　　　　&lt;/properties>
　　&lt;/persistence-unit>
&lt;/persistence></pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/151918#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 30 Dec 2007 03:48:51 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/151918</link>
        <guid>http://gimgen1026.javaeye.com/blog/151918</guid>
      </item>
      <item>
        <title>log4j.properties input log to file.</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/149987" style="color:red;">http://gimgen1026.javaeye.com/blog/149987</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java"># Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.rootLogger=info,CONSOLE,FILE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

#input log to file.
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=d:/log4j.log
log4j.appender.FILE.MaxFileSize=10mb
log4j.appender.FILE.MaxBackupIndex=3
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %5p  (%F:%L) - %m%n</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/149987#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Fri, 21 Dec 2007 14:55:37 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/149987</link>
        <guid>http://gimgen1026.javaeye.com/blog/149987</guid>
      </item>
      <item>
        <title>Java中如何正确使用字体编码</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/149827" style="color:red;">http://gimgen1026.javaeye.com/blog/149827</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: darkblue">首先声明一下，此文章时从网上转载的。如下的某些方法是确实管用，但是从中发现了有一点不足，就是原文笔者没考虑使用不同Web Server时出现的情况，比如文章里我用</span><strong><span style="color: red">红色字体</span></strong><span style="color: darkblue">画出来的部分代码在Tomcat跑的时候得用他说的方法，不过到了WebSphere的时候必须得用原先的<br />String name = request.getParameter("name");<br />所以采取本文方法的时候不要太死板，多试试。</span><br /><br />在Java编程中，中文字体编码难倒了不少程序员，如果抓住了影响Java中文显示的几个关键因素，问题将迎刃而解。 <br />Java是目前最流行的面向对象的编程语言之一，Java支持UTF-8、ISO-8859-1、GBK等各种字体编码，可是发现Java中字体编码的问题仍难倒了不少程序员，网上虽然也有不少关于在Java中如何正确显示中文的文章，但都不够全面，特意总结如下。 <br /><br />影响Java中字体编码正确显示的有几个因素: <br /><span style="color: darkred">1)数据库的连接方式; <br />2)网页中使用的字体编码; <br />3)数据库里存放数据的字体编码; <br />4)Java的缺省字体编码。</span><br />如果在编程中遇到不能正确显示中文时，要先弄清楚以上几项所使用的字体编码，再分析找出原因，即可解决问题。 <br />众所周知，JSP是Java的一种，和网页有关，而网页也有自己的中文编码系统，所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2，数据库连接驱动是用org.gjt.mm.mysql.Driver，这里主要讨论UTF-8和GBK的显示( GB2312是GBK的一个子集，Java中可以使用GBK来代替GB系列)。我们先来研究JSP中字体编码问题， 下面第一到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别，咱们分别说明，前三点是从读取数据库到显示在网页，后三点是从网页输入数据到存入数据库)，第七到第九点针对纯Java的类文件。 以下rs表示ResultSet的一个实例，是执行Select语句之后产生的数据集。 <br /><br /><strong>一、数据库连接方式使用UTF-8</strong> <br /><br />在连接数据库的驱动后面加上这句参数<br />useUnicode=true&characterEncoding=UTF-8<br />例如:<br />jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8<br /><br />从数据库里读出中文显示在使用GBK的JSP的网页里，如果数据库里存放的字体编码是UTF-8，在JSP中使用<br />str=new String(rs.getBytes(1),"UTF-8");<br />或者<br />str=rs.getString(1);<br />可以正确显示中文。<br /><br />如果数据库里存放的是GBK数据，那么JSP中也要使用<br />str=new String(rs.getBytes(1),"GBK");<br />来显示正确的中文。<br />值得注意的是如果页面使用UTF-8，数据库里存放的是UTF-8，也可以用<br />str=new String(rs.getBytes(1),"GBK");<br />正确显示中文。<br /><br />如果网页是UTF-8，而数据库里存放的是GBK，无法直接显示中文，需要2步转换,<br />str=new String(rs.getBytes(1),"GBK");<br />再<br />str=new String(str.getBytes("UTF-8"),"GBK");<br />才可以正确显示中文。 <br /><br /><br /><strong>二、数据库连接方式使用GBK</strong> <br /><br />在连接数据库的驱动后面加上这句参数<br />useUnicode=true&characterEncoding=GBK<br />例如:<br />jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&characterEncoding=GBK<br />从数据库里读出中文，显示在使用GBK的JSP的网页里.<br /><br />如果数据库里存放的字体编码是UTF-8，在JSP中一定要使用<br />str=new String(rs.getBytes(1),"UTF-8");<br />才正确显示中文。<br /><br />如果数据库里存放的是GBK数据，那么JSP中也要使用<br />str=new String(rs.getBytes(1),"GBK");<br />或者直接使用<br />str=rs.getString(1);<br />即可显示正确的中文。 <br /><br />如果网页是UTF-8，而数据库里存放的是GBK，只能用<br />str=new String(rs.getString(1).getBytes("UTF-8"),"GBK");<br />的方法来显示中文.<br /><br />如果网页是UTF-8，而数据库里存放的是UTF-8，可用<br />str=new String(rs.getBytes(1),"GBK");<br />或者<br />rs.getString(1)方法来显示中文。 <br /><br /><br /><strong>三、使用缺省数据库连接方式</strong><br /><br />连接数据库的驱动后面没有这句参数<br />useUnicode=&characterEncoding=<br />例如:<br />jdbc:mysql://localhost/DBName?autoReconnect=true<br />没有参数<br />useUnicode=true&characterEncoding，表示使用默认的ISO-8895-1编码。 <br /><br />1. 从数据库里读出中文，显示在GBK的网页里。<br />如果数据库里存放的字体编码是UTF-8，在JSP网页中一定要使用语句<br />str=new String(rs.getBytes(1),"UTF-8");<br />或者<br />str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8");<br />才可正确显示中文。<br /><br />如果数据库里存放的是GBK数据，那么JSP中也要使用<br />str=new String(rs.getBytes(1),"GBK");<br />或<br />str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK");<br />显示正确的中文。 <br /><br />2. 如果网页是UTF-8,不能直接正确显示GBK，需要2步转换<br />str=new String(rs.getBytes(1),"GBK");<br />再<br />str=new String(str.getBytes("UTF-8"),"GBK");<br />才可以正确显示中文。<br /><br />如果数据库里存的是UTF-8，直接用<br />str=new String(rs.getBytes(1),"GBK");<br />或者<br />str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK");<br />就可以显示中文了。 <br /><br />以上是读取数据库里中文正确显示在网页上，下面三点是如何正确存入数据库。 <br /><br /><br /><strong>四、数据库连接方式使用UTF-8编码</strong><br /><br />JSP中要把网页输入的中文存入数据库，通常有一个提交(Submit)的过程，是用<br />str = request.getParameter("username");<br />然后执行update或者insert语句来存入数据库。如何赋值给str很重要，而且这里中文输入与网页所使用的字体编码有关。<br /><br />1、 网页使用UTF-8，使用<br />str = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");<br />或者<br />str = new String(request.getParameter("username").getBytes(),"UTF-8");<br />都可以使得存到数据库里的数据是UTF-8编码。<br /><br />2. 网页使用GBK，使用<br />str = new String(request.getParameter("username").getBytes(),"GBK");<br />那么存入数据库的是UTF-8编码。 <br /><br />3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK。 <br /><br /><br /><strong>五、数据库连接方式使用GBK编码</strong> <br /><br />1. 输入使用GBK网页，存到数据库里是GBK的方法:<br />str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK");<br />或者<br />str= new String(request.getParameter("username").getBytes(),"GBK");<br /><br />2. 网页使用GBK，想存入UTF-8到数据库里，要分2步: <br />str=new String(request.getParameter("username").getBytes(),"GBK");<br />再<br />str=new String(str.getBytes("UTF-8"),"GBK");<br /><br />3. 网页使用UTF-8，而且使用<br />str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK");<br />或者<br />str= new String(request.getParameter("username").getBytes(),"UTF-8");<br />那么存到数据库里的数据是UTF-8编码。<br /><br />4. 网页使用UTF-8，而且使用<br /><span style="color: red"><strong>str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");</strong></span><br />那么存到数据库里的数据是GBK编码。 <br /><br /><br /><strong>六、数据库连接方式使用缺省</strong>，即不使用参数useUnicode和characterEncoding <br /><br />1. 网页使用GBK，如果使用<br />str= request.getParameter("username");<br />或者<br />str= new String(request.getParameter("username").getBytes());<br />那么在数据库里的数据是GBK码。网页使用UTF-8和使用<br />str= request.getParameter("username");<br />则存入数据库是UTF-8编码。 <br /><br />2. 如果使用<br />str= new String(request.getParameter("username").getBytes("ISO-8859-1"));<br />那么根据网页提供的字体编码而存到数据库里，比如是UTF-8的网页，那么存到数据库中就是UTF-8编码，如果使用GBK网页，那么存到数据库里的字就是GBK编码。 <br /><br />3. 如果使用<br />str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8");<br />这一种组合能存到正确的数据外，其他存到数据库里的数据则都是乱码或者错误码。在这个UTF-8组合的特例中，网页使用的是GBK，则存放到数据库里就是GBK，网页使用UTF-8，那么存到数据库里的就是UTF-8。<br /> <br />4. 网页是GBK的要存得UTF-8，一定需要2步: <br />company=new String(request.getParameter("company").getBytes(),"GBK");<br />和<br />company=new String(company.getBytes("UTF-8"))。 <br /><br />5. 网页是UTF-8的，不能存得GBK在数据库里，一句话，改变数据库连接方式不能存得GBK码。 <br /><br />以上所有的都是基于JSP网页和数据库交换数据，下面讨论一下纯JAVA编程下的字体编码转换。 <br /><br /><br /><strong>七、数据库连接方式使用UTF-8编码</strong> <br /><br />1. 数据库里的中文是UTF-8，可以转换为GBK,但不能把GBK存入数据库。 <br /><br />2. 数据库是GBK，如果转换为UTF-8，使用<br />content=new String(rs.getBytes(2),"GBK");<br />直接将content存入数据库就可为UTF-8。 <br /><br /><br /><strong>八、数据库连接方式使用GBK编码</strong> <br /><br />1. 数据库里的中文是UTF-8，如果转换为GBK，使用<br />content= new String(rs.getString(2).getBytes(),"UTF-8");<br />再直接使用update或者insert语句插入到数据库，即存得GBK。<br /><br />如果使用<br />content= new String(rs.getString(2).getBytes(),"GBK");<br />或者<br />content= new String(rs.getString(2).getBytes());<br />再存入数据库即存得还是UTF-8编码。 <br /><br />2. 数据库里的中文是GBK，如果转换为UTF-8，使用<br />content= new String(rs.getString(2).getBytes("UTF-8"));<br />或者<br />content= new String(rs.getString(2).getBytes("UTF-8"),"GBK");<br />再直接使用update或者insert语句插入到数据库,即存得UTF-8。 <br /><br />3. 如果某个String是GBK，要转换为UTF-8，也是使用<br />content= new String(GBKstr.getBytes("UTF-8"));<br />或者<br />content= new String(GBKstr.getBytes("UTF-8"),"GBK");<br /><br />如果某个String是UTF-8，要转换为GBK，应该使用new String(UTFstr.getBytes("GBK"),"UTF-8")。 <br /><br /><br /><strong>九、数据库连接方式使用缺省,即不跟参数</strong> <br /><br />1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1");<br />可以将数据库里的GBK编码转换为UTF-8。 <br /><br />2. 读取UTF-8然后存入UTF-8，则用<br />str1=new String(UTFstr.getBytes(),"ISO-8859-1");<br />或者<br />str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1");<br /><br />3. 不能实现数据库里的UTF-8转换为GBK。 <br />如果采用UTF-8的数据库连接方式或者缺省数据连接方式，那么无法将UTF-8转为GBK；而GBK的数据库连接方式可以实现UTF-8和GBK的相互转换。建议大家采用GBK的数据连接方式。
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/149827#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Fri, 21 Dec 2007 00:56:45 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/149827</link>
        <guid>http://gimgen1026.javaeye.com/blog/149827</guid>
      </item>
      <item>
        <title>实体Bean的BMP和CMP选择</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/148106" style="color:red;">http://gimgen1026.javaeye.com/blog/148106</a>&nbsp;
          发表时间: 2007年12月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          EJB有两种主要类型BMP(Bean managed persistence )和CMP(Container managed persistence ),这两种类型各有优缺点。<br /><br />BMP是在Bean中完成对数据库JDBC的各种调用，也就是说，在你的实体bean(entity bean)中，明确写入了SQL语句，如"insert .. "或"select ..",并且使用Datasource获得一个数据库资源以及连接(connection)从而对数据库直接进行增加删除修改。<br /><br />CMP是由EJB容器自动完成对数据库的操作，你所有做的，就是在实体bean重写入SetXXX或getXXX方法，然后在ejb-jar.xml中定义cmp-field就可以。<br /><br />很明显,CMP编写要简单多，而且数据库操作由EJB容器完成应该是一种趋势，但是CMP有个缺点就是不够灵活，如果我们要完成类似SQL搜索语句的like命令,如"select * from A where name like '%banqiao'",CMP就无法自动帮助我们完成，这样我们就需要BMP自己来写。<br /><br />在实际应用，一般为了效率考虑，我们尽量使用CMP，但如何为将来有可能使用BMP作好准备，就是说有可以延伸到BMP的基础。EJB 2.0对CMP的抽象类支持为我们提供了这种实现的基础。<br /><br />总体思路是，先使用抽象类完成CMP 如果需要BMP 可以extend这个抽象类，然后覆盖原来的方法（用自己的特殊SQL语句操作来覆盖该方法）。<br /><br />以Java 宠物店(Java Pet Store Demo 1.3)中的地址实体bean:AddressEJB为例:<br /><pre name="code" class="java">public abstract class AddressEJB implements EntityBean {
	private EntityContext context = null;

	// getters and setters for PO CMP fields

	public abstract String getFirstName();
	public abstract void setFirstName(String name);
	public abstract String getLastName();
	public abstract void setLastName(String name);
	public abstract String getStreet1();
	public abstract void setStreet1(String name);
	public abstract String getStreet2();
	public abstract void setStreet2(String name);
	public abstract String getCity();
	public abstract void setCity(String name);
	public abstract String getState();
	public abstract void setState(String name);
	public abstract String getCountry();
	public abstract void setCountry(String name);
	public abstract String getZip();
	public abstract void setZip(String name);

	public Object ejbCreate(
		String fName,
		String lName,
		String s1,
		String s2,
		String cy,
		String st,
		String cnty,
		String pcode)
		throws CreateException {
		setFirstName(fName);
		setLastName(lName);
		setStreet1(s1);
		setStreet2(s2);
		setCity(cy);
		setState(st);
		setCountry(cnty);
		setZip(pcode);
		return null;
	}

	public void ejbPostCreate(
		String fName,
		String lName,
		String street1,
		String street2,
		String city,
		String state,
		String country,
		String zip)
		throws CreateException {
	}
	public void setEntityContext(EntityContext c) {
		context = c;
	}
	public void unsetEntityContext() {
	}
	public void ejbRemove() throws RemoveException {
	}
	public void ejbActivate() {
	}
	public void ejbPassivate() {
	}
	public void ejbStore() {
	}
	public void ejbLoad() {
	}
}</pre><br />在上面的AddressEJB中，我们看到只有setXXX或getXXX的方法。<br /><br />在相应的部署描述文件ejb-jar.xml中我们看到:<br /><pre name="code" class="java">&lt;entity>
　　&lt;display-name>AddressEJB&lt;/display-name>
　　&lt;ejb-name>AddressEJB&lt;/ejb-name>
　　&lt;local-home>com.sun.j2ee.blueprints.address.ejb.AddressLocalHome&lt;/local-home>
　　&lt;local>com.sun.j2ee.blueprints.address.ejb.AddressLocal&lt;/local>
　　&lt;ejb-class>com.sun.j2ee.blueprints.address.ejb.AddressEJB&lt;/ejb-class>
　　&lt;persistence-type>Container&lt;/persistence-type>
　　&lt;prim-key-class>java.lang.Object&lt;/prim-key-class>
　　&lt;reentrant>False&lt;/reentrant>
　　&lt;cmp-version>2.x&lt;/cmp-version>
　　&lt;abstract-schema-name>Address&lt;/abstract-schema-name>


　　&lt;cmp-field>
　　　　&lt;field-name>firstName&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>lastName&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>street1&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>street2&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>city&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>state&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>country&lt;/field-name>
　　&lt;/cmp-field>
　　&lt;cmp-field>
　　　　&lt;field-name>zip&lt;/field-name>
　　&lt;/cmp-field>


　　&lt;security-identity>
　　　　&lt;description>&lt;/description>
　　　　&lt;use-caller-identity>&lt;/use-caller-identity>
　　&lt;/security-identity>

&lt;/entity></pre><br />在上面部署文件中，标明了Address数据库字段:<br /><br />firstName,lastName,street1,street2,city,state，country,zip<br /><br />一旦我们要使用BMP, 只要继承上面的CMP bean:<br /><br />public class AddressBeanBMP extends AddressEJB {<br /><br />用我们自己的BMP方法覆盖AddressEJB中的方法:<br /><br />ejbLoad() -->从数据库中获取数据(SELECT)<br />ejbStore() -->修改数据库数据UPDATE)<br />ejbRemove() -->删除数据库数据(DELETE)<br />ejbCreate() -->插入新的数据记录(INSERT)<br />ejbFindByPrimaryKey(primary key) --> 确保 primary key 存在.<br />ejbFindAllPrimaryKey() -->自己的定义 返回一个primary key所有数据记录的collectionxiam<br /><br />下面以ejbCreate()为例:<br /><br /><pre name="code" class="java">public Object ejbCreate(
	String fName,
	String lName,
	String s1,
	String s2,
	String cy,
	String st,
	String cnty,
	String pcode)
	throws CreateException {

	// insert row into database
	this.fName = fName;
	this.lName = lName;
	this.s1 = s1;
	this.s2 = s2;
	this.cy = cy;
	this.st = st;
	this.cnty = cnty;
	this.pcode = pcode;

	// Insert database record
	try {
		Connection connection = getConnection();
		PreparedStatement statement =
			connection.prepareStatement(
				"INSERT INTO Address (firstName,lastName,street1,street2,city,state，country,zip) VALUES (?, ?, ?,?,?,?)");
		statement.setString(1, fName);
		statement.setString(2, lName);
		statement.setString(3, pcode);
		statement.setString(4, s1);
		statement.setString(5, s2);
		statement.setString(6, st);
		statement.setString(7, cy);
		statement.setString(8, cnty);
		if (statement.executeUpdate() != 1) {
			statement.close();
			connection.close();
			throw new CreateException("Could not create: ");
		}
		statement.close();
		connection.close();
	} catch (SQLException e) {
		throw new EJBException("Could not create: ");
	}
}</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/148106#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 13 Dec 2007 15:47:00 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/148106</link>
        <guid>http://gimgen1026.javaeye.com/blog/148106</guid>
      </item>
      <item>
        <title>websphere mq常用命令</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/147830" style="color:red;">http://gimgen1026.javaeye.com/blog/147830</a>&nbsp;
          发表时间: 2007年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: darkred">转自：http://blog.csdn.net/shrek_cn/archive/2005/03/18/323230.aspx</span><br />最近在配置MQ,记下了一些常用的MQ命令,如下:<br /><br />创建队列管理器 <br />crtmqm –q QMgrName <br />-q是指创建缺省的队列管理器 <br /><br />删除队列管理器 <br />dltmqm QmgrName <br /><br />启动队列管理器 <br />strmqm QmgrName <br />如果是启动默认的队列管理器，可以不带其名字 <br /><br />停止队列管理器 <br />endmqm QmgrName 受控停止 <br /><br />endmqm –i QmgrName 立即停止 <br /><br />endmqm –p QmgrName 强制停止 <br /><br />显示队列管理器 <br />dspmq –m QmgrName <br /><br />运行MQ命令 <br />runmqsc QmgrName <br />如果是默认队列管理器，可以不带其名字 <br /><br />往队列中放消息 <br />amqsput QName QmgrName <br />如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 <br /><br />从队列中取出消息 <br />amqsget QName QmgrName <br />如果队列是默认队列管理器中的队列，可以不带其队列管理器的名字 <br /><br />启动通道 <br />runmqchl –c ChlName –m QmgrName <br /><br />启动侦听 <br />runmqlsr –t TYPE –p PORT –m QMgrName <br /><br />停止侦听 <br />endmqlsr -m QmgrName <br /><br />下面是在MQ环境中可以执行的MQ命令(即在runmqsc环境下可以敲的命令) <br /><br />定义持久信队列 <br />DEFINE QLOCAL（QNAME） DEFPSIST（YES） REPLACE <br /><br />设定队列管理器的持久信队列 <br />ALTER QMGR DEADQ（QNAME） <br /><br />定义本地队列 <br />DEFINE QL（QNAME） REPLACE <br /><br />定义别名队列 <br />DEFINE QALIAS(QALIASNAME) TARGQ(QNAME) <br /><br />远程队列定义 <br />DEFINE QREMOTE（QRNAME） + <br />RNAME（AAA） RQMNAME（QMGRNAME） + <br />XMITQ（QTNAME） <br /><br />定义模型队列 <br />DEFINE QMODEL（QNAME） DEFTYPE（TEMPDYN） <br /><br />定义本地传输队列 <br />DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) + <br />INITQ（SYSTEM.CHANNEL.INITQ）+ <br />PROCESS(PROCESSNAME) REPLACE <br /><br />创建进程定义 <br />DEFINE PROCESS（PRONAME） + <br />DESCR（‘STRING’）+ <br />APPLTYPE（WINDOWSNT）+ <br />APPLICID（’ runmqchl -c SDR_TEST -m QM_ TEST’） <br />其中APPLTYPE的值可以是：CICS、UNIX、WINDOWS、WINDOWSNT等 <br /><br />创建发送方通道 <br />DEFINE CHANNEL（SDRNAME） CHLTYPE（SDR）+ <br />CONNAME（‘100.100.100.215(1418)’） XMITQ（QTNAME） REPLACE <br />其中CHLTYPE可以是：SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。 <br /><br />创建接收方通道 <br />DEFINE CHANNEL（SDR_ TEST） CHLTYPE（RCVR） REPLACE <br /><br />创建服务器连接通道 <br />DEFINE CHANNEL（SVRCONNNAME） CHLTYPE（SVRCONN） REPLACE <br /><br />显示队列的所有属性 <br />DISPLAY QUEUE（QNAME） [ALL] <br /><br />显示队列的所选属性 <br />DISPLAY QUEUE（QNAME） DESCR GET PUT <br />DISPLAY QUEUE（QNAME）MAXDEPTH CURDEPTH <br /><br />显示队列管理器的所有属性 <br />DISPLAY QMGR [ALL] <br /><br />显示进程定义 <br />DISPLAY PROCESS（PRONAME） <br /><br />更改属性 <br />ALTER QMGR DESCR（‘NEW DESCRIPTION’） <br />ALTER QLOCAL（QNAME） PUT（DISABLED） <br />ALTER QALIAS（QNAME） TARGQ（TARGQNAME） <br /><br />删除队列 <br />DELETE QLOCAL（QNAME） <br />DELETE QREMOTE（QRNAME） <br /><br />清除队列中的所有消息 <br />CLEAR QLOCAL（QNAME） <br /><br />amqmcert                  配置SSL证书<br /><br />amqmdain                配置windows上的MQ服务<br /><br />crtmqcvx                    转换数据<br /><br />dmpmqaut                转储对象权限管理<br /><br />dmpmqlog                转储日志管理<br /><br />dspmq                         显示队列管理器<br /><br />dspmqaut                  显示打开对象的权限<br /><br />dmpmqcap               显示处理程序容量和处理程序数<br /><br />dspmqcsv                 显示命令服务器状态<br /><br />dspmqfls                   显示文件名<br /><br />dspmqtrc                   跟踪MQ输出(HP-UNIX LINUX Solaris)<br /><br />dspmqrtn                   显示事务的详细信息<br /><br />endmqcsv                 停止队列管理器上的命令服务器<br /><br />strmqcsv                    启动队列管理器上的命令服务器<br /><br />endmqtrc                   停止跟踪<br /><br />rcdmqimg                  向日志写对象的映像<br /><br />rcmqobj                      根据日志中的映像重新创建一个对象<br /><br />rsvmqtrn                     提交或逆序恢复事务
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/147830#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 12 Dec 2007 15:41:04 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/147830</link>
        <guid>http://gimgen1026.javaeye.com/blog/147830</guid>
      </item>
      <item>
        <title>Suddenly woke to the danger we were in.</title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/147824" style="color:red;">http://gimgen1026.javaeye.com/blog/147824</a>&nbsp;
          发表时间: 2007年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          生命有时候真的很脆弱 ... <br />以后卡里头只能放千把块钱 ,偷了就偷了吧,抢了就抢了吧。 <br />3秒钟被刺 9刀，太震惊了！才晚上 7点多，歹徒就敢如此嚣张，这不是给我们狠狠地敲响了警钟吗？！一般人的惯性思维是认为夜深才会有夺命歹徒出没（请注意是"夺命"），尤其是在自动银行这样人流量不算少的公共地方。这个视频我反复看了10 遍。心想，当时如果换成是我在场取钱，估计也是死路一条。歹徒从抱住受害人推到墙角捅刀子，这个过程只有3秒钟。3秒钟就要了一个人的命！！！！ <br />用现在比较时髦的一个词来说，就是歹徒和取钱人的信息"不对称"。歹徒目的非常明确∶用刀捅死你！而那个取钱人感觉是 ∶这个人可能（只是可能还不明确）想抢钱？根本不知道是自己会被杀。所以他做出的行为是∶输错密码让卡被吞（目的是让歹徒抢不到钱）。这其实是一厢情愿的做法，当吐出纸条时，歹徒抱他，他心中可能还舒了一小口气，认为你这下拿不到钱了，你丫的还能怎样？？打就打，我怕你啊！！但是他想错了，歹徒直接要的是他的命！！就这么直接干脆迅速。从回放镜头看，歹徒抱住他，他一回身打了一记右摆拳，但打空了被歹徒卡住脖子迅速推到墙壁，然后就是大力捅刀子，直接致命。令人震撼的3秒钟啊！令人唏嘘不已的3秒钟啊！ <br />他到死可能都没弄明白，为什么会这样？？会这么快就被捅死？？这就是信息不对称的结果。我想，如果时光能倒退回去，让受害人从头再做一次，他肯定不会这么处理。我想他一定不会把卡插进去，肯定会走到一旁，示意让歹徒先取款，说自己在等人。我想这种情况下，歹徒一般不会拔出刀行凶，因为抢钱的目的没达到。然后在电话里说你到了吗，对，就这个自动银行，你在对面啊，好，我出来接你之类的，然后走出去。（大家说这个办法好吗？） <br />如果已经把卡插进去了，怎么办，是不是应该重重拍一下取款机台说 ∶TMD的，取款机又没钱，然后迅速回头跟歹徒说，操他吗的，真衰！！就这么看着歹徒的眼睛果断走出门去。我想歹徒在短短的时间内也难判断是否该拦住他，还是捅他？因为没有啊！对吧？ <br />假设最坏的结果是，歹徒不管有没钱，都掏出刀子捅，那就看你造化了，你不可再象那位仁兄一样，只是推推搡搡，不痛不痒的迎击，等着被捅死。你肯定会奋尽全力一搏，比如用腿狠揣歹徒腹部或其下身，阻击他不让靠近，一边伺机开门逃出去。这时候为了命，你什么都做的出，因为你已经知道不是生就是死！！！死死盯住他的持刀那只手，找准机会抓住其手臂，然后用头猛撞歹徒的面部，用牙咬他的鼻子或耳朵，用另一只手抠他的眼珠子，我想这时候用什么招都行，关键要实用（就是迅速让歹徒失去战斗力）！ <br />非常惋惜那位受害人，如果时光倒退一点点，歹徒抱住他的腰，我想正确的做法应该是迅速回身（他做到了），关键是要紧紧抓住歹徒的双手腕（他没做到），目的是让他捅不了刀子，然后用额头猛烈撞击歹徒鼻子，狠咬歹徒的脸肉，受害人死就死在他以为只是一般的打斗，不知是要他的命！这个案例给我们很大的启示 ∶ <br /><span style="color: red">1 、尽量不在夜间取款。 <br />2、要取就到人多的地方取。 <br />3、碰到有可疑的人在身后，迅速离开，不要取款。 <br />4、如果在取款的时候突然有人抱住你，你只能尽全力一搏了，撕咬、踢裆、头撞、背摔，看你造化了。</span><br />非常憎恨这个穷凶极恶的歹徒，为受害人感到无比悲伤，这是一个活生生的例子，每个人都有可能碰到，不是你死就是歹徒死，当你面对这种险情时，你准备好了吗？？？？？？
          <br/><br/>
          <span style="color:red;">
            <a href="http://gimgen1026.javaeye.com/blog/147824#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 12 Dec 2007 15:38:31 +0800</pubDate>
        <link>http://gimgen1026.javaeye.com/blog/147824</link>
        <guid>http://gimgen1026.javaeye.com/blog/147824</guid>
      </item>
      <item>
        <title>【半转】struts1.2 与struts1.1 Data-sources的配置 </title>
        <author>gimgen1026</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gimgen1026.javaeye.com">gimgen1026</a>&nbsp;
          链接：<a href="http://gimgen1026.javaeye.com/blog/146560" style="color:red;">http://gimgen1026.javaeye.com/blog/146560</a>&nbsp;
          发表时间: 2007年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文链接<a href="http://club.yc.nx.cn/blog/user1/xxyipt/archives/2007/1780.html" target="_blank">http://club.yc.nx.cn/blog/user1/xxyipt/archives/2007/1780.html</a><br /><br />  一、下载必要的jar包。有四个包要下载（网上有贴子说只要下面前三个包就可以了，但我在配置的时候如果没有第四个包会报错）。<br />      <a href="http://apache.linuxforum.net/dist/jakarta/commons/dbcp/binaries/commons-dbcp-1.2.zip" target="_blank">http://apache.linuxforum.net/dist/jakarta/commons/dbcp/binaries/commons-dbcp-1.2.zip</a><br />     <a href="http://apache.linuxforum.net/dist/jakarta/commons/pool/binaries/commons-pool-1.2.zip" target="_blank">http://apache.linuxforum.net/dist/jakarta/commons/pool/binaries/commons-pool-1.2.zip</a><br />     <a href="http://apache.linuxforum.net/dist/jakarta/struts/struts-legacy/struts-legacy-1.0.zip" target="_blank">http://apache.linuxforum.net/dist/jakarta/struts/struts-legacy/struts-legacy-1.0.zip</a><br />      <a href="http://apache.linuxforum.net/dist/jakarta/commons/collections/binaries/commons-collections-3.1.zip" target="_blank">http://apache.linuxforum.net/dist/jakarta/commons/collections/binaries/commons-collections-3.1.zip</a><br />    把这四个jar包放到web应用的WEB-INF/lib目录下，还有要把DB2的驱动程序包也放到这里（在Tomcat也可以把数据库的驱动包放到%Tomcat_Home%/common/lib目录下或%Resin_Home%/lib目录下，这样在启动Web服务器的时候就会加载这个包，服务器和Web应用都可以使用驱动程序类。Websphere还不太清楚，摸索中……）<br /><br />二、在struts-config.xml中添加Data Source<br /><br /><pre name="code" class="xml">&lt;data-sources>   
    &lt;data-source key="datasource" type="org.apache.commons.dbcp.BasicDataSource">   
      &lt;set-property property="password" value="db2admin" />   
      &lt;set-property property="minCount" value="3" />   
      &lt;set-property property="maxCount" value="10" />   
      &lt;set-property property="username" value="db2admin" />   
      &lt;set-property property="driverClassName" 
                        value="COM.ibm.db2.jdbc.net.DB2Driver"/>   
      &lt;set-property property="description" value="test" />   
      &lt;set-property property="url" 
                        value="jdbc:db2://localhost:6789/DB2ADMIN.TEST" />   
      &lt;set-property property