ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>免费观看在线综合色,91麻豆精品国产91久久久久推荐资源,欧美激情久久久http://www.aygfsteel.com/jiabao/zh-cnWed, 18 Jun 2025 07:47:03 GMTWed, 18 Jun 2025 07:47:03 GMT60java 数据库缓冲池 使用c3p0http://www.aygfsteel.com/jiabao/archive/2008/10/23/236102.html金家å¯?/dc:creator>金家å¯?/author>Thu, 23 Oct 2008 02:24:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/10/23/236102.htmlhttp://www.aygfsteel.com/jiabao/comments/236102.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/10/23/236102.html#Feedback2http://www.aygfsteel.com/jiabao/comments/commentRss/236102.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/236102.html

c3p0很容易ä‹É用的开源专业çñ”jdbc数据库缓冲池ã€?br />它是sourceforge上的一个开源项目,
™å¹ç›®åœ?
http://sourceforge.net/projects/c3p0
他的众多ç‰ÒŽ(gu¨©)€§è¿™é‡Œå°±ä¸ä¸€ä¸€ä»‹ç»äº†ã€?br />比较爽的一点就æ˜?br />当Connection归还¾~“冲池时åQŒc3p0会很ž®å¿ƒçš„å…³é—?br />˜q™æ¡˜qžæŽ¥æ‰“开的Statementå’ŒResultSet,免去了ä‹É用时
自己动手ž®å¿ƒ¾˜¼ç¿¼çš„关闭ã€?/em>

c3p0使用非常½Ž€å•,˜q™é‡Œ¾l™ä¸€ä¸ªä¾‹å­?/em>

package common.db;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;


import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

public final class ConnectionManager {
 private static ConnectionManager instance;
 
 public ComboPooledDataSource ds;
 private static String c3p0Properties="c3p0.properties";
 
 private ConnectionManager() throws Exception {
  Properties p = new Properties();
  p.load(this.getClass().getResourceAsStream(c3p0Properties));
  ds = new ComboPooledDataSource();
 }
 
 public static final ConnectionManager getInstance() {
  if (instance == null) {
   try {
    instance = new ConnectionManager();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return instance;
 }
 
 public synchronized final Connection getConnection() {
  try {
   return ds.getConnection();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return null;
 }

 protected void finalize() throws Throwable {
  DataSources.destroy(ds); //关闭datasource
  super.finalize();
 }
 
}

然后在ConnectionManager¾cȝš„目录下再创徏一个配¾|®æ–‡ä»¶c3p0.properties
内容如下åQ?br />#db login parameters
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/test?useUnicode=no&characterEncoding=GBK
user=test
password=test

#pool parameters
initialPoolSize=2
maxPoolSize=5
#maxIdleTime=10
#idleConnectionTestPeriod=5
autoCommitOnClose=true

完整的配¾|®æ–‡ä»¶å‚数参看c3p0的文æ¡?/em>

使用connection时很½Ž€å?br />Connection conn = ConnectionManager.getInstance().getConnection();
...
最å?conn.close() 卛_¯åQ?/em>



]]>
JDBC也分2.0å’?.0åQ?/title><link>http://www.aygfsteel.com/jiabao/archive/2008/10/23/236098.html</link><dc:creator>金家å¯?/dc:creator><author>金家å¯?/author><pubDate>Thu, 23 Oct 2008 02:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiabao/archive/2008/10/23/236098.html</guid><wfw:comment>http://www.aygfsteel.com/jiabao/comments/236098.html</wfw:comment><comments>http://www.aygfsteel.com/jiabao/archive/2008/10/23/236098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiabao/comments/commentRss/236098.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiabao/services/trackbacks/236098.html</trackback:ping><description><![CDATA[如题。研½I¶ä¸­...以前没有注意˜q‡ã€?img height="19" src="http://www.aygfsteel.com/Emoticons/red_smile.gif" width="19" border="0" /><img src ="http://www.aygfsteel.com/jiabao/aggbug/236098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiabao/" target="_blank">金家å¯?/a> 2008-10-23 10:10 <a href="http://www.aygfsteel.com/jiabao/archive/2008/10/23/236098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>鲤鱼论坛 研究½W”è®°åQˆæœªåQ?/title><link>http://www.aygfsteel.com/jiabao/archive/2008/10/21/235627.html</link><dc:creator>金家å¯?/dc:creator><author>金家å¯?/author><pubDate>Tue, 21 Oct 2008 03:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiabao/archive/2008/10/21/235627.html</guid><wfw:comment>http://www.aygfsteel.com/jiabao/comments/235627.html</wfw:comment><comments>http://www.aygfsteel.com/jiabao/archive/2008/10/21/235627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiabao/comments/commentRss/235627.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiabao/services/trackbacks/235627.html</trackback:ping><description><![CDATA[2008.10.21½W¬ä¸€å¤?br />¾|‘站地址åQ?<a >http://www.liyunet.com/</a><br />源码下蝲åQ?<a >http://www.liyunet.com/bbs/download.jsp</a><br /><br />我主要是利用该论坛的½Ž€æ˜“性来研究JSP技术,以及¾~“存技术。虽然说目前大部分论坛应用的都是ä¸ÀLµæ¡†æž¶æŠ€æœ¯ï¼Œä½†è¯´å›žæ¥åQŒè¿™äº›æ¡†æž¶ä¹Ÿåªæ˜¯å¯¹JSP½{‰ç›¸å…ÏxŠ€æœ¯çš„ä¸€ä¸ªå°è£…ï¼Œè€Œäº†è§£åº•éƒ¨åº”ç”¨åŠå…¶åŽŸç†æ›´å®ÒŽ(gu¨©)˜“让我理解ä¸ÀLµæ¡†æž¶çš„内部原理机制。不至于让框架把我们变成“傻子”ã€?br /><br /><br />那就开始吧<br />首先åQŒå’ŒæŸäº›å¤§è™¾ä¸€æ ïLš„习惯åQŒæˆ‘们从WEB-INF下的web.xml开始,从以下代码中可以发现随着tomcat启动æ—Óž¼Œè‡ªåŠ¨åŠ è²äº†InitServlet¾c…R€‚这是一个Servlet¾c…R€?br />WEB-INF\web.xml部分代码:<br /><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/dot.gif" /><br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">InitServlet</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">com.bcxy.servlet.InitServlet</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">1</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />      </span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><img src="http://www.aygfsteel.com/images/dot.gif" /></span></div><p>查看<span style="COLOR: #000000">com.bcxy.servlet.InitServlet¾c»ï¼Œä»£ç å¾ˆç®€å?<br />开始做了一个对此类日志åQˆlog4j)的绑定。接着通过SystemConfig取得了系¾lŸé…¾|®ä¸­çš„连接类型conntypeåQˆæŸ¥çœ‹classes目录下的SystemConfig.xml可知此变量是判断使用˜qžæŽ¥æ± çš„¾cÕdž‹0:3P0åQ?1:ProxoolåQ‰ã€‚接着是初始化操作åQŒè®°å½•一些必要的启动信息(log4j)åQˆå…¶ä¸­åšäº†æœ¬åœ°åœ°å€å’Œç½‘¾lœè®¿é—®åœ°å€çš„è{换)ã€?br />用DBUtil.close‹¹‹è¯•˜qžæŽ¥æ± æ˜¯å¦åŠ è½½æˆåŠŸã€?br />最后是释放¾cÀL‰€åšçš„必要操作。判断ä‹É用的是哪一¿Uè¿žæŽ¥æ± åQŒç„¶åŽå…³é—­ã€‚è¿™æ ähˆ‘们的½W¬ä¸€ä¸ªç±»ž®±åˆ†æžå®Œæ¯•ã€?br />接着需要了解到<br /><font style="BACKGROUND-COLOR: #ff9933">SystemConfig¾cÀL˜¯åŠ è²SystemConfig.xml配置文äšgåQŒåƈ讑֮šæ–ÒŽ(gu¨©)³•去读取。其中有一定的¾cÕdž‹è½¬æ¢ã€?br /></font><br />此时ä¼ég¹Žå·²ç»æ‰¾ä¸åˆ°å¤´¾lªäº†ã€‚é‚£˜q™æ ·å§ã€‚我们就开始访问我们自己搭建的论坛åQŒä»Žé¦–页开始,也就是index.jsp™åµé¢ã€?br />‹¹è§ˆindex.jsp代码åQŒç”±ä¸Šå‘下理解每一个语句的含义åQˆæ•´ä½“分体)ã€?br /><br />讑֮š™åµé¢¾~–码åQ›å¯¼å…¥IPLocalizer¾c»ï¼ˆåº”该是做IP昄¡¤ºçš„å·¥å…ïL±»åQ‰ï¼›æ’å…¥INC/const.jsp™åµï¼ˆ˜q‡åŽä¼šæœ‰åˆ†æžåQ‰ï¼›è®‘Ö®šstats变量数å€û|¼ˆé€šè¿‡é˜…读其他jsp™åµé¢å‘现åQŒæ­¤å˜é‡çš„作用主要是在于在首™å‰|˜¾½Cºç”¨æˆïLŠ¶æ€æ—¶åQŒå…¼òq¶æ˜¾½Cºå½“前用户做‹¹è§ˆçš„页面:也就是statsçš„å€û|¼Œ˜q™æ ·æˆ‘们可以在客户可讉K—®çš„范围内对stats变量˜q›è¡Œè®„¡½®åQŒå°±å¯ä»¥æŸ¥çœ‹åœ¨çº¿ç”¨æˆ·çš„当前行为)åQ›ç‘ô¾l­æ’å…¥INC/theme.jspåQˆä¼°è®¡æ˜¯å®šåˆ¶è®ºå›æ¨¡æ¿çš„æ–‡ä»Óž¼‰åQ?lt;table>标签内部ž®±æ˜¯˜qžæŽ¥åˆ°ç›¸å…Ïx˜¾½Cºæ•°æ®ä¿¡æ¯çš„jsp™åµé¢òq‰™™„加了参数。其中的一些格式是通过上面引用文äšg中的变量讄¡½®åQŒç›¸å¯¹ä¸éš„¡†è§£ï¼›è®ºå›æ¶ˆæ¯òq¿æ’­éƒ¨åˆ†åQŒé€šè¿‡ä¸€ä¸ªå¯æ‰§è¡Œjsp™åµé¢vector昄¡¤ºåœ¨é¦–™åµé¡¶éƒ¨ï¼Œå½“中讉K—®æ•°æ®åº“çš„¾l†èŠ‚éœ€è¦è¿›ä¸€æ­¥ç ”½I¶ä»£ç ï¼‰åQ›æŽ¥ç€æ˜¯å¸–子的遍历åQŒä¹Ÿž®±æ˜¯é¦–页最关键的部分,˜q™é‡Œçœ‹è“v来不是由jsp™åµé¢æ¥è´Ÿè´£èŽ·å–æ•°æ®ï¼Œè€Œæ˜¯é€šè¿‡Forum¾cÀL¥èŽ·å–ä¸€äº›è¿‡æ»¤ä¹‹åŽçš„æ•°æ®åQšè¿™é‡Œæ‰€è¯´çš„˜q‡æ×o是例如置™å¶å¸–子,最新帖子等有一些特ŒDŠæ ‡è®°çš„æ•°æ®åQ?<br />index.jsp的其他部分就都是大同ž®å¼‚了。都是通过一个遍历来展现å…ähœ‰ç›¸åŒç‰ÒŽ(gu¨©)€§çš„æ•°æ®ã€‚;大家需要注意一些关于页面表现的而非java技术的部分åQŒä¾‹å¦‚信息层的提½Cºï¼Œå’Œä¸€äº›å›¾ç‰‡è¿žæŽ¥ã€?br /><em>通过index.jsp的学习,我们大概已经了解了大部分jsp™åµé¢ä»£ç çš„表现åŞ式和含义。当ç„Óž¼Œä¸€å®šè¦æ³¨æ„åœ¨è¿™ä¸ªè¿‡½E‹ä¸­åQŒå‚æ•îC¼ é€’、参数获取的代码部分åQŒä¸è¦é—漏。除了一些我们可以看到的™åµé¢ä¹‹å¤–åQŒä¸Šé¢éƒ¨åˆ†ä¹Ÿè®²åˆ°äº†ä¸€äº›åƈ不用于显½Cºç»™ç”¨æˆ·çš„页面,˜q™é‡Œæˆ‘ä»¬è®¤äØ“å®ƒæ˜¯å¯æ‰§è¡Œé¡µé¢ï¼Œä¹Ÿå°±æ˜¯è¯´å®ƒå¯¹æˆ‘ä»¬çš„æ•°æ®å’Œè¯äh±‚做了一些处理,或者说把我们的è¯äh±‚转交¾l™äº†æœåŠ¡å™¨ï¼ˆæ¯”å¦‚servletåQ‰ã€?br /><br /><strong>预计晚上要研½I¶ä¸€ä¸‹æœ‰å…Ïx•°æ®åº“æ–šw¢çš„存取类JdbcWrapper以及˜qžæŽ¥èŽ·å–å’Œé‡Šæ”¾ã€æ•°æ®æŸ¥è¯¢æ’å…¥ã€?br />2008.10.22<br /></strong></em>大概昨天写的已经忘的差不多了åQŒé‚£ä¹ˆæˆ‘们还是从index.jspæ–‡äšg开始,前几行没有什么问题,都是一些导入文件的标签åQŒé‚£ä¹ˆæˆ‘们从SkinUtil.˜q™ä¸ª¾cÕd…¥æ‰‹ã€‚在查看SkinUtil¾cÖM»£ç çš„æ—¶å€™æˆ‘们发现里面应用了一些com\bcxy\bbs\util 包中¾c»ï¼Œå…¶ä¸­å«æœ‰ä¸‰ä¸ªå·¥å…·¾c…R€‚(åïL¬‘åQŒçœ‹äº†æ–‡ä»¶å¤§ž®ï¼Œåº”该代码不多åQŒæˆ‘们看看里面都是什么)在开始之前我们应了解一下GCookie.java¾cȝš„大概内容和作用。看导入包我们可以大概了解一下此¾cȝš„作用åQšå¯¹URL的编码与解码åQŒäñ”生和è¯Õd–CookieåQŒè¿˜æœ‰å°±æ˜¯åšä¸€äº›æ—¥å¿—è®°å½?log4j)ã€?br />我们仔细阅读后,了解刎ͼŒå…¶ä¸­æœ‰ä¸€ä¸ªé‡è½½æ–¹æ³•,也就是setCookieæ–ÒŽ(gu¨©)³•åQŒæ ¹æ®ä¸åŒçš„参数åQŒå¯ä»¥è®©æˆ‘们选择直接赋予变量名和值的æ–ÒŽ(gu¨©)³•åQŒæˆ–者是赋予变量名和值另外加上最大保存时间的æ–ÒŽ(gu¨©)³•。Â?¾cÖM¸­çš„另一个方法是获取Cookieæ–ÒŽ(gu¨©)³•倹{€?br />ParamUtil¾cÖM¹Ÿå¾ˆç®€å•,是取得字½W¦ä¸²å’?取得整数的重载方法,其中的参数决定是否有默认å€û|¼Œæ˜¯å¦éœ€è¦è{码ã€?br />SysUtil¾cÖM¸­æ ÒŽ(gu¨©)®SystemConfig¾cÖM¸­çš„读取方法读取配¾|®æ–‡ä»¶systemconfig.propertiesåQŒæŒ‰ç…§é‡Œé¢çš„讄¡½®åQŒæ¥åˆ¤æ–­æ˜¯å¦å¯¹å‚数和数据库读取操作中的参数进行编码。其中还有一个方法是取得真实地址åQŒå½“然这些都是根据systemconfig.propertiesæ–‡äšg中配¾|®è€Œå®šçš„ã€?br />BBSCconst.java¾cȝ®€å•的讄¡½®äº†ä¸€äº›å¸¸é‡ã€‚作用是讄¡½®æ•°æ®åº“表名的时候加上systemconfig.properties中设¾|®çš„前缀ã€?br />回到SkinUtil.java¾cÖM¼¼ä¹Žçœ‹èµäh¥ä¸€äº›åˆšåˆšè¿˜é™Œç”Ÿçš„ç±»æ–ÒŽ(gu¨©)³•åQŒæ˜¾å¾—明朗。前面设¾|®äº†ä¸€ä¸ªCookie的变量名òq¶èµ‹äº†å€¹{€?br /></span></p><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">ret </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> JdbcWrapper().doIntSearch(sql, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span></div><p>˜q™é‡Œç”¨åˆ°äº†æ–°¾c»ï¼Œä¹Ÿå°±æ˜¯æˆ‘们昨天说˜q‡çš„要了解的关于数据库连接的¾c…R€‚也是今天要解决的重炏V€‚打开JdbcWrapper¾c»ï¼ŒæŸ¥çœ‹ä»£ç .(插一句,看代码的时候,我觉得先看包名,了解大概要用到的¾cÕd’Œæ–ÒŽ(gu¨©)³•åQŒåŽ»è®¾æƒ³˜q™ä¸ª¾c»è¦å®žçŽ°çš„åŠŸèƒ½ï¼‰åQŒyi一眼看来,大概都熟æ‚(zh¨¨n)‰ï¼Œæ— éžæ˜¯è¿žæŽ¥æ•°æ®åº“ è¯Õd–åQŒç»“果保存,异常åQŒè¿˜æœ‰ä¸€äº›ç±»ä¼¼æ•°¾l„çš„HashMap˜q˜æœ‰éåŽ†ç”¨å¾—Iterator。想惻I¼Œå¤§æ¦‚ž®±æ˜¯æ•°æ®å±‚的一些基¼‹€CRUD操作。但是其中有个类不是很熟æ‚(zh¨¨n)‰ï¼ŒDatabaseMetaData¾c»ï¼ŒæŸ¥çœ‹sun公司的在¾U¿æ–‡æ¡£ï¼Œå‘现˜q™æ˜¯ä¸ªæŽ¥å£è€Œä¸”æ–ÒŽ(gu¨©)³•奇多åQŒæ–‡æ¡£çš„½W¬ä¸€å¥è¿™ä¹ˆå†™åQ?/p><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">Comprehensive information about the database as a whole. </span></div><p>我也不能理解˜q™å¥è¯åŒ…含了什么内宏V€‚不½Ž¡ä»–åQŒåœ¨½E‹åºä¸­æ…¢æ…¢ä½“会吧。JdbcWrapper˜q™ä¸ª¾cÀLœ‰ç‚šw•¿åQŒä¸˜q‡ï¼Œå¤§éƒ¨åˆ†æ–¹æ³•都有类似的作用åQŒä¹Ÿž®±æ˜¯è¯´çœŸæ­£ä¸åŒåŠŸèƒ½çš„ä»£ç ä¹Ÿåªæœ‰å‡ åˆ†ä¹‹ä¸€è€Œå·²ã€‚æˆ‘çœ‹çš„éƒ½æƒ³ç¡è§‰äº†ã€?br /><br /><em><strong>åœ¨ç½‘å§ï¼Œå› äØ“ä¸ä¾¿åQŒå…ˆ¼›Õd¼€å’?br /></strong></em>今天˜q˜å¥½åQŒè‡ªå·±æœ‰ä¸€å°ç”µ(sh¨´)脑,可以不限制时间。ç‘ô¾l­å·¥ä½?...<br />之前研究JdbcWrapper¾cÈš„æ—¶å€™æœ‰ä¸€ä¸ªå°ž®çš„疑问。如ä¸?br /></p><p> </p><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080"> 1</span><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">######˜q™é‡Œæœ‰ä¸€ç‚¹ä¸æ˜Žç™½åQŒäؓ什么要判断getAutoCloseåQˆï¼‰</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img id="Codehighlighter1_41_101_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_101_Open_Text.style.display='none'; Codehighlighter1_41_101_Closed_Image.style.display='inline'; Codehighlighter1_41_101_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_41_101_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_41_101_Closed_Text.style.display='none'; Codehighlighter1_41_101_Open_Image.style.display='inline'; Codehighlighter1_41_101_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="COLOR: #000000">    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_41_101_Closed_Text">/**/</span><span id="Codehighlighter1_41_101_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />     * 当需要事务支持时åQŒéœ€è¦è®¾¾|®a(ch¨£n)utoClose=falseåQŒé‚£ž®Þq­‰åˆîCº‹åŠ¡æäº¤æ—¶å†å…³é—­æ•°æ®åº“˜qžæŽ¥ã€?br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #008000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />     * </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img id="Codehighlighter1_134_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_194_Open_Text.style.display='none'; Codehighlighter1_134_194_Closed_Image.style.display='inline'; Codehighlighter1_134_194_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_134_194_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_134_194_Closed_Text.style.display='none'; Codehighlighter1_134_194_Open_Image.style.display='inline'; Codehighlighter1_134_194_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> closeConnection() </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_134_194_Closed_Text"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_134_194_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_158_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_191_Open_Text.style.display='none'; Codehighlighter1_158_191_Closed_Image.style.display='inline'; Codehighlighter1_158_191_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_158_191_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_158_191_Closed_Text.style.display='none'; Codehighlighter1_158_191_Open_Image.style.display='inline'; Codehighlighter1_158_191_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (getAutoClose()) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_158_191_Closed_Text"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_158_191_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            DBUtil.close(pstmt, con);<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div><p>今天看群里鲤鱼回½{”内容如下:</p><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">当需要事务支持时åQŒéœ€è¦è®¾¾|®a(ch¨£n)utoClose=falseåQŒé‚£ž®Þq­‰åˆîCº‹åŠ¡æäº¤æ—¶å†å…³é—­æ•°æ®åº“˜qžæŽ¥ã€?/span></div><p><br />一时还没有理解开来ã€?br />看过来看˜q‡åŽ»åQŒJdbcWrapper¾cÕd¯¹æˆ‘来讲还是有一部分难以理解。烦性不åŽÈ®¡å®ƒï¼Œ½{‰åœ¨ä¸‹é¢çš„代码中出现æ—Óž¼Œåå¤æŸ¥é˜…应该会有更多的收莗÷€?br /></p><img src ="http://www.aygfsteel.com/jiabao/aggbug/235627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiabao/" target="_blank">金家å¯?/a> 2008-10-21 11:47 <a href="http://www.aygfsteel.com/jiabao/archive/2008/10/21/235627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于正则表达å¼?/title><link>http://www.aygfsteel.com/jiabao/archive/2008/10/17/234851.html</link><dc:creator>金家å¯?/dc:creator><author>金家å¯?/author><pubDate>Fri, 17 Oct 2008 03:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiabao/archive/2008/10/17/234851.html</guid><wfw:comment>http://www.aygfsteel.com/jiabao/comments/234851.html</wfw:comment><comments>http://www.aygfsteel.com/jiabao/archive/2008/10/17/234851.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiabao/comments/commentRss/234851.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiabao/services/trackbacks/234851.html</trackback:ping><description><![CDATA[*匚w…é™¤äº†æ¢è¡Œä¹‹å¤–的所有字½W?br /><br />合法IP的正则表辑ּ ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)<br /><br />\s匚w…ä»ÀL„çš„空白符、(½Iºæ ¼ã€åˆ¶è¡¨ç¬¦ã€æ¢è¡Œç¬¦ã€ä¸­æ–‡å…¨è§’空æ û|¼‰<br />\w匚w…å­—母或数字或下划¾U¿æˆ–汉字<br /><br /><table cellspacing="0"><caption>è¡?.常用的元字符</caption><thead><tr><th scope="col">代码</th><th scope="col">说明</th></tr></thead><tbody><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">.</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…é™¤æ¢è¡Œç¬¦ä»¥å¤–çš„ä“Q意字½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\w</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…å­—母或数字或下划¾U¿æˆ–汉字</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\s</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…ä»ÀL„çš„空白符</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\d</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…æ•°å­—</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\b</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…å•词的开始或¾l“束</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">^</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…å­—符串的开å§?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">$</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…å­—符串的¾l“束</u></span></td></tr></tbody></table><br /><br /><table cellspacing="0"><caption>è¡?.常用的限定符</caption><thead><tr><th scope="col">代码/语法</th><th scope="col">说明</th></tr></thead><tbody><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">*</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复零次或更多次</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">+</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复一‹Æ¡æˆ–更多‹Æ?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">?</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复零次或一‹Æ?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">{n}</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复n‹Æ?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">{n,}</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复n‹Æ¡æˆ–更多‹Æ?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">{n,m}</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复n到m‹Æ?/u></span></td></tr></tbody></table><br /><br /><h2 id="backreference">后向引用</h2><p>使用ž®æ‹¬åähŒ‡å®šä¸€ä¸ªå­è¡¨è¾¾å¼åŽåQ?strong>匚w…˜q™ä¸ªå­è¡¨è¾‘Ö¼çš„æ–‡æœ?/strong>(也就是此分组捕获的内å®?可以在表辑ּæˆ–其它程序中作进一步的处理。默认情况下åQŒæ¯ä¸ªåˆ†¾l„会自动拥有一ä¸?span class="name" bakclassname="name"><strong>¾l„号</strong></span>åQŒè§„则是åQšä»Žå·¦å‘叻I¼Œä»¥åˆ†¾l„çš„å·¦æ‹¬å·äØ“æ ‡å¿—åQŒç¬¬ä¸€ä¸ªå‡ºçŽ°çš„åˆ†ç»„çš„ç»„å·äØ“1åQŒç¬¬äºŒä¸ªä¸?åQŒä»¥æ­¤ç±»æŽ¨ã€?/p><p><span id="wmqeeuq" class="name" bakclassname="name"><strong>后向引用</strong></span>用于重复搜烦前面某个分组匚w…çš„æ–‡æœ¬ã€‚例如,<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">\1</font></span>代表<span id="wmqeeuq" class="desc" bakclassname="desc"><u>分组1匚w…çš„æ–‡æœ?/u></span>。难以理解?è¯ïLœ‹½CÞZ¾‹åQ?/p><p><span id="wmqeeuq" class="regex" bakclassname="regex"><font color="#ff0000">\b(\w+)\b\s+\1\b</font></span>可以用来匚w…<span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复的单è¯?/u></span>åQŒåƒ<span id="wmqeeuq" class="string" bakclassname="string"><em>go go</em></span>, 或è€?span class="string" bakclassname="string"><em>kitty kitty</em></span>。这个表辑ּé¦–å…ˆæ˜?span class="desc" bakclassname="desc"><u>一个单è¯?/u></span>åQŒä¹Ÿž®±æ˜¯<span id="wmqeeuq" class="desc" bakclassname="desc"><u>单词开始处和结束处之间的多于一个的字母或数å­?/u></span>(<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">\b(\w+)\b</font></span>)åQŒè¿™ä¸ªå•词会被捕获到¾~–号ä¸?的分¾l„中åQŒç„¶åŽæ˜¯<span id="wmqeeuq" class="desc" bakclassname="desc"><u>1个或几个½Iºç™½½W?/u></span>(<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">\s+</font></span>)åQŒæœ€åŽæ˜¯<span id="wmqeeuq" class="desc" bakclassname="desc"><u>分组1中捕èŽïLš„内容åQˆä¹Ÿž®±æ˜¯å‰é¢åŒšw…çš„那个单词)</u></span>(<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">\1</font></span>)ã€?/p><p>你也可以自己指定子表辑ּçš?span class="name" bakclassname="name"><strong>¾l„名</strong></span>。要指定一个子表达式的¾l„名åQŒè¯·ä½¿ç”¨˜q™æ ·çš„语法:<span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?<Word>\w+)</font></span>(或者把ž®–括åäh¢æˆ?span class="code" bakclassname="code"><font color="#0000ff">'</font></span>也行åQ?span class="code" bakclassname="code"><font color="#0000ff">(?'Word'\w+)</font></span>),˜q™æ ·ž®±æŠŠ<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">\w+</font></span>çš„ç»„åæŒ‡å®šäØ“<span id="wmqeeuq" class="part" bakclassname="part"><font color="#008000">Word</font></span>了。要反向引用˜q™ä¸ªåˆ†ç»„<span id="wmqeeuq" class="name" bakclassname="name"><strong>捕获</strong></span>的内容,你可以ä‹Éç”?span class="code" bakclassname="code"><font color="#0000ff">\k<Word></font></span>,所以上一个例子也可以写成˜q™æ ·åQ?span class="regex" bakclassname="regex"><font color="#ff0000">\b(?<Word>\w+)\b\s+\k<Word>\b</font></span>ã€?/p><p>使用ž®æ‹¬åïLš„æ—¶å€™ï¼Œ˜q˜æœ‰å¾ˆå¤šç‰¹å®šç”¨é€”的语法。下面列å‡ÞZº†æœ€å¸¸ç”¨çš„一些:</p><table cellspacing="0"><caption>è¡?.常用分组语法</caption><tbody><tr><th scope="col">分类</th><th scope="col">代码/语法</th><th scope="col">说明</th></tr><tr><th rowspan="3">捕获</th><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…exp,òq¶æ•èŽäh–‡æœ¬åˆ°è‡ªåŠ¨å‘½åçš„ç»„é‡?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?<name>exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…exp,òq¶æ•èŽäh–‡æœ¬åˆ°åç§°ä¸ºname的组里,也可以写æˆ??'name'exp)</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?:exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…exp,不捕获匹配的文本åQŒä¹Ÿä¸ç»™æ­¤åˆ†¾l„分配组å?/u></span></td></tr><tr><th rowspan="4">零宽断言</th><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?=exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…exp前面的位¾|?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?<=exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…exp后面的位¾|?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?!exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…åŽé¢è·Ÿçš„不是exp的位¾|?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?<!exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>匚w…å‰é¢ä¸æ˜¯exp的位¾|?/u></span></td></tr><tr><th>注释</th><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?#comment)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>˜q™ç§¾cÕdž‹çš„分¾l„不å¯ÒŽ(gu¨©)­£åˆ™è¡¨è¾‘Ö¼çš„处理äñ”生ä“Q何媄响,用于提供注释让äh阅读</u></span></td></tr></tbody></table><br /><br /><table cellspacing="0"><caption>è¡?.懒惰限定½W?/caption><thead><tr><th scope="col">代码/语法</th><th scope="col">说明</th></tr></thead><tbody><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">*?</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复ä»ÀL„‹Æ¡ï¼Œä½†å°½å¯èƒ½ž®‘重å¤?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">+?</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复1‹Æ¡æˆ–更多‹Æ¡ï¼Œä½†å°½å¯èƒ½ž®‘重å¤?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">??</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复0‹Æ¡æˆ–1‹Æ¡ï¼Œä½†å°½å¯èƒ½ž®‘重å¤?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">{n,m}?</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复n到m‹Æ¡ï¼Œä½†å°½å¯èƒ½ž®‘重å¤?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">{n,}?</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>重复n‹Æ¡ä»¥ä¸Šï¼Œä½†å°½å¯èƒ½ž®‘重å¤?/u></span></td></tr></tbody></table><br /><br /><table cellspacing="0"><caption>è¡?.常用的处理选项</caption><thead><tr><th scope="col">名称</th><th scope="col">说明</th></tr></thead><tbody><tr><td>IgnoreCase(忽略大小å†?</td><td>匚w…æ—¶ä¸åŒºåˆ†å¤§å°å†™ã€?/td></tr><tr><td>Multiline(多行模式)</td><td>更改<span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">^</font></span>å’?span class="code" bakclassname="code"><font color="#0000ff">$</font></span>的含义,使它们分别在ä»ÀL„ä¸€è¡Œçš„行首和行ž®‘ÖŒ¹é…ï¼Œè€Œä¸ä»…仅在整个字½W¦ä¸²çš„开头和¾l“尾匚w…ã€?在此模式ä¸?<span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">$</font></span>的精¼‹®å«æ„æ˜¯:匚w…\n之前的位¾|®ä»¥åŠå­—½W¦ä¸²¾l“束前的位置.) </td></tr><tr><td>Singleline(单行模式)</td><td>更改<span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">.</font></span>的含义,使它与每一个字½W¦åŒ¹é…ï¼ˆåŒ…括换行½W¦\nåQ‰ã€?</td></tr><tr><td>IgnorePatternWhitespace(忽略½Iºç™½)</td><td>忽略表达式中的非转义½Iºç™½òq¶å¯ç”¨ç”±<span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">#</font></span>标记的注释ã€?/td></tr><tr><td>RightToLeft(从右向左查找)</td><td>匚w…ä»Žå³å‘左而不是从左向双™¿›è¡Œã€?/td></tr><tr><td>ExplicitCapture(昑ּæ•获)</td><td>仅捕获已被显式命名的¾l„ã€?/td></tr><tr><td>ECMAScript(JavaScript兼容模式)</td><td>使表辑ּçš„行ä¸ÞZ¸Žå®ƒåœ¨JavaScripté‡Œçš„è¡ŒäØ“ä¸€è‡´ã€?/td></tr></tbody></table><table cellspacing="0"><caption>è¡?.ž®šæœªè¯¦ç»†è®¨è®ºçš„语æ³?/caption><thead><tr><th scope="col">代码/语法</th><th scope="col">说明</th></tr></thead><tbody><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\a</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>报警字符(打印它的效果是电(sh¨´)脑嘀一å£?</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\b</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>通常是单词分界位¾|®ï¼Œä½†å¦‚果在字符¾c»é‡Œä½¿ç”¨ä»£è¡¨é€€æ ?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\t</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>制表½W¦ï¼ŒTab</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\r</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>回èžR</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\v</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>竖向制表½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\f</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>换页½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\n</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>换行½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\e</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>Escape</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\0nn</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>ASCII代码中八˜q›åˆ¶ä»£ç ä¸ºnn的字½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\xnn</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>ASCIIä»£ç ä¸­åå…­è¿›åˆ¶ä»£ç äØ“nn的字½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\unnnn</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>Unicodeä»£ç ä¸­åå…­è¿›åˆ¶ä»£ç äØ“nnnn的字½W?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\cN</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>ASCII控制字符。比如\cC代表Ctrl+C</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\A</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>字符串开å¤?¾cÖM¼¼^åQŒä½†ä¸å—处理多行选项的媄å“?</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\Z</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>字符串结ž®¾æˆ–行尾(不受处理多行选项的媄å“?</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\z</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>字符串结ž®?¾cÖM¼¼$åQŒä½†ä¸å—处理多行选项的媄å“?</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\G</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>当前搜烦的开å¤?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">\p{name}</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>Unicodeä¸­å‘½åäØ“name的字½W¦ç±»åQŒä¾‹å¦‚\p{IsGreek}</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?>exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>贪婪子表辑ּ</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?<x>-<y>exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>òqŒ™¡¡¾l?/u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?im-nsx:exp)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>在子表达式exp中改变处理选项</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?im-nsx)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>䏸™¡¨è¾‘Ö¼åŽé¢çš„部分改变处理选项</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?(exp)yes|no)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>把exp当作零宽正向先行断言åQŒå¦‚果在˜q™ä¸ªä½ç½®èƒ½åŒ¹é…ï¼Œä½¿ç”¨yesä½œäØ“æ­¤ç»„çš„è¡¨è¾‘Ö¼åQ›å¦åˆ™ä‹É用no</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?(exp)yes)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>同上åQŒåªæ˜¯ä‹É用空表达式作为no</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?(name)yes|no)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>如果命名为name的组捕获åˆîCº†å†…容åQŒä‹É用yesä½œäØ“è¡¨è¾¾å¼ï¼›å¦åˆ™ä½¿ç”¨no</u></span></td></tr><tr><td><span id="wmqeeuq" class="code" bakclassname="code"><font color="#0000ff">(?(name)yes)</font></span></td><td><span id="wmqeeuq" class="desc" bakclassname="desc"><u>同上åQŒåªæ˜¯ä‹É用空表达式作为no</u></span></td></tr></tbody></table><img src ="http://www.aygfsteel.com/jiabao/aggbug/234851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiabao/" target="_blank">金家å¯?/a> 2008-10-17 11:10 <a href="http://www.aygfsteel.com/jiabao/archive/2008/10/17/234851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene倒排索引原理(è½? http://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.html金家å¯?/dc:creator>金家å¯?/author>Fri, 17 Oct 2008 01:43:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.htmlhttp://www.aygfsteel.com/jiabao/comments/234822.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.html#Feedback1http://www.aygfsteel.com/jiabao/comments/commentRss/234822.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/234822.html
0åQ‰è®¾æœ‰ä¸¤½‹‡æ–‡ç«?å’?
文章1çš„å†…å®¹äØ“åQšTom lives in Guangzhou,I live in Guangzhou too.
文章2çš„å†…å®¹äØ“åQšHe once lived in Shanghai.

1)ç”׃ºŽlucene是基于关键词索引和查询的åQŒé¦–先我们要取得˜q™ä¸¤½‹‡æ–‡ç« çš„关键词,通常我们需要如下处理措æ–?br />a.我们现在有的是文章内容,即一个字½W¦ä¸²åQŒæˆ‘们先要找出字½W¦ä¸²ä¸­çš„æ‰€æœ‰å•词,卛_ˆ†è¯ã€‚英文单词由于用½Iºæ ¼åˆ†éš”åQŒæ¯”较好处理。中文单词间是连在一èµïLš„需要特ŒDŠçš„分词处理ã€?br />b.文章中的”inâ€? “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义åQŒè¿™äº›ä¸ä»£è¡¨æ¦‚念的词可以˜q‡æ×oæŽ?br />c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来åQŒæ‰€ä»¥æ‰€æœ‰å•词需要统一大小写ã€?br />d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来åQŒæ‰€ä»¥éœ€è¦æŠŠâ€œlives”,“lived”还原成“liveâ€?br />e.文章中的标点½W¦å·é€šå¸¸ä¸è¡¨½CºæŸ¿Uæ¦‚念,也可以过滤掉
在lucene中以上措施由Analyzer¾cÕd®Œæˆ?br />
¾lè¿‡ä¸Šé¢å¤„理å?br />    文章1的所有关键词为:[tom] [live] [guangzhou] [i] [live] [guangzhou]
    文章2的所有关键词为:[he] [live] [shanghai]

2) 有了关键词后åQŒæˆ‘们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关¾pÕd€’过来,变成åQšâ€œå…³é”®è¯â€å¯¹â€œæ‹¥æœ‰è¯¥å…³é”®è¯çš„æ‰€æœ‰æ–‡ç« å·â€ã€‚æ–‡ç«?åQ?¾lè¿‡å€’排后变æˆ?br />关键词   文章号
guangzhou  1
he         2
i           1
live       1,2
shanghai   2
tom         1

通常仅知道关键词在哪些文章中出现˜q˜ä¸å¤Ÿï¼Œæˆ‘们˜q˜éœ€è¦çŸ¥é“关键词在文章中出现‹Æ¡æ•°å’Œå‡ºçŽ°çš„ä½ç½®åQŒé€šå¸¸æœ‰ä¸¤¿Uä½¾|®ï¼ša)字符位置åQŒå³è®°å½•该词是文章中½W¬å‡ ä¸ªå­—½W¦ï¼ˆä¼˜ç‚¹æ˜¯å…³é”®è¯äº®æ˜¾æ—¶å®šä½å¿«åQ‰ï¼›b)关键词位¾|®ï¼ŒåŒ™®°å½•该词是文章中第几个关键词(优点是节¾U¦çƒ¦å¼•空间、词¾l„(phaseåQ‰æŸ¥è¯¢å¿«åQ‰ï¼Œlucene中记录的ž®±æ˜¯˜q™ç§ä½ç½®ã€?br />
加上“出现频率”和“出çŽîC½¾|®â€ä¿¡æ¯åŽåQŒæˆ‘们的索引¾l“æž„å˜äØ“åQ?br />关键词   文章号[出现频率]   出现位置
guangzhou 1[2]               3åQ?
he       2[1]               1
i         1[1]               4
live      1[2],2[1]           2åQ?åQ?
shanghai  2[1]               3
tom      1[1]               1

以live ˜q™è¡Œä¸ÞZ¾‹æˆ‘们说明一下该¾l“æž„åQšlive在文ç«?中出çŽîCº†2‹Æ¡ï¼Œæ–‡ç« 2中出çŽîCº†ä¸€‹Æ¡ï¼Œå®ƒçš„出现位置为â€?,5,2”这表示什么呢åQŸæˆ‘们需要结合文章号和出现频率来分析åQŒæ–‡ç«?中出çŽîCº†2‹Æ¡ï¼Œé‚£ä¹ˆâ€?,5”就表示live在文ç«?中出现的两个位置åQŒæ–‡ç«?中出çŽîCº†ä¸€‹Æ¡ï¼Œå‰©ä¸‹çš„â€?”就表示live是文ç«?中第 2个关键字ã€?br />    
以上ž®±æ˜¯lucene索引¾l“构中最核心的部分。我们注意到关键字是按字½W¦é¡ºåºæŽ’列的åQˆlucene没有使用B树结构)åQŒå› æ­¤lucene可以用二元搜索算法快速定位关键词ã€?br />    
实现时 lucenež®†ä¸Šé¢ä¸‰åˆ—åˆ†åˆ«ä½œä¸ø™¯å…¸æ–‡ä»Óž¼ˆTerm DictionaryåQ‰ã€é¢‘率文ä»?frequencies)、位¾|®æ–‡ä»?(positions)保存。其中词典文件不仅保存有每个关键词,˜q˜ä¿ç•™äº†æŒ‡å‘频率文äšg和位¾|®æ–‡ä»¶çš„æŒ‡é’ˆåQŒé€šè¿‡æŒ‡é’ˆå¯ä»¥æ‰‘Öˆ°è¯¥å…³é”®å­—的频率信息和位置信息ã€?br />
    Lucene中ä‹É用了field的概念,用于表达信息所在位¾|®ï¼ˆå¦‚标题中åQŒæ–‡ç« ä¸­åQŒurl中)åQŒåœ¨å»ºçƒ¦å¼•中åQŒè¯¥field信息也记录在词典文äšg中,每个关键词都有一个field信息(å› äØ“æ¯ä¸ªå…³é”®å­—ä¸€å®šå±žäºŽä¸€ä¸ªæˆ–å¤šä¸ªfield)ã€?br />
     ä¸ÞZº†å‡å°ç´¢å¼•æ–‡äšg的大ž®ï¼ŒLucene对烦引还使用了压¾~©æŠ€æœ¯ã€‚首先,对词典文件中的关键词˜q›è¡Œäº†åŽ‹¾~©ï¼Œå…³é”®è¯åŽ‹¾~©äØ“<前缀长度åQŒåŽ¾~€>åQŒä¾‹å¦‚ï¼šå½“å‰è¯äØ“â€œé˜¿æ‹‰ä¼¯è¯­â€ï¼Œä¸Šä¸€ä¸ªè¯ä¸ºâ€œé˜¿æ‹‰ä¼¯â€ï¼Œé‚£ä¹ˆâ€œé˜¿æ‹‰ä¼¯è¯­â€åŽ‹¾~©äØ“<3åQŒè¯­>。其‹Æ¡å¤§é‡ç”¨åˆ°çš„æ˜¯å¯¹æ•°å­—的压¾~©ï¼Œæ•°å­—只保存与上一个值的差å€û|¼ˆ˜q™æ ·å¯ä»¥å‡å°æ•°å­—的长度,˜q›è€Œå‡ž®‘保存该数字需要的字节敎ͼ‰ã€‚例如当前文章号æ˜?6389åQˆä¸åŽ‹ç¾ƒè¦ç”¨3个字节保存)åQŒä¸Šä¸€æ–‡ç« åäh˜¯16382åQŒåŽ‹¾~©åŽä¿å­˜7åQˆåªç”¨ä¸€ä¸ªå­—节)ã€?br />    
Â Â Â Â ä¸‹é¢æˆ‘ä»¬å¯ä»¥é€šè¿‡å¯¹è¯¥ç´¢å¼•çš„æŸ¥è¯¢æ¥è§£é‡Šä¸€ä¸‹äØ“ä»€ä¹ˆè¦å»ºç«‹ç´¢å¼•ã€?br />假设要查询单词 “live”,lucene先对词典二元查找、找到该词,通过指向频率文äšg的指针读出所有文章号åQŒç„¶åŽè¿”回结果。词兔R€šå¸¸éžå¸¸ž®ï¼Œå› è€Œï¼Œæ•´ä¸ª˜q‡ç¨‹çš„æ—¶é—´æ˜¯æ¯«ç§’¾U§çš„ã€?br />而用普通的™åºåºåŒšw…½Ž—法åQŒä¸å»ºçƒ¦å¼•,而是å¯ÒŽ(gu¨©)‰€æœ‰æ–‡ç« çš„内容˜q›è¡Œå­—符串匹配,˜q™ä¸ª˜q‡ç¨‹ž®†ä¼šç›¸å½“¾~“æ…¢åQŒå½“文章数目很大æ—Óž¼Œæ—‰™—´å¾€å¾€æ˜¯æ— æ³•忍受的ã€?


]]>
struts2标签http://www.aygfsteel.com/jiabao/archive/2008/10/13/234029.html金家�/dc:creator>金家�/author>Mon, 13 Oct 2008 07:46:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/10/13/234029.htmlhttp://www.aygfsteel.com/jiabao/comments/234029.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/10/13/234029.html#Feedback1http://www.aygfsteel.com/jiabao/comments/commentRss/234029.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/234029.html 

一�
写jsp™åµé¢çš„æ—¶å€™ï¼Œåœ¨struts2中,用的是s标记åQŒå…ˆå¼•入标记åQ?
<%@ taglib prefix="s" uri="/struts-tags"%>
二�
struts2的标½{‘Ö’Œ1是完全不同的ã€?
struts2的标½{‘Öˆ†ä¸ÞZ¸¤å¤§ç±»åQšéžUI标志和UI标志 struts1 ž®†æ ‡å¿—库按功能分成HTML、Tiles、Logicå’ŒBean½{‰å‡ éƒ¨åˆ†
下面ž®×ƒ»‹¾lstrut2的具体标½{¾ï¼š
1、UI
UIæ ‡å¿—åˆå¯ä»¥åˆ†ä¸ø™¡¨å•UI和非表单UI两部分。表单UI部分基本与Struts 1.x相同åQŒéƒ½æ˜¯å¯¹HTML表单元素的包装。不˜q‡ï¼ŒStruts 2.0加了几个我们¾lå¸¸åœ¨é¡¹ç›®ä¸­ç”¨åˆ°çš„æŽ§ä»¶å¦‚åQšdatepicker、doubleselect、timepicker、optiontransferselect½{‰ã€‚因䏸™¿™äº›æ ‡å¿—很多都¾lå¸¸ç”¨åˆ°åQŒè€Œä¸”参数也很多,要在一½‹‡æ–‡ç« è¯¦¾l†è¯´æ˜Žåƈ非易事ã€?
下面主要是ui标签的一些用�
form:
<s:form action="exampleSubmit" method="post" enctype="multipart/form-data">
<s:submit />
    <s:reset />

</s:form>可以上传文äšgçš„formã€?
textfieldåQ?
<s:textfield
            label="姓名åQ?
            name="name"
            tooltip="Enter your Name here" />
datepickeråQ?
<s:datepicker
            tooltip="Select Your Birthday"
            label="生日"
            name="birthday" />
textareaåQ?
<s:textarea
            tooltip="Enter your remart"
            label="备注"
            name="remart"
            cols="20"
            rows="3"/>
select:
<s:select
            tooltip="Choose user_type"
            label=""
            list="#{'free':'免费','vip':'收费'}" value="#{'free':'免费'}"  
           name="bean.user_type"
            emptyOption="true"
            headerKey="None"
            headerValue="None"/>
<s:select
            tooltip="Choose user_type"
            label=""
            list="#{'free':'免费','vip':'收费'}" value="#{'free':'免费'}"  
           name="bean.user_type"
            emptyOption="true"
            headerKey="None"
            headerValue="None"/>
<s:select
list="venderList"
listKey="id"
listValue="name"
value="%{profile.companyName}"
name="companyName" cssClass="sel_style_w_180"/>  
挺好用的
checkboxliståQ?
<s:checkboxlist
            tooltip="Choose your Friends"
            label="朋友"
            list="{'Patrick', 'Jason', 'Jay', 'Toby', 'Rene'}"
            name="friends"/>
checkboxåQ?
   <s:checkbox
            tooltip="Confirmed that your are Over 18"
            label="òq´é¾„"
            name="legalAge"
            value="18"/>
file:
   <s:file
            tooltip="Upload Your Picture"
            label="Picture"
            name="picture" />
a:
<s:a href="getP.jsp">­‘…链接提äº?lt;/s:a>
date :
<s:date name="ad_end_time" format="yyyy-MM-dd"/>


2、非UI
if、elseifå’Œelse 描述åQ?
执行基本的条件流转�
参数åQ?
名称必需默认¾cÕdž‹æè¿°å¤‡æ³¨test是Boolean军_®šæ ‡å¿—里内å®ÒŽ(gu¨©)˜¯å¦æ˜¾½Cºçš„表达式else标志没有˜q™ä¸ªå‚æ•°id否Object/String用来标识元素的id。在UI和表单中为HTMLçš„id属æ€?例子åQ?
<%@ page c %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Condition Flow</title>
    </head>
    <body>
        <h3>Condition Flow</h3>            
        <!--
            ˜q™é‡Œæœ‰ç‚¹ž®æŠ€å·§ï¼š
            本来可以ç”?parameters.name[0]来获得,è¯äh±‚中name的倹{€‚但是,在我实现include例子æ—Óž¼Œ
            无论我用param标志¾l™name赋ä“Q何å€û|¼Œ#parameters里面不会含有ä»ÖM½•å€û|¼Œæ‰€ä»?parameters.nameä¹ŸäØ“½Iºå€¹{€?
            
            å…¶åŽŸå› äØ“åQ?
            当ä‹É用include标志æ—Óž¼Œè¢«åŒ…含的™åµé¢åQˆincludedåQ‰é‡Œ#parameters拿到的是包含™åµé¢é‡Œçš„è¯äh±‚参数ã€?
            
            å› æ­¤åQŒè¿™é‡Œå¿…™åÀL‰‹å·¥è°ƒç”¨request.getParameter("name")ã€?
        -->
    <s:iterator value="linkList" status="bean">
   <tr>
    <td class="data_tab_tdcl">
     <s:property value="#bean.Index+1" />    </td>
    <td class="data_tab_tdcl"><s:property value="link_title" /></td>
    <td class="data_tab_tdcl"><s:property value="link_url" /></td>
    <td class="data_tab_tdcl">
    <s:if test="link_type == 1">
                   文字
                </s:if>
                <s:elseif test="link_type == 2">
                   囄¡‰‡
                </s:elseif>
                 <s:else>
                 -----
               </s:else>   
    </td>

   
    </body>
</html>
ä¾? condition.jsp
iterator 描述åQ?
用于遍历集合åQˆjava.util.CollectionåQ‰æˆ–æžšä‹Då€û|¼ˆjava.util.IteratoråQ‰ã€?
参数åQ?
名称必需默认¾cÕdž‹æè¿°status否String如果讄¡½®æ­¤å‚敎ͼŒä¸€ä¸ªIteratorStatus的实例将会压入每个遍历的堆栈value否Object/String要遍历的可枚丄¡š„åQˆiteratableåQ‰æ•°æ®æºåQŒæˆ–者将攑օ¥æ–°åˆ—表(ListåQ‰çš„对象id否Object/String用来标识元素的id。在UI和表单中为HTMLçš„id属æ€?例子åQ?
<%@ page c %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
    List list = new ArrayList();
    list.add("Max");
    list.add("Scott");
    list.add("Jeffry");
    list.add("Joe");
    list.add("Kelvin");
    request.setAttribute("names", list);
%>
<html>
    <head>
        <title>Iterator</title>
    </head>
    <body>
        <h3>Names: </h3>
        <!--
            1、此处的½Iºproperty元素用于获得当前iteratorçš„å€?
            2、status被设成stutsåQŒåœ¨iterator的里面就可以通过#stuts取得IteratorStatus的对象。IteratorStatus¾cÕdŒ…含当前序号信息,如是否第一个或最后一个,是否为奇数序受÷€‚这些信息在我们做格式化的时候,昑־—非常有用ã€?
        -->
        <ol>
            <s:iterator value="#request.names" status="stuts">                
                <s:if test="#stuts.odd == true">
                    <li>White <s:property /></li>
                </s:if>
                <s:else>
                    <li style="background-color:gray"><s:property /></li>
                </s:else>
            </s:iterator>
        </ol>
    </body>
</html>



]]>
Java½W”试题(部分åQ?/title><link>http://www.aygfsteel.com/jiabao/archive/2008/10/09/233317.html</link><dc:creator>金家å¯?/dc:creator><author>金家å¯?/author><pubDate>Thu, 09 Oct 2008 03:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/jiabao/archive/2008/10/09/233317.html</guid><wfw:comment>http://www.aygfsteel.com/jiabao/comments/233317.html</wfw:comment><comments>http://www.aygfsteel.com/jiabao/archive/2008/10/09/233317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jiabao/comments/commentRss/233317.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jiabao/services/trackbacks/233317.html</trackback:ping><description><![CDATA[     摘要: EJB æ–šw¢   94 ã€? EJB2.0 ...  <a href='http://www.aygfsteel.com/jiabao/archive/2008/10/09/233317.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jiabao/aggbug/233317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jiabao/" target="_blank">金家å¯?/a> 2008-10-09 11:56 <a href="http://www.aygfsteel.com/jiabao/archive/2008/10/09/233317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装WinCVSæ—¶Python不可用的问题http://www.aygfsteel.com/jiabao/archive/2008/09/21/230219.html金家å¯?/dc:creator>金家å¯?/author>Sun, 21 Sep 2008 00:52:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/09/21/230219.htmlhttp://www.aygfsteel.com/jiabao/comments/230219.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/09/21/230219.html#Feedback1http://www.aygfsteel.com/jiabao/comments/commentRss/230219.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/230219.html   
TCL or Python are not available, shell is disabled�/td>
有的¾|‘å‹è¯´æ˜¯ç‰ˆæœ¬çš„é—®é¢˜ï¼Œæˆ‘ä»Šå¤©å®‰è£…æ—¶ä¹Ÿæ˜¯ä¸€æ øP¼Œè£…了好三四个版本åQŒéƒ½ä¸€æ øP¼Œæœ€åŽåœ¨CSDN上找åˆîCº†½{”案ã€?br />
解决办法åQ?br />
在admin-〉Preferences->wincvs中有关于python的设¾|®ï¼Œ  
  其中python是指你的python虚拟机的位置åQŒä¸€èˆ¬æ˜¯python2X.dll的位¾|®ã€‚在你来说就是python24.dll的位¾|®ï¼Œä¸€èˆ¬è¿™ä¸ªæ–‡ä»¶ä¼šåœ¨ä½ çš„ç³»¾lŸæ–‡ä»¶ä¸­æ‰‘Öˆ°ã€? 
  Tcl则一般会在pythonæ–‡äšgæž¶çš„dlls子文件架中找刎ͼŒä¸€èˆ¬å¿UîCØ“tclxx.dllåQŒåœ¨ä½ å¤§æ¦‚就是tcl84.dll。如果是安装python2.3版本的话åQŒä¼šè‡ªåŠ¨æ‰‘Öˆ°åQŒä¸éœ€è¦è®¾¾|®ã€?br />
讄¡½®å¥½äº†åQŒWinCVS输出½H—口åQ?br />
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32Tk is available, Tk-macros are enabledTCL is available, shell is enabled : help (select and press enter)


]]>
[设计模式]jive中的[abstract Factory]http://www.aygfsteel.com/jiabao/archive/2008/09/16/229191.html金家å¯?/dc:creator>金家å¯?/author>Tue, 16 Sep 2008 07:57:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/09/16/229191.htmlhttp://www.aygfsteel.com/jiabao/comments/229191.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/09/16/229191.html#Feedback0http://www.aygfsteel.com/jiabao/comments/commentRss/229191.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/229191.html  AbstractFactory模式和可扩展æ€?br />  假如要实现较好的可扩展性,AbstractFactory模式¼‹®å®žæ˜¯ä¸€ä»¶åˆ©å™¨ã€‚如上面所è¯ß_¼Œå‡å¦‚要创建的Forum接口的不同实玎ͼŒè€Œåˆä¸æƒ³æ›´æ”¹ä»£ç çš„话åQŒå°±éœ€è¦ç”¨åˆ°æŠ½è±¡å·¥åŽ‚äº†ã€‚å†Jive中,AuthorizationFactory¾cÀL˜¯ä¸€ä¸ªæŠ½è±¡ç±»åQŒç”¨æ¥åˆ›å»ºAuthorization对象。这是一个抽象工厂,可以通过不同的子¾cÀL¥åˆ›å¾ä¸åŒçš„Authorization对象。这个工厂的实现æ–ÒŽ(gu¨©)³•是:
  
  在AuthorizationFactory中ä‹É用一个private static变量factoryåQŒç”¨æ¥å¼•用具体的抽象工厂的实例:
  private static AuthorizationFactory factory = null;
  
  用一个private staticçš„StringåQŒæ¥æŒ‡æ˜Žå…·ä½“的抽象工厂的子类¾cÕdåQ?br />  private static String className ="com.coolservlets.forum.database.DbAuthorizationFactory";
  
  然后是用一个private staticçš„loadAuthorizationFactoryæ–ÒŽ(gu¨©)³•来给˜q™ä¸ªfactory变量赋å€û|¼Œç”Ÿæˆå…·ä½“的抽象工厂类åQ?br />  
    private static void loadAuthorizationFactory() {
      if (factory == null) {
        synchronized(className) {
          if (factory == null) {
            String classNameProp = PropertyManager.getProperty(
              "AuthorizationFactory.className"
            );
            if (classNameProp != null) {
              className = classNameProp;
            }
            try {
              Class c = Class.forName(className);
              factory = (AuthorizationFactory)c.newInstance();
            }
            catch (Exception e) {
              System.err.println("Exception loading class: " + e);
              e.printStackTrace();
            }
          }
        }
      }
  }
  
  在staticçš„getAuthorizationæ–ÒŽ(gu¨©)³•˜q”回一个Authorization的过½E‹ä¸­åQŒå…ˆåˆå§‹åŒ–工厂类factory变量åQŒç„¶åŽç”¨factoryçš„createAuthorizationæ–ÒŽ(gu¨©)³•来创建:
  
    public static Authorization getAuthorization(String username,
        String passWord) throws UnauthorizedException
    {
      loadAuthorizationFactory();
      return factory.createAuthorization(username, password);
  }
  
  不同的子¾cÀLœ‰ä¸åŒçš„createAuthorizationæ–ÒŽ(gu¨©)³•的实现。比如在DbAuthorizationFactory˜q™ä¸ªAuthorizationFactory的数据库实现子类中,createAuthorizationæ–ÒŽ(gu¨©)³•是这样实现的åQ?br />  
    public Authorization createAuthorization(String username, String password)
        throws UnauthorizedException
    {
      if (username == null password == null) {
        throw new UnauthorizedException();
      }
      password = StringUtils.hash(password);
      int userID = 0;
      Connection con = null;
      PreparedStatement pstmt = null;
      try {
        con = DbConnectionManager.getConnection();
        pstmt = con.prepareStatement(AUTHORIZE);
        pstmt.setString(1, username);
        pstmt.setString(2, password);
  
        ResultSet rs = pstmt.executeQuery();
        if (!rs.next()) {
          throw new UnauthorizedException();
        }
        userID = rs.getInt(1);
      }
      catch( SQLException sqle ) {
        System.err.println("Exception in DbAuthorizationFactory:" + sqle);
        sqle.printStackTrace();
        throw new UnauthorizedException();
      }
      finally {
        try { pstmt.close(); }
        catch (Exception e) { e.printStackTrace(); }
        try { con.close();  }
        catch (Exception e) { e.printStackTrace(); }
      }
      return new DbAuthorization(userID);
    }
  
  在这个类中,可以看到抽象¾cÕd’Œå…·ä½“的子¾cÖM¹‹é—´çš„关系åQŒå®ƒä»¬æ˜¯å¦‚何协作的,又是如何划分抽象æ–ÒŽ(gu¨©)³•和非抽象æ–ÒŽ(gu¨©)³•的,˜q™éƒ½æ˜¯å€¼å¾—注重的地斏V€‚一般的åQŒæŠ½è±¡æ–¹æ³•需要子¾cÀL¥å®žçްåQŒè€ŒæŠ½è±¡ç±»ä¸­çš„非抽象方法应该所有子¾cÀL‰€èƒ½å¤Ÿå…׃ín的,或者可是说åQŒæ˜¯å®šä¹‰åœ¨æŠ½è±¡æ–¹æ³•之上的较高层的æ–ÒŽ(gu¨©)³•。这¼‹®å®žæ˜¯ä¸€ä¸ªæŠ½è±¡å·¥åŽ‚çš„å¥½ä¾‹å­ï¼è™½ç„¶å®žçŽ°çš„æ–¹æ³•å·²¾lå’ŒGOF中给出的实现相差较远了,但思想没变åQŒè¿™å„¿çš„实现åQŒä¹Ÿ¼‹®å®žæ˜¯è¦å·§å¦™çš„些ã€?br />  
  ˜q˜æœ‰ž®±æ˜¯é™æ€æ–¹æ³•的使用åQŒä‹É得这个类看è“v来有些Singleton的意呟뀂这使得对于AbstractFactory的创建变得简单ã€?br />  
  在AuthorizationFactory中定义的其它æ–ÒŽ(gu¨©)³•åQŒæ¶‰åŠåˆ°å…·ä½“的如何创建AuthorizationåQŒéƒ½æ˜¯ä½œä¸ºabstractæ–ÒŽ(gu¨©)³•出现åQŒå…·ä½“实现留¾l™å­¾cÀL¥å®Œæˆã€?br />  
  ˜q™æ ·åQŒåœ¨éœ€è¦ç”Ÿæˆä¸€ä¸ªAuthorization的时候,只需要调用AuthorizationFactory的静态方法getAuthorizationž®±å¯ä»¥äº†åQŒç”±å­ç±»å®žçŽ°äº†å…·ä½“çš„¾l†èŠ‚ã€?br />  
  其它的,如同上面讲到的,在创建Forum的时候用的ForumFactoryåQŒå…·æœ‰åŒä¸Šé¢ä¸€æ ïLš„实现åQŒè¿™ž®±æ˜¯æ¨¡å¼ä¹‹æ‰€ä»¥ç§°ä¸ºæ¨¡å¼çš„æ‰€åœ¨äº†ã€?
资料引用:http://www.knowsky.com/365144.html

]]>
题目: IOC 后台机制学习 http://www.aygfsteel.com/jiabao/archive/2008/08/27/225137.html金家�/dc:creator>金家�/author>Wed, 27 Aug 2008 12:41:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/08/27/225137.htmlhttp://www.aygfsteel.com/jiabao/comments/225137.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/08/27/225137.html#Feedback0http://www.aygfsteel.com/jiabao/comments/commentRss/225137.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/225137.html 题目: IOC 后台机制学习
¾l™å®š:
配置文äšg config.txt, æ–‡äšg内容
className = test.JavaBean1
field = username
value = ABC

该文件中的三个å€ég¼šéšæ—¶å¯èƒ½å˜åŒ–, 唯一不变的是 className 指定的都是一ä¸?JavaBean(ä¸ÞZº†½Ž€åŒ? 我们假定里面已经有一ä¸?username 属æ€? 例如:

class JavaBeanxxxx {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String uname) {
        this.username = uname;
    }
}

要求: 写一ŒDµä»£ç ? è¯Õd–配置文äšg config.txt, 然后实现æŠ?className 指定çš?JavaBean ¾cÕdŠ è½?注意˜q™ä¸ª¾cÕdæ˜¯å¯ä»¥ä¿®æ”¹çš„, 可配¾|®çš„), 然后生成一个实ä¾?
òq¶æŠŠé…ç½®æ–‡äšg中field字段指定的å€ég½œä¸ø™¿™ä¸ªå®žä¾‹çš„属性名(˜q™é‡Œæ˜¯username)æ‰€å¯¹åº”çš„å€ÆD®¾¾|®äØ“ ABC(字符ä¸?, òq¶ä¸”要读出最后设¾|®çš„å€?

此题已经è¢?TigerTian 解答出来, ‹Æ¢è¿Žå­¦ä¹ , 也感è°?TigerTian:
package com.gcoresoft.ioc;

import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.beans.*;

public class IOCStudy {
    
    
//Load the properties file
    private Properties prop=new Properties();
    
    
public void loadPropFile(String filename)
    {
        
try
        {
            FileInputStream fin
=new FileInputStream(filename);
            prop.load(fin);
            fin.close();
        }
catch(Exception e){
            System.out.println(e.toString());
        }
    }
    
    
private String getValueByName(String Name)
    {
        
return prop.getProperty(Name);
    }
    
    
public static void main(String[] args)
    {
        IOCStudy ioc
=new IOCStudy();
        ioc.loadPropFile(
"E:\\Work\\GetInIOC\\src\\com\\gcoresoft\\ioc\\Config.txt");
        
try
        {
            Class bean
=Class.forName(ioc.getValueByName("className"));
            
try {
                java.beans.BeanInfo info
=java.beans.Introspector.getBeanInfo(bean);
                java.beans.PropertyDescriptor pd[]
=info.getPropertyDescriptors();
                
try {
                    Method mSet
=null,mRead=null;
                    Object obj
=bean.newInstance();
                    
for(int i=0;i<pd.length;i++)
                        
if(pd[i].getName().equalsIgnoreCase(ioc.getValueByName("field")))
                        {
                            mSet
=pd[i].getWriteMethod();
                            mRead
=pd[i].getReadMethod();                            
                        }
                    
try {
                        mSet.invoke(obj, ioc.getValueByName(
"value"));
                        String str
=(String)mRead.invoke(obj, null);
                        System.out.println(str);
                    } 
catch (IllegalArgumentException e) {
                        
// TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
catch (InvocationTargetException e) {
                        
// TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } 
catch (InstantiationException e) {
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                } 
catch (IllegalAccessException e) {
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }

                
            } 
catch (IntrospectionException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
catch(ClassNotFoundException e){
            System.out.println(e.toString());
        }
        
    }
    
}


]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÇßË®ÏØ| ½­±±Çø| ÌØ¿ËË¹ÏØ| ¾¸±ßÏØ| ¸ß±®µêÊÐ| ϲµÂÏØ| ÎäѨÊÐ| Âí¹«ÊÐ| äê´¨ÏØ| ÓÀµÂÏØ| »Æ´óÏÉÇø| ´óÄþÏØ| µ÷±øÉ½ÊÐ| Ö¯½ðÏØ| ÁÙÏæÊÐ| ÀÖ²ýÊÐ| ÆÕÄþÊÐ| аͶû»¢ÓÒÆì| ׯÀËÏØ| ÉîÔóÏØ| Í­´¨ÊÐ| ÉêÔúÏØ| Ó¦³ÇÊÐ| ËÕÖÝÊÐ| н®| ½úÖÝÊÐ| лͨÃÅÏØ| ½­Î÷Ê¡| ׯºÓÊÐ| ½£´¨ÏØ| ÓÀ´ºÏØ| »ª³ØÏØ| Èð²ýÊÐ| ƽ¹ûÏØ| Î÷ÎÚÖéÄÂÇ߯ì| Âé½­ÏØ| ¶«Ïç×å×ÔÖÎÏØ| º£ÑôÊÐ| ÁÙÎäÏØ| »Ȱ| ĵµ¤½­ÊÐ|