ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久精品国产,yjizz视频网站在线播放,成人污污视频http://www.aygfsteel.com/stone840/学我者生åQŒåƒæˆ‘者死zh-cnSun, 15 Jun 2025 05:15:36 GMTSun, 15 Jun 2025 05:15:36 GMT60JPA注解记录http://www.aygfsteel.com/stone840/archive/2013/03/05/396062.html老天老天Tue, 05 Mar 2013 03:51:00 GMThttp://www.aygfsteel.com/stone840/archive/2013/03/05/396062.htmlhttp://www.aygfsteel.com/stone840/comments/396062.htmlhttp://www.aygfsteel.com/stone840/archive/2013/03/05/396062.html#Feedback1http://www.aygfsteel.com/stone840/comments/commentRss/396062.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/396062.htmlåQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?br />@NotFound(action=NotFoundAction.IGNORE)
使用hibernate
注解配置实体¾cȝš„å…Œ™”关系åQŒåœ¨many-to-one,one-to-oneå…Œ™”中,一边引用自另一边的属性,如果属性å€égØ“(f¨´)某某的数据在数据库不存在了,hibernate默认ä¼?x¨¬)抛出异常。解å†Ïx­¤é—®é¢˜åQŒåŠ ä¸Šå¦‚ä¸‹æ³¨è§£å°±å¯ä»¥äº†ï¼š(x¨¬)
@NotFound(action=NotFoundAction.IGNORE)åQŒæ„æ€æ˜¯æ‰¾ä¸åˆ°å¼•用的外键数据时忽略,NotFound默认是exception

åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?/strong>
cascade = CascadeType.REFRESHåQŒcascade=CascadeType.ALL

cascade表示¾U§è”操作  


   CascadeType.MERGE¾U§è”æ›´æ–°åQšè‹¥items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManagerçš„mergeæ–ÒŽ(gu¨©)³•

 
   CascadeType.PERSIST¾U§è”åˆäh–°åQšèŽ·å–order对象里也同时也重新获取最新的items时的对象。对应EntityManagerçš„refresh(object)æ–ÒŽ(gu¨©)³•有效。即ä¼?x¨¬)重新查询数据库里的最新数æ?nbsp; 
  

  CascadeType.REFRESH¾U§è”保存åQšå¯¹order对象保存时也对items里的对象也会(x¨¬)保存。对应EntityManagerçš„presistæ–ÒŽ(gu¨©)³•  
  

  CascadeType.REMOVE¾U§è”删除åQšå¯¹order对象删除也对items里的对象也会(x¨¬)删除。对应EntityManagerçš„removeæ–ÒŽ(gu¨©)³•  

CascadeType.PERSIST只有A¾cÀL–°å¢žæ—¶åQŒä¼š(x¨¬)¾U§è”B对象新增。若B对象在数据库存(跟新åQ‰åœ¨åˆ™æŠ›å¼‚常åQˆè®©Bå˜äØ“(f¨´)持久态)

CascadeType.MERGE指A¾cÀL–°å¢žæˆ–者变化,ä¼?x¨¬)çñ”联B对象åQˆæ–°å¢žæˆ–者变化)

CascadeType.REMOVE只有A¾cÕdˆ é™¤æ—¶åQŒä¼š(x¨¬)¾U§è”删除B¾c»ï¼›

CascadeType.ALL包含所有;

CascadeType.REFRESH没用˜q‡ã€?

¾lég¸ŠåQšå¤§å¤šæ•°æƒ…况用CascadeType.MERGEž®Þpƒ½è¾‘Öˆ°¾U§è”跟新又不报错åQŒç”¨CascadeType.ALL时要斟酌下CascadeType.REMOVE

@Fetch:

定义了加载关联关¾pȝš„获取½{–ç•¥. FetchMode 可以æ˜?

SELECT (在需要加载关联的时候触发select操作),     SUBSELECT(只对集合有效,使用了子查询½{–ç•¥,详情参考Hibernate参考文æ¡?

JOIN (在加载主实体(owner entity)的时候ä‹É用SQL JOIN来加载关联关¾p?.

JOIN ž®†è¦†å†™ä“Q何åšg˜qŸå±žæ€?(通过 JOIN½{–略加蝲的关联将不再å…ähœ‰å»¶è¿Ÿæ€?.



åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?/strong>
fetch=FetchType.LAZY
Hibernate的数据加载方式:(x¨¬)
1.åÏx—¶åŠ è² immediately loading

       实体加蝲完成å?/span>åQŒç«‹å›_Š è½½å…¶å…Œ™”的数据ã€?/span>
2.延迟加蝲lazy loading

       实体相关联的数据åœ?span style="color: rgb(255, 0, 0);">½W¬ä¸€‹Æ¡è®¿é—?/span>时再˜q›è¡Œè¯Õd–ã€?
3.预先加蝲 eager loading

        与immediately loading¾cÖM¼¼åQŒä½†å®žä½“和相兌™”的数据是通过一条sql同时è¯Õd–ã€?br />4.扚w‡åŠ è² batch loading
        åQ?br />


åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼
EntityManager 的API
下面是EntityManager的一些主要的接口æ–ÒŽ(gu¨©)³•åQ?
void persist(Object entity)
      通过调用EntityManagerçš„persist()æ–ÒŽ(gu¨©)³•åQŒæ–°å®žä½“实例ž®†è{æ¢äØ“(f¨´)受控状态。这意谓着当persist()æ–ÒŽ(gu¨©)³•所在的事务提交æ—Óž¼Œå®žä½“的数据将保存到数据库中。如果实体已¾lè¢«æŒä¹…化,那么调用persist()操作不会(x¨¬)发生ä»ÖM½•事情。如果对一个已¾låˆ é™¤çš„实体调用persist()操作åQŒåˆ é™¤æ€çš„实体又è{å˜äØ“(f¨´)受控态。如果对游离状的实体执行persist()操作åQŒå°†æŠ›å‡ºIllegalArgumentExceptionã€?在一个实体上调用persist()操作åQŒå°†òq¿æ’­åˆ°å’Œå®žä½“å…Œ™”的实体上åQŒæ‰§è¡Œç›¸åº”çš„¾U§è”持久化操作;

void remove(Object entity)
      通过调用remove()æ–ÒŽ(gu¨©)³•åˆ é™¤ä¸€ä¸ªå—æŽ§çš„å®žä½“ã€‚å¦‚æžœå®žä½“å£°æ˜ŽäØ“(f¨´)¾U§è”删除(cascade=REMOVE 或者cascade=ALL )åQŒè¢«å…Œ™”的实体也ä¼?x¨¬)被删除。在一个新建状态的实体上调用remove()操作åQŒå°†è¢«å¿½ç•¥ã€‚如果在游离实体上调用remove()操作åQŒå°†æŠ›å‡ºIllegalArgumentExceptionåQŒç›¸å…³çš„事务ž®†å›žæ»šã€‚如果在已经删除的实体上执行remove()操作åQŒä¹Ÿä¼?x¨¬)被忽略åQ?

void flush()
      ž®†å—控态的实体数据同步到数据库中;

T merge(T entity)
      ž®†ä¸€ä¸ªæ¸¸¼›ÀL€çš„实体持久化到数据库中åQŒåƈ转换为受控态的实体åQ?

T find(Class entityClass, Object primaryKey)
      以主键查询实体对象,entityClass是实体的¾c»ï¼ŒprimaryKey是主键å€û|¼Œå¦‚以下的代码查询Topic实体åQ?Topic t = em.find(Topic.class,1); Query createQuery(String qlString) æ ÒŽ(gu¨©)®JPA的查询语句创å»ÞZ¸€ä¸ªæŸ¥è¯¢å¯¹è±¡QueryåQŒå¦‚下面的代码:(x¨¬)
Query q= em.createQuery(""SELECT t FROM Topic t WHERE t.topicTitle LIKE :topicTitle")"); Query createNativeQuery(String sqlString)
使用本地数据库的SQL语句创徏一个Query对象åQŒQuery通过getResultList()æ–ÒŽ(gu¨©)³•执行查询后,˜q”回一个List¾l“果集,每一行数据对应一个Vectorã€?
使用本地数据库的SQL语句创徏一个Query对象åQŒQuery通过getResultList()æ–ÒŽ(gu¨©)³•执行查询后,˜q”回一个List¾l“果集,每一行数据对应一个Vectorã€?
看来要学ä¹?f¨¤n)的东东˜q˜æœ‰å¥½å¤šå•Š~~努力吧!


 



]]>
ssh框架整合开发杂è®?/title><link>http://www.aygfsteel.com/stone840/archive/2013/01/15/394256.html</link><dc:creator>老天</dc:creator><author>老天</author><pubDate>Tue, 15 Jan 2013 08:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/stone840/archive/2013/01/15/394256.html</guid><wfw:comment>http://www.aygfsteel.com/stone840/comments/394256.html</wfw:comment><comments>http://www.aygfsteel.com/stone840/archive/2013/01/15/394256.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stone840/comments/commentRss/394256.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stone840/services/trackbacks/394256.html</trackback:ping><description><![CDATA[<div><font style="background-color: #c7edcc">Struts2的下载地址åQ?br /><a >http://struts.apache.org/download.cgi</a><br />ç›®å‰å»ø™®®ä¸‹è²ç‰ˆæœ¬åQ?.2.1GAç‰?br /><br />Hibernate下蝲地址åQ?br /><a >http://www.hibernate.org/downloads<br /></a>ç›®å‰å»ø™®®ä¸‹è²ç‰ˆæœ¬åQ?.6.0 Finalç‰?br /><br />Spring的下载地址åQ?br /><a >http://www.springsource.org/download<br /></a>ç›®å‰å»ø™®®ä¸‹è²ç‰ˆæœ¬åQšç¨³å®šç‰ˆ3.0.5<br /><br /></font></div> <div><font style="background-color: #c7edcc"></font> </div> <div><font style="background-color: #c7edcc"></font> </div> <div><font style="background-color: #c7edcc"></font> </div> <div><font style="background-color: #c7edcc">2013-1-15   <br />1、struts2  top关键字理解ã€?nbsp; <br />1).top 指代当前˜q­ä»£å…ƒç´ åQŒå¯ä»¥äØ“(f¨´)对象åQ?br />2).˜q™é‡Œçš„top可用[0].top替代åQŒä½†ä¸èƒ½ä½¿ç”¨[0];[0]代表整个栈对象。如果单¾U¯è°ƒç”¨[0]ž®†ä¼š(x¨¬)调用å…?toString()æ–ÒŽ(gu¨©)³•输出对象信息åQ?br /><br /><br /><br />2、删除信息时错误日志åQ?br /><font size="2"><font color="#cc0000">java.lang.IllegalArgumentException:</font> <font color="#cc0000">Removing</font> <font color="#cc0000">a</font> <font color="#cc0000">detached</font> <font color="#cc0000">instance<br /><br /> Detached - a detached instance is an object that has been persistent, but its Session has been closed. The reference to the </div> <p>      object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be </p> <p>      reattached to a new Session at a later point in time, making it (and all the modifications) persistent again</p> <p>      现在应该明白了吧åQŒåœ¨åˆ é™¤ä¹‹å‰æŠŠè¿™ä¸ªDetached instance¾l‘定到当前的SesssionåQŒåœ¨ç”¨å½“前Sesssion删除此instance。修改后的代码如</p> <div><br />解决办法åQ?br />public void delete(SASVo  vo) {<br />               entityManager.remove( entityManager.merge(vo));<br />        }</font></font></font></div><img src ="http://www.aygfsteel.com/stone840/aggbug/394256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stone840/" target="_blank">老天</a> 2013-01-15 16:54 <a href="http://www.aygfsteel.com/stone840/archive/2013/01/15/394256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM、JDOM、DOM4J的区åˆ?.http://www.aygfsteel.com/stone840/archive/2012/12/17/393109.html老天老天Mon, 17 Dec 2012 08:19:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/12/17/393109.htmlhttp://www.aygfsteel.com/stone840/comments/393109.htmlhttp://www.aygfsteel.com/stone840/archive/2012/12/17/393109.html#Feedback0http://www.aygfsteel.com/stone840/comments/commentRss/393109.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/393109.html

dom是解析xml的底层接口之一(另一¿Uæ˜¯sax)  
而jdomå’Œdom4j则是åŸÞZºŽåº•层api的更高çñ”ž®è£…   
dom是通用的,而jdom和dom4j则是面向java语言�nbsp;
  
    DOM 是用与åã^台和语言无关的方式表½C?XML 文档的官æ–?W3C 标准。DOM 是以层次¾l“æž„¾l„织的节ç‚ÒŽ(gu¨©)ˆ–信息片断的集合。这个层‹Æ¡ç»“构允许开发äh员在æ ?w¨¨i)中å¯ÀL‰¾ç‰¹å®šä¿¡æ¯ã€‚分析该¾l“构通常需要加载整个文档和构造层‹Æ¡ç»“构,然后才能做ä“Q何工作。由于它是基于信息层‹Æ¡çš„åQŒå› è€?DOM 被认为是åŸÞZºŽæ ?w¨¨i)或åŸÞZºŽå¯¹è±¡çš„。DOM 以及(qi¨¢ng)òq¿ä¹‰çš„基于树(w¨¨i)的处理具有几个优炏V€‚首先,ç”׃ºŽæ ?w¨¨i)在内存中是持久的,因此可以修改它以便应用程序能å¯Ò?gu¨©)•°æ®å’Œ¾l“构作出更改。它˜q˜å¯ä»¥åœ¨ä»ÖM½•时候在æ ?w¨¨i)ä¸­ä¸Šä¸‹å¯ÆDˆªåQŒè€Œä¸æ˜¯åƒ SAX 那样是一‹Æ¡æ€§çš„处理。DOM 使用èµäh¥ä¹Ÿè¦½Ž€å•得多ã€?/span>
XML的四¿Uè§£æžå™¨(dom,sax,jdom,dom4j)原理å?qi¨¢ng)性能比较(转自zsq)    
1、DOM
    DOM 是用与åã^台和语言无关的方式表½C?XML 文档的官æ–?W3C 标准。DOM 是以层次¾l“æž„¾l„织的节ç‚ÒŽ(gu¨©)ˆ–信息片断的集合。这个层‹Æ¡ç»“构允许开发äh员在æ ?w¨¨i)中å¯ÀL‰¾ç‰¹å®šä¿¡æ¯ã€‚分析该¾l“构通常需要加载整个文档和构造层‹Æ¡ç»“构,然后才能做ä“Q何工作。由于它是基于信息层‹Æ¡çš„åQŒå› è€?DOM 被认为是åŸÞZºŽæ ?w¨¨i)或åŸÞZºŽå¯¹è±¡çš„。DOM 以及(qi¨¢ng)òq¿ä¹‰çš„基于树(w¨¨i)的处理具有几个优炏V€?br />    首先åQŒç”±äºŽæ ‘(w¨¨i)在内存中是持久的åQŒå› æ­¤å¯ä»¥ä¿®æ”¹å®ƒä»¥ä¾¿åº”用½E‹åºèƒ½å¯¹æ•°æ®å’Œç»“构作出更攏V€‚它˜q˜å¯ä»¥åœ¨ä»ÖM½•时候在æ ?w¨¨i)ä¸­ä¸Šä¸‹å¯ÆDˆªåQŒè€Œä¸æ˜¯åƒ SAX 那样是一‹Æ¡æ€§çš„处理。DOM 使用èµäh¥ä¹Ÿè¦½Ž€å•得多ã€?br />    另一斚w¢åQŒå¯¹äºŽç‰¹åˆ«å¤§çš„æ–‡æ¡£ï¼Œè§£æžå’ŒåŠ è½½æ•´ä¸ªæ–‡æ¡£å¯èƒ½å¾ˆæ…¢ä¸”å¾ˆè€—èµ„æºï¼Œå› æ­¤ä½¿ç”¨å…¶ä»–æ‰‹æ®µæ¥å¤„ç†è¿™æ ïL(f¨¥ng)š„æ•°æ®ä¼?x¨¬)更好。这些基于事件的模型åQŒæ¯”å¦?SAXã€?
2、SAX 
    ˜q™ç§å¤„理的优炚wžå¸¸ç±»ä¼égºŽ‹¹åª’体的优点。分析能够立卛_¼€å§‹ï¼Œè€Œä¸æ˜¯ç­‰å¾…所有的数据被处理。而且åQŒç”±äºŽåº”用程序只是在è¯Õd–数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优炏V€‚事实上åQŒåº”用程序甚至不必解析整个文档;它可以在某个条äšg得到满èƒö时停止解析。一般来è¯ß_(d¨¢)¼ŒSAX ˜q˜æ¯”它的替代è€?DOM 快许多ã€?br />3、选择 DOM ˜q˜æ˜¯é€‰æ‹© SAX åQ?/strong> 
    对于需要自å·Þq¼–写代码来处理 XML 文档的开发äh员来è¯ß_(d¨¢)¼Œé€‰æ‹© DOM ˜q˜æ˜¯ SAX 解析模型是一个非帔R‡è¦çš„设计决策ã€?nbsp;
    DOM 采用建立æ ?w¨¨i)åÅž¾l“构的方式访é—?XML 文档åQŒè€?SAX 采用的事件模型ã€?nbsp;
    DOM 解析器把 XML 文档转化ä¸ÞZ¸€ä¸ªåŒ…含其内容的树(w¨¨i)åQŒåƈ可以å¯ÒŽ(gu¨©) ‘(w¨¨i)˜q›è¡ŒéåŽ†ã€‚ç”¨ DOM 解析模型的优ç‚ÒŽ(gu¨©)˜¯¾~–程å®ÒŽ(gu¨©)˜“åQŒå¼€å‘äh员只需要调用徏æ ?w¨¨i)的指ä×o(h¨´)åQŒç„¶åŽåˆ©ç”¨navigation APIs讉K—®æ‰€éœ€çš„æ ‘(w¨¨i)节点来完成ä“Q务。可以很å®ÒŽ(gu¨©)˜“的添加和修改æ ?w¨¨i)中的元素。然而由于ä‹Éç”?DOM 解析器的时候需要处理整ä¸?XML 文档åQŒæ‰€ä»¥å¯¹æ€§èƒ½å’Œå†…存的要求比较高,ž®¤å…¶æ˜¯é‡åˆ°å¾ˆå¤§çš„ XML æ–‡äšg的时候。由于它的遍历能力,DOM 解析器常用于 XML 文档需要频¾Jçš„æ”¹å˜çš„æœåС䏭ã€?br />    SAX 解析器采用了åŸÞZºŽäº‹äšg的模型,它在解析 XML 文档的时候可以触发一¾pÕdˆ—的事ä»Óž¼Œå½“发现给定的tag的时候,它可以激‹zÖM¸€ä¸ªå›žè°ƒæ–¹æ³•,告诉该方法制定的标签已经扑ֈ°ã€‚SAX 对内存的要求通常ä¼?x¨¬)比较低åQŒå› ä¸ºå®ƒè®©å¼€å‘äh员自己来军_®šæ‰€è¦å¤„理的tag。特别是当开发äh员只需要处理文档中所包含的部分数据时åQŒSAX ˜q™ç§æ‰©å±•能力得到了更好的体现。但ç”?SAX 解析器的时候编码工作会(x¨¬)比较困难åQŒè€Œä¸”很难同时讉K—®åŒä¸€ä¸ªæ–‡æ¡£ä¸­çš„多处不同数据ã€?br />4、JDOM 
    JDOMçš„ç›®çš„æ˜¯æˆäØ“(f¨´) Java 特定文档模型åQŒå®ƒ½Ž€åŒ–与 XML çš„äº¤äº’åÆˆä¸”æ¯”ä½¿ç”¨ DOM 实现更快。由于是½W¬ä¸€ä¸?Java 特定模型åQŒJDOM 一直得到大力推òq¿å’Œä¿ƒè¿›ã€‚正在考虑通过“Java 规范è¯äh±‚ JSR-102”ž®†å®ƒæœ€¾lˆç”¨ä½?#8220;Java 标准扩展”。从 2000 òq´åˆž®±å·²¾lå¼€å§‹äº† JDOM 开发ã€?br />    JDOM ä¸?DOM 主要有两斚w¢ä¸åŒã€‚首先,JDOM ä»…ä‹É用具体类而不使用接口。这在某些方面简化了 APIåQŒä½†æ˜¯ä¹Ÿé™åˆ¶äº†çµ‹zÀL€§ã€‚第二,API 大量使用äº?Collections ¾c»ï¼Œ½Ž€åŒ–了那些已经熟æ?zh¨¨n)‰˜q™äº›¾cȝš„ Java 开发者的使用ã€?br />    JDOM 文档声明其目的是“使用 20%åQˆæˆ–æ›´å°‘åQ‰çš„¾_‘ÖŠ›è§£å†³ 80%åQˆæˆ–更多åQ‰Java/XML 问题”åQˆæ ¹æ®å­¦ä¹?f¨¤n)曲¾U¿å‡å®šäØ“(f¨´) 20%åQ‰ã€‚JDOM 对于大多æ•?Java/XML 应用½E‹åºæ¥è¯´å½“然是有用的åQŒåƈ且大多数开发者发çŽ?API æ¯?DOM å®ÒŽ(gu¨©)˜“理解得多。JDOM ˜q˜åŒ…括对½E‹åºè¡ŒäØ“(f¨´)的相当广泛检查以防止用户做ä“Q何在 XML 中无意义的事。然而,它仍需要æ?zh¨¨n)¨å……分理è§?XML 以便做一些超出基本的工作åQˆæˆ–者甚至理解某些情况下的错误)。这也许是比学习(f¨¤n) DOM æˆ?JDOM 接口都更有意义的工作ã€?br />    JDOM 自èín不包含解析器。它通常使用 SAX2 解析器来解析和验证输å…?XML 文档åQˆå°½½Ž¡å®ƒ˜q˜å¯ä»¥å°†ä»¥å‰æž„造的 DOM è¡¨ç¤ºä½œäØ“(f¨´)输入åQ‰ã€‚它包含一些è{换器以将 JDOM 表示输出æˆ?SAX2 事äšg‹¹ã€DOM 模型æˆ?XML 文本文档。JDOM 是在 Apache 许可证变体下发布的开放源码ã€?br />5、DOM4J 
    虽然 DOM4J 代表了完全独立的开发结果,但最初,它是 JDOM 的一¿Uæ™ºèƒ½åˆ†æ”¯ã€‚å®ƒåˆåÆˆäº†è®¸å¤šè¶…å‡ºåŸºæœ?XML 文档表示的功能,包括集成çš?XPath 支持、XML Schema 支持以及(qi¨¢ng)用于大文档或‹¹åŒ–文档的基于事件的处理。它˜q˜æä¾›äº†æž„徏文档表示的选项åQŒå®ƒé€šè¿‡ DOM4J API 和标å‡?DOM 接口å…ähœ‰òq¶è¡Œè®‰K—®åŠŸèƒ½ã€‚ä»Ž 2000 下半òq´å¼€å§‹ï¼Œå®ƒå°±ä¸€ç›´å¤„于开发之中ã€?br />    为支持所有这些功能,DOM4J 使用接口和抽象基本类æ–ÒŽ(gu¨©)³•。DOM4J 大量使用äº?API 中的 Collections ¾c»ï¼Œä½†æ˜¯åœ¨è®¸å¤šæƒ…况下åQŒå®ƒ˜q˜æä¾›ä¸€äº›æ›¿ä»£æ–¹æ³•以允许更好的性能或更直接的编码方法。直接好处是åQŒè™½ç„?DOM4J 付出了更复杂çš?API çš„ä»£ä»øP¼Œä½†æ˜¯å®ƒæä¾›äº†æ¯?JDOM 大得多的灉|´»æ€§ã€?br />    在添加灵‹zÀL€§ã€XPath 集成和对大文档处理的目标æ—Óž¼ŒDOM4J 的目标与 JDOM 是一æ ïL(f¨¥ng)š„åQšé’ˆå¯?Java 开发者的易用性和直观操作。它˜q˜è‡´åŠ›äºŽæˆäØ“(f¨´)æ¯?JDOM 更完整的解决æ–ÒŽ(gu¨©)¡ˆåQŒå®žçŽ°åœ¨æœ¬è´¨ä¸Šå¤„ç†æ‰€æœ?Java/XML 问题的目标。在完成该目标时åQŒå®ƒæ¯?JDOM æ›´å°‘å¼ø™°ƒé˜²æ­¢ä¸æ­£¼‹®çš„应用½E‹åºè¡ŒäØ“(f¨´)ã€?br />    DOM4J 是一个非帔Ržå¸æ€¼˜¿U€çš„Java XML APIåQŒå…·æœ‰æ€§èƒ½ä¼˜å¼‚、功能强大和极端易用使用的特点,同时它也是一个开放源代码的èÊY件。如今你可以看到­‘Šæ¥­‘Šå¤šçš?Java 软äšg都在使用 DOM4J 来读å†?XMLåQŒç‰¹åˆ«å€¼å¾—一提的是连 Sun çš?JAXM 也在ç”?DOM4Jã€?br />6、总述 
    JDOM å’?DOM 在性能‹¹‹è¯•时表çŽîC¸ä½»I¼Œåœ¨æµ‹è¯?10M 文档时内存溢出。在ž®æ–‡æ¡£æƒ…况下˜q˜å€¼å¾—考虑使用 DOM å’?JDOM。虽ç„?JDOM 的开发者已¾lè¯´æ˜Žä»–们期望在正式发行版前专注性能问题åQŒä½†æ˜¯ä»Žæ€§èƒ½è§‚点来看åQŒå®ƒ¼‹®å®žæ²¡æœ‰å€¼å¾—推荐之处。另外,DOM 仍是一个非常好的选择。DOM 实现òq¿æ³›åº”用于多¿Uç¼–½E‹è¯­­a€ã€‚它˜q˜æ˜¯è®¸å¤šå…¶å®ƒä¸?XML 相关的标准的基础åQŒå› ä¸ºå®ƒæ­£å¼èŽ·å¾— W3C 推荐åQˆä¸ŽåŸÞZºŽéžæ ‡å‡†çš„ Java 模型相对åQ‰ï¼Œæ‰€ä»¥åœ¨æŸäº›¾cÕdž‹çš„项目中可能也需要它åQˆå¦‚åœ?javascript 中ä‹Éç”?DOMåQ‰ã€?br />    SAX表现较好åQŒè¿™è¦ä¾èµ–于它特定的解析方式。一ä¸?SAX ‹‚€(g¨¨)‹¹‹å³ž®†åˆ°æ¥çš„XML‹¹ï¼Œä½†åƈ没有载入到内存(当然当XML‹¹è¢«è¯Õd…¥æ—Óž¼Œä¼?x¨¬)有部分文档暂时隐藏在内存中åQ‰ã€?br />    æ— ç–‘åQŒDOM4J是最好的åQŒç›®å‰è®¸å¤šå¼€æºé¡¹ç›®ä¸­å¤§é‡é‡‡ç”¨ DOM4JåQŒä¾‹å¦‚大名鼎鼎的 Hibernate 也用 DOM4J 来读å?XML 配置文äšg。如果不考虑可移植性,那就采用DOM4J吧!



]]>
log4j配置详细讲解http://www.aygfsteel.com/stone840/archive/2012/12/05/392505.html老天老天Wed, 05 Dec 2012 09:00:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/12/05/392505.htmlhttp://www.aygfsteel.com/stone840/comments/392505.htmlhttp://www.aygfsteel.com/stone840/archive/2012/12/05/392505.html#Feedback0http://www.aygfsteel.com/stone840/comments/commentRss/392505.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/392505.htmllog4j配置¼œ¥è§£
½W¬ä¸€æ­¥ï¼š(x¨¬)加入log4j-1.2.8.jar到l(f¨¡)ib下ã€?/span>

½W¬äºŒæ­¥ï¼š(x¨¬)在CLASSPATH下徏立log4j.properties。内容如下:(x¨¬)

1 log4j.rootCategory=INFO, stdout , R

2

3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

5 log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

6

7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

9 log4j.appender.R.layout=org.apache.log4j.PatternLayout

10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

11

12 log4j.logger.com.neusoft=DEBUG

13 log4j.logger.com.opensymphony.oscache=ERROR

14 log4j.logger.net.sf.navigator=ERROR

15 log4j.logger.org.apache.commons=ERROR

16 log4j.logger.org.apache.struts=WARN

17 log4j.logger.org.displaytag=ERROR

18 log4j.logger.org.springframework=DEBUG

19 log4j.logger.com.ibatis.db=WARN

20 log4j.logger.org.apache.velocity=FATAL

21

22 log4j.logger.com.canoo.webtest=WARN

23

24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

25 log4j.logger.org.hibernate=DEBUG

26 log4j.logger.org.logicalcobwebs=WARN

½W¬ä¸‰æ­¥ï¼š(x¨¬)相应的修改其中属性,修改之前ž®±å¿…™åȝŸ¥é“这些都是干什么的åQŒåœ¨½W¬äºŒéƒ¨åˆ†è®²è§£ã€?/span>

½W¬å››æ­¥ï¼š(x¨¬)在要输出日志的类中加入相兌™¯­å¥ï¼š(x¨¬)

定义属性:(x¨¬)protected final Log log = LogFactory.getLog(getClass());

在相应的æ–ÒŽ(gu¨©)³•中:(x¨¬)

if (log.isDebugEnabled())

{

log.debug(“System …..”);

}

二、Log4j说明

1 log4j.rootCategory=INFO, stdout , R

此句为将½{‰çñ”为INFO的日志信息输出到 stdoutå’ŒR˜q™ä¸¤ä¸ªç›®çš„地åQŒstdoutå’ŒR的定义在下面的代码,可以ä»ÀL„èµ·åã€‚ç­‰¾U§å¯åˆ†äØ“(f¨´)OFFã€?FATAL、ERROR、WARN、INFO、DEBUG、ALLåQŒå¦‚果配¾|®OFF则不打出ä»ÖM½•信息åQŒå¦‚果配¾|®äØ“(f¨´)INFO˜q™æ ·åªæ˜¾½CºINFO, WARN, ERRORçš„log信息åQŒè€ŒDEBUG信息不会(x¨¬)被显½Cºï¼Œå…·ä½“讲解可参照第三部分定义配¾|®æ–‡ä»¶ä¸­çš„loggerã€?/span>

3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

此句为定义名为stdout的输出端是哪¿Uç±»åž‹ï¼Œå¯ä»¥æ˜?/span>

org.apache.log4j.ConsoleAppenderåQˆæŽ§åˆ¶å°åQ‰ï¼Œ

org.apache.log4j.FileAppenderåQˆæ–‡ä»Óž¼‰åQ?/span>

org.apache.log4j.DailyRollingFileAppenderåQˆæ¯å¤©äñ”生一个日志文ä»Óž¼‰åQ?/span>

org.apache.log4j.RollingFileAppenderåQˆæ–‡ä»¶å¤§ž®åˆ°è¾¾æŒ‡å®šå°ºå¯¸çš„æ—¶å€™äñ”生一个新的文ä»Óž¼‰

org.apache.log4j.WriterAppenderåQˆå°†æ—¥å¿—信息以流格式发送到ä»ÀL„æŒ‡å®šçš„地方)

具体讲解可参照第三部分定义配¾|®æ–‡ä»¶ä¸­çš„Appenderã€?/span>

4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

此句为定义名为stdout的输出端的layout是哪¿Uç±»åž‹ï¼Œå¯ä»¥æ˜?/span>

org.apache.log4j.HTMLLayoutåQˆä»¥HTML表格形式布局åQ‰ï¼Œ

org.apache.log4j.PatternLayoutåQˆå¯ä»¥çµ‹zÕdœ°æŒ‡å®šå¸ƒå±€æ¨¡å¼åQ‰ï¼Œ

org.apache.log4j.SimpleLayoutåQˆåŒ…含日志信息的¾U§åˆ«å’Œä¿¡æ¯å­—½W¦ä¸²åQ‰ï¼Œ

org.apache.log4j.TTCCLayoutåQˆåŒ…含日志äñ”生的旉™—´ã€çº¿½E‹ã€ç±»åˆ«ç­‰½{‰ä¿¡æ¯ï¼‰

具体讲解可参照第三部分定义配¾|®æ–‡ä»¶ä¸­çš„Layoutã€?/span>

5 log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

如果使用pattern布局ž®Þp¦æŒ‡å®šçš„æ‰“åîC¿¡æ¯çš„具体格式ConversionPatternåQŒæ‰“印参数如下:(x¨¬)

%m 输出代码中指定的消息

%p 输出优先¾U§ï¼Œå³DEBUGåQŒINFOåQŒW(xu¨¦)ARNåQŒERRORåQŒFATAL

%r 输出自应用启动到输出该log信息耗费的毫¿U’æ•°

%c 输出所属的¾cȝ›®åQŒé€šå¸¸ž®±æ˜¯æ‰€åœ¨ç±»çš„å…¨å?/span>

%t 输出产生该日志事件的¾U¿ç¨‹å?/span>

%n 输出一个回车换行符åQŒW(xu¨¦)indowsòq›_°ä¸?#8220;rn”åQŒUnixòq›_°ä¸?#8220;n”

%d 输出日志旉™—´ç‚¹çš„æ—¥æœŸæˆ–æ—¶é—ß_(d¨¢)¼Œé»˜è®¤æ ¼å¼ä¸ºISO8601åQŒä¹Ÿå¯ä»¥åœ¨å…¶åŽæŒ‡å®šæ ¼å¼ï¼Œæ¯”如åQ?d{yyyy MMM dd HH:mm:ss,SSS}åQŒè¾“出类ä¼û|¼š(x¨¬)2002òq?0æœ?8æ—?22åQ?0åQ?8åQ?21

%l 输出日志事äšg的发生位¾|®ï¼ŒåŒ…括¾cȝ›®åã€å‘生的¾U¿ç¨‹åQŒä»¥å?qi¨¢ng)在代码中的行数ã€?/span>

[QC]是log信息的开å¤ß_(d¨¢)¼Œå¯ä»¥ä¸ÞZ“Q意字½W¦ï¼Œä¸€èˆ¬äØ“(f¨´)™å¹ç›®½Ž€¿U°ã€?/span>

输出的信�/span>

[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'

具体讲解可参照第三部分定义配¾|®æ–‡ä»¶ä¸­çš„æ ¼å¼åŒ–日志信息ã€?/span>

7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

此句与第3行一栗÷€‚定义名为Rçš„è¾“å‡ºç«¯çš„ç±»åž‹äØ“(f¨´)每天产生一个日志文件ã€?/span>

8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

此句为定义名为R的输出端的文件名为D:\Tomcat 5.5\logs\qc.log

可以自行修改�/span>

9 log4j.appender.R.layout=org.apache.log4j.PatternLayout

与第4行相同�/span>

10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

与第5行相同�/span>

12 log4j.logger.com. neusoft =DEBUG

指定com.neusoft包下的所有类的等¾U§äØ“(f¨´)DEBUGã€?/span>

可以把com.neusoftæ”¹äØ“(f¨´)自己™å¹ç›®æ‰€ç”¨çš„包名ã€?/span>

13 log4j.logger.com.opensymphony.oscache=ERROR

14 log4j.logger.net.sf.navigator=ERROR

˜q™ä¸¤å¥æ˜¯æŠŠè¿™ä¸¤ä¸ªåŒ…下出现的错误的½{‰çñ”è®¾äØ“(f¨´)ERRORåQŒå¦‚果项目中没有配置EHCacheåQŒåˆ™ä¸éœ€è¦è¿™ä¸¤å¥ã€?/span>

15 log4j.logger.org.apache.commons=ERROR

16 log4j.logger.org.apache.struts=WARN

˜q™ä¸¤å¥æ˜¯struts的包ã€?/span>

17 log4j.logger.org.displaytag=ERROR

˜q™å¥æ˜¯displaytag的包。(QC问题列表™åµé¢æ‰€ç”¨ï¼‰

18 log4j.logger.org.springframework=DEBUG

此句为Spring的包�/span>

24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

25 log4j.logger.org.hibernate=DEBUG

此两句是hibernate的包�/span>

以上˜q™äº›åŒ…的讄¡½®å¯æ ¹æ®é¡¹ç›®çš„实际情况而自行定制ã€?/span>

三、log4j详解

1、定义配¾|®æ–‡ä»?/span>

Log4j支持两种配置文äšg格式åQŒä¸€¿Uæ˜¯XML格式的文ä»Óž¼Œä¸€¿Uæ˜¯Javaç‰ÒŽ(gu¨©)€§æ–‡ä»¶log4j.propertiesåQˆé”®=å€û|¼‰ã€‚下面将介绍使用log4j.propertiesæ–‡äšgä½œäØ“(f¨´)配置文äšg的方æ³?

、配¾|®æ ¹Logger

Logger 负责处理日志记录的大部分操作�/span>

å…¶è¯­æ³•äØ“(f¨´)åQ?/span>

log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中åQŒlevel 是日志记录的优先¾U§ï¼Œåˆ†äØ“(f¨´)OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的çñ”别。Log4j廸™®®åªä‹É用四个çñ”别,ä¼?å…ˆçñ”从高åˆîC½Žåˆ†åˆ«æ˜¯ERROR、WARN、INFO、DEBUG。通过在这里定义的¾U§åˆ«åQŒæ?zh¨¨n)¨å¯ä»¥æŽ§åˆ¶åˆ°åº”用程序中相应¾U§åˆ«çš„æ—¥å¿—信息的开兟뀂比如在˜q™é‡Œå®?义了INFO¾U§åˆ«åQŒåªæœ‰ç­‰äºŽåŠ(qi¨¢ng)高于˜q™ä¸ª¾U§åˆ«çš„æ‰˜q›è¡Œå¤„理åQŒåˆ™åº”用½E‹åºä¸­æ‰€æœ‰DEBUG¾U§åˆ«çš„æ—¥å¿—信息将不被打印出来。ALL:打印所有的日志åQŒOFFåQšå…³ 闭所有的日志输出ã€?appenderNamež®±æ˜¯æŒ‡å®šæ—¥å¿—信息输出到哪个地斏V€‚可同时指定多个输出目的地ã€?/span>

、配¾|®æ—¥å¿—信息输出目的地 Appender

Appender 负责控制日志记录操作的输出�/span>

å…¶è¯­æ³•äØ“(f¨´)åQ?/span>

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1



log4j.appender.appenderName.optionN = valueN

˜q™é‡Œçš„appenderName为在①里定义的åQŒå¯ä»ÀL„èµ·åã€?/span>

其中åQŒLog4j提供的appender有以下几¿Uï¼š(x¨¬)

org.apache.log4j.ConsoleAppenderåQˆæŽ§åˆ¶å°åQ‰ï¼Œ

org.apache.log4j.FileAppenderåQˆæ–‡ä»Óž¼‰åQ?/span>

org.apache.log4j.DailyRollingFileAppenderåQˆæ¯å¤©äñ”生一个日志文ä»Óž¼‰åQ?/span>

org.apache.log4j.RollingFileAppenderåQˆæ–‡ä»¶å¤§ž®åˆ°è¾¾æŒ‡å®šå°ºå¯¸çš„æ—¶å€™äñ”生一个新的文ä»Óž¼‰åQŒå¯é€šè¿‡ log4j.appender.R.MaxFileSize=100KB讄¡½®æ–‡äšg大小åQŒè¿˜å¯é€šè¿‡ log4j.appender.R.MaxBackupIndex=1讄¡½®ä¸ÞZ¿å­˜ä¸€ä¸ªå¤‡ä»½æ–‡ä»¶ã€?/span>

org.apache.log4j.WriterAppenderåQˆå°†æ—¥å¿—信息以流格式发送到ä»ÀL„æŒ‡å®šçš„地方)

例如åQšlog4j.appender.stdout=org.apache.log4j.ConsoleAppender

定义一个名为stdout的输出目的地åQŒConsoleAppender为控制台ã€?/span>

、配¾|®æ—¥å¿—信息的格式åQˆå¸ƒå±€åQ‰Layout

Layout 负责格式化Appender的输出�/span>

å…¶è¯­æ³•äØ“(f¨´)åQ?/span>

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1



log4j.appender.appenderName.layout.optionN = valueN

其中åQŒLog4j提供的layout有以下几¿Uï¼š(x¨¬)

org.apache.log4j.HTMLLayoutåQˆä»¥HTML表格形式布局åQ‰ï¼Œ

org.apache.log4j.PatternLayoutåQˆå¯ä»¥çµ‹zÕdœ°æŒ‡å®šå¸ƒå±€æ¨¡å¼åQ‰ï¼Œ

org.apache.log4j.SimpleLayoutåQˆåŒ…含日志信息的¾U§åˆ«å’Œä¿¡æ¯å­—½W¦ä¸²åQ‰ï¼Œ

org.apache.log4j.TTCCLayoutåQˆåŒ…含日志äñ”生的旉™—´ã€çº¿½E‹ã€ç±»åˆ«ç­‰½{‰ä¿¡æ¯ï¼‰

2、格式化日志信息

Log4J采用¾cÖM¼¼C语言中的printf函数的打印格式格式化日志信息åQŒæ‰“印参数如下:(x¨¬)

%m 输出代码中指定的消息

%p 输出优先¾U§ï¼Œå³DEBUGåQŒINFOåQŒW(xu¨¦)ARNåQŒERRORåQŒFATAL

%r 输出自应用启动到输出该log信息耗费的毫¿U’æ•°

%c 输出所属的¾cȝ›®åQŒé€šå¸¸ž®±æ˜¯æ‰€åœ¨ç±»çš„å…¨å?/span>

%t 输出产生该日志事件的¾U¿ç¨‹å?/span>

%n 输出一个回车换行符åQŒW(xu¨¦)indowsòq›_°ä¸?#8220;rn”åQŒUnixòq›_°ä¸?#8220;n”

%d 输出日志旉™—´ç‚¹çš„æ—¥æœŸæˆ–æ—¶é—ß_(d¨¢)¼Œé»˜è®¤æ ¼å¼ä¸ºISO8601åQŒä¹Ÿå¯ä»¥åœ¨å…¶åŽæŒ‡å®šæ ¼å¼ï¼Œæ¯”如åQ?d{yyyy MMM dd HH:mm:ss,SSS}åQŒè¾“出类ä¼û|¼š(x¨¬)2002òq?0æœ?8æ—?22åQ?0åQ?8åQ?21

%l 输出日志事äšg的发生位¾|®ï¼ŒåŒ…括¾cȝ›®åã€å‘生的¾U¿ç¨‹åQŒä»¥å?qi¨¢ng)在代码中的行数ã€?/span>

3、在代码中ä‹É用Log4j

我们在需要输出日志信息的¾cÖM¸­åšå¦‚下的三个工作åQ?/span>

1、导入所有需的commongs-logging¾c»ï¼š(x¨¬)

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

2、在自己的类中定义一个org.apache.commons.logging.Log¾cȝš„¿Uæœ‰é™æ€ç±»æˆå‘˜åQ?/span>

private final Log log = LogFactory.getLog(getClass());

LogFactory.getLog()æ–ÒŽ(gu¨©)³•的参æ•îC‹É用的是当前类的classã€?/span>

3、ä‹É用org.apache.commons.logging.Log¾cÈš„æˆå‘˜æ–ÒŽ(gu¨©)³•输出日志信息åQ?/span>

if (log.isDebugEnabled())
{
log.debug("111");
}
if (log.isInfoEnabled())
{
log.info("222");
}
if (log.isWarnEnabled())
{
log.warn("333");
}
if (log.isErrorEnabled())
{
log.error("444");
}
if (log.isFatalEnabled())
{
log.fatal("555")
}


]]>
SSH里的注释集锦http://www.aygfsteel.com/stone840/archive/2012/12/03/392359.html老天老天Mon, 03 Dec 2012 03:09:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/12/03/392359.htmlhttp://www.aygfsteel.com/stone840/comments/392359.htmlhttp://www.aygfsteel.com/stone840/archive/2012/12/03/392359.html#Feedback0http://www.aygfsteel.com/stone840/comments/commentRss/392359.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/392359.html1、@Transient 
使用场景åQšä¸€èˆ¬åœ¨æ¨¡åž‹ä¸­å¯¹åº”某一个字ŒD늚„属性中的setå’Œgetæ–ÒŽ(gu¨©)³•中。作用是数据与数据库中不一一对应。如åQ?br />/*@Transient
 public String getModulename() {
  return modulename;
 }
 public void setModulename(String modulename) {
  this.modulename = modulename;
 }*/

2、@ManyToOne
多对一。可以把另一个模型对应过来。在查询æ—Óž¼Œæ— éœ€è¦è”表查询ã€?br /> @JoinColumn(name="moduleid",insertable=false,updatable=false)
 @NotFound(action=NotFoundAction.IGNORE)
 public CateModule getCateModule() {
  return cateModule;
 }
 public void setCateModule(CateModule cateModule) {
  this.cateModule = cateModule;
 }

]]>
循环模型中setå’Œgetæ–ÒŽ(gu¨©)³•里的属æ€?/title><link>http://www.aygfsteel.com/stone840/archive/2012/12/03/392357.html</link><dc:creator>老天</dc:creator><author>老天</author><pubDate>Mon, 03 Dec 2012 02:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/stone840/archive/2012/12/03/392357.html</guid><wfw:comment>http://www.aygfsteel.com/stone840/comments/392357.html</wfw:comment><comments>http://www.aygfsteel.com/stone840/archive/2012/12/03/392357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stone840/comments/commentRss/392357.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stone840/services/trackbacks/392357.html</trackback:ping><description><![CDATA[private Object filterHTMLTag(Object obj) throws Exception{<br />  if(obj==null) return obj;<br />  Class objCls=obj.getClass();<br />  Field[] allFields=objCls.getDeclaredFields();<br />  if(allFields!=null && allFields.length!=0){<br />   HTMLFilter filter=new HTMLFilter();<br />   for(Field field: allFields){<br />    if(field!=null){<br />     if(field.getType().equals(String.class)){<br />      String getMethod="get"+upperCaseFirstChar(field.getName());<br />      String setMethod="set"+upperCaseFirstChar(field.getName());<br />      try {<br />       //String value=(String)objCls.getMethod(getMethod).invoke(obj);<br />       //value=filter.filter(value);<br />       //objCls.getMethod(setMethod, value.getClass()).invoke(obj, value);<br />      } catch (Exception e) {<br />       throw e;<br />      }<br />     }<br />    }<br />   }<br />  }<br />  return obj;<br /> }<img src ="http://www.aygfsteel.com/stone840/aggbug/392357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stone840/" target="_blank">老天</a> 2012-12-03 10:49 <a href="http://www.aygfsteel.com/stone840/archive/2012/12/03/392357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句记录http://www.aygfsteel.com/stone840/archive/2012/11/28/392154.html老天老天Wed, 28 Nov 2012 10:21:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/11/28/392154.htmlhttp://www.aygfsteel.com/stone840/comments/392154.htmlhttp://www.aygfsteel.com/stone840/archive/2012/11/28/392154.html#Feedback1http://www.aygfsteel.com/stone840/comments/commentRss/392154.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/392154.htmlALTER TABLE "public"."base_contract"
ADD COLUMN "isrejected" int2 DEFAULT 0 NOT NULL;

ALTER TABLE "public"."base_contract"
ADD COLUMN "userid" int8 DEFAULT 0 NOT NULL;

ALTER TABLE "public"."base_user"
ADD COLUMN "telphone" varchar(20) DEFAULT ''::character varying NOT NULL;


INSERT INTO "base_role" VALUES ('21', '代理å•?, '只能查看对属于自å·Þqš„æ‰€æœ‰åˆå?);

update base_contract a set userid=(SELECT b.userid from base_user b where a.username=b.username LIMIT 1)

delete from base_menu;

BEGIN;
INSERT INTO "base_menu" VALUES ('1', 'infoMenu', null, '公用菜单', null, null, null, null, 'Y', '0');
INSERT INTO "base_menu" VALUES ('2', 'ediUser', 'infoMenu', '修改个äh资料', 'Note', 'ediUser.jsp', 'top', '2', 'N', '0');
COMMIT;

 



]]>
Centos6.0下Nginx+Resin配置http://www.aygfsteel.com/stone840/archive/2012/11/20/391659.html老天老天Tue, 20 Nov 2012 10:40:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/11/20/391659.htmlhttp://www.aygfsteel.com/stone840/comments/391659.htmlhttp://www.aygfsteel.com/stone840/archive/2012/11/20/391659.html#Feedback1http://www.aygfsteel.com/stone840/comments/commentRss/391659.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/391659.html一、安装环境:(x¨¬)
¾pȝ»Ÿç‰ˆæœ¬:Centos 6.0 x86_64
Nginx版本åQ?.0.11
Jdk版本åQ?.7.0
Resin版本åQ?.0.23
首先下蝲需要安装的软äšgåQšã€JDK可以去java官网下蝲ã€?br />wget http://nginx.org/download/nginx-1.1.11.tar.gz 下蝲nginx
wget http://www.caucho.com/download/resin-pro-4.0.23.tar.gz 下蝲resin
下蝲�usr/src �br />二、安装nginx
useradd www ;yum install pcre-devel && tar -xzf nginx-1.0.10.tar.gz && cd nginx-1.0.11; sed -i -e ‘s/1.0.11//g’ -e ‘s/nginx\//TDWS/g’ -e ‘s/”NGINX”/”TDWS”/g’ src/core/nginx.h &&./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module &&make &&make install

三、安装jdkòq¶ä¸”配置resin
下蝲jdk1.7.0åQŒåƈ且解压到/usr/java/ä¸?¾l“果昄¡¤ºä¸?/usr/java/jdk1.7.0
cd /usr/src/ && tar xzf resin-pro-4.0.23.tar.gz &&cd resin-pro-4.0.23 &&./configure –with-java-home=/usr/java/jdk1.7.0 &&make &&make install 卛_¯åQ?br />安装完后resin的日志目录在 /var/log/resin/ä¸?br />启动resin命ä×o(h¨´)如下 /etc/init.d/resin start 卛_¯åQŒç„¶åŽè®¿é—®http://ip:8080

四、nginx整合resin的方式跟nginx整合tomcatä¸€æ øP¼Œå†è¿™é‡Œå°±ä¸é‡å¤äº†åQ?br />提供我上一½‹‡æ–‡ç« åœ°å€:http://chinaapp.sinaapp.com/?p=1922

五、resin配置优化:
以下是我的配¾|®æ–‡ä»?贴出一部分修改的,其他的保持不变,在回复下面!



]]>
freemarker 基本指ä×o(h¨´) http://www.aygfsteel.com/stone840/archive/2012/11/15/391367.html老天老天Thu, 15 Nov 2012 03:30:00 GMThttp://www.aygfsteel.com/stone840/archive/2012/11/15/391367.htmlhttp://www.aygfsteel.com/stone840/comments/391367.htmlhttp://www.aygfsteel.com/stone840/archive/2012/11/15/391367.html#Feedback0http://www.aygfsteel.com/stone840/comments/commentRss/391367.htmlhttp://www.aygfsteel.com/stone840/services/trackbacks/391367.html一åQšif指ä×o(h¨´)åQ?br /><#if condition>...
<#elseif condition2>...
<#elseif condition3>...
...<#else>...
</#if>

二:(x¨¬)switch
<#switch value>
<#case refValue1>...<#break>
<#case refValue2>...<#break>...
<#case refValueN>...<#break>
<#default>...</#switch>

三:(x¨¬)liståQŒbreak
<#list sequence as item>
...
</#list>
两个ç‰ÒŽ(gu¨©)®Šçš„åó@环变量:(x¨¬)
item_index: 当前变量的烦引倹{€?br />item_has_next: 是否存在下一个对象ã€?/p>

可以ç”?lt;#break/>指ä×o(h¨´)¼›Õd¼€loop循环ã€?/p>

四:(x¨¬)include指ä×o(h¨´)
<#include filename>或�br /><#include filenameoptions>
filename: 表达式è{æ¢äØ“(f¨´)字符ä¸?br />options: encoding=encoding, parse=parse encoding: 表达式è{æ¢äØ“(f¨´)字符ä¸?br />parse: 表达式è{æ¢äØ“(f¨´)逻辑å€û|¼Œæ˜¯å¦ä½œäØ“(f¨´)ftlæ–‡äšg解析ã€?br /><#include "/common/navbar.html" parse=false encoding="Shift_JIS">

<#include "*/footer.ftl">表示当前目录下以å?qi¨¢ng)所有父目录下的文äšg。如果当前模版在/foo/bar/template.ftl åQŒé‚£ä¹ˆæŸ¥æ‰¾footer.ftlçš„é¡ºåºäØ“(f¨´)åQ?foo/bar/footer.ftl
/foo/footer.ftl/footer.ftl˜q™ç§æ–¹å¼è®²å…è®¸è®¾è®¡è€…将通用的模版放在父文äšg多w‡Œé¢ã€?br />也可以只指定部分路径åQ?lt;#include "*/commons/footer.ftl">

五:(x¨¬)import指ä×o(h¨´)<#import path as hash>
六:(x¨¬)noparse
<#noparse>
...
</#noparse>

七:(x¨¬)compress
<#compress>
...
</#compress>
八:(x¨¬)escapeåQŒnoescape
<#escape identifier as expression>
...
<#noescape>...</#noescape>
...
</#escape>

escape指ä×o(h¨´)body区的ftlçš„interpolations都会(x¨¬)被自动加上escape表达式。但是不ä¼?x¨¬)åª?ji¨£ng)响字½W¦ä¸²å†…çš„interpolations。而且也只ä¼?x¨¬)åª?ji¨£ng)响到body内出现的interpolationsåQŒæ¯”如不ä¼?x¨¬)åª?ji¨£ng)响到includeçš„ftlçš„interpolationsã€?br /><#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}</#escape>
½{‰åŒäºŽï¼š(x¨¬)

First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}

escape指ä×o(h¨´)在解析模版时起作用,而不是运行时起作用ã€?/p>

escape指ä×o(h¨´)˜q˜èƒ½åµŒå¥—使用åQŒå­¾l§æ‰¿çˆ¶çš„escape规则ã€?/p>

<#escape x as x?html>
Customer Name: ${customerName}
Items to ship:
<#escape x as itemCodeToNameMap[x]>
${itemCode1}
${itemCode2}
${itemCode3}
${itemCode4}
</#escape></#escape>
½{‰åŒäºŽï¼š(x¨¬)Customer Name: ${customerName?html}
Items to ship:
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}

ä¹?ji¨¦)ï¼?x¨¬)assign指ä×o(h¨´)
<#assign name=value>or<#assign name1=value1name2=value2... nameN=valueN>or<#assign same as above... in namespacehash>or<#assign name> capture this</#assign>or<#assign name in namespacehash> capture this</#assign>创徏或者替换一个已¾lå­˜åœ¨çš„变量åQŒåªèƒ½ä½œç”¨äºŽ™å¶å±‚变量。不好的做法åQ?lt;#assign x>Hello ${user}!</#assign>更改为:(x¨¬)<#assign x="Hello ${user}!">
十:(x¨¬)global指ä×o(h¨´)
<#global name=value>
or
<#global name1=value1name2=value2... nameN=valueN>or<#global name>
capture this
</#global>
十一åQšlocal指ä×o(h¨´)
<#local name=value>
or
<#local name1=value1name2=value2... nameN=valueN>or<#local name>
capture this
</#local>只能用于macro的定义body中�/p>


十二åQšsetting指ä×o(h¨´)åQ?/p>

<#setting name=value>
nameçš„å–å€ÆDŒƒå›ß_(d¨¢)¼š(x¨¬)
localåQšnumber_formatåQ?br />boolean_format:¾~ºçœå€égØ“(f¨´)"true,false"
date_format, time_format, datetime_format
time_zoneåQšurl_escaping_charset
classic_compatible

十三åQšç”¨æˆ¯‚‡ªå®šä¹‰æŒ‡ä×o(h¨´)
<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...> ...</@macro_or_transf><@macro_or_transf...> ...</@><@macro_or_transfval1, val2, ..., valN/>
十四åQšmacro,nested,return
<#macro nameparam1param2... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>

十五åQšfunction, return
<#function nameparam1param2... paramN>
... <#return returnValue>
...
</#function>

<#function avg x y>
<#return (x + y) / 2>
</#function>
${avg(10, 20)}

十六åQšflush
<#flush>

十七åQšstop
<#stop>
or
<#stop reason>取消处理模版�/p>

十八åQšftl指ä×o(h¨´)
<#ftl param1=value1param2=value2...paramN=valueN>
ftl指ä×o(h¨´)必须攑֜¨ftlæ–‡äšg的最上面ã€?/p>

参数范围åQ?br />encodingåQ?br />strip_whitespace
strip_text
strict_syntax

十九(ji¨¦)åQšt, lt, rt
二十åQšattempt, recover
<#attempt>
attempt block<#recover>
recover block
</#attempt>

<#attempt>
Optional content: ${thisMayFails}
<#recover>
Ops! The optional content is not available.
</#attempt>



]]>
解决png在ie6中透明的效æž?/title><link>http://www.aygfsteel.com/stone840/archive/2012/11/15/391359.html</link><dc:creator>老天</dc:creator><author>老天</author><pubDate>Thu, 15 Nov 2012 02:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/stone840/archive/2012/11/15/391359.html</guid><wfw:comment>http://www.aygfsteel.com/stone840/comments/391359.html</wfw:comment><comments>http://www.aygfsteel.com/stone840/archive/2012/11/15/391359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stone840/comments/commentRss/391359.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stone840/services/trackbacks/391359.html</trackback:ping><description><![CDATA[<span>  <p><font color="#666666"><!-- <a ><font color="#333333" size="2">http://www.iefans.net/ie8-filteralpha-png-touming/</font></a>  </font></p> <p>IE8里可以这样写 -ms-filter:”progid:DXImageTransform.Microsoft.Alpha(opacity=50)”;</p> <p>IE7里可以这样写 filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);</p> <p><a ><font color="#333333" size="2">IE6</font></a>,IE7,IE8里都可以˜q™æ ·å†™ã€€filter:alpha(opacity=50)</p> <p>--></p> <p><font color="#666666"></font> </p> <p><font color="#666666"></font> </p> <p><font color="#666666"></font> </p> <p><font color="#666666"></font> </p> <p><font color="#666666">from:http://unc0pyrightable.blog.163.com/blog/static/1313300602010021526561/</font></p> <p><font color="#666666">今天推荐一个最完美让ie6支持png透明的js,ä¸ÞZ»€ä¹ˆè¯´å®ƒæœ€å®Œç¾Žå‘¢ï¼Ÿ</font></p> <p><font color="#666666">只因为它<strong>支持background-positionå’Œbackground-repeat</strong></font></p> <p><font color="#666666" size="+0">˜q™æ˜¯å¸‚面上的其它æ–ÒŽ(gu¨©)³•比不上的</font></p> <p><font color="#666666" size="+0">首先,要在¾|‘页中引用js</font></p> <p><font color="#666666"><!--[if IE 6]><br /><script src="<font size="+0">http://www.dillerdesign.com/experiment/DD_belatedPNG/DD_belatedPNG_0.0.8a-min.js</font>"></script><br /><script><br />DD_belatedPNG.fix('<strong>.png_bg</strong>');<br /></script><br /><![endif]--></font></p> <p><font color="#666666">上面那个js路径是绝对èµ\å¾?大家最好还是把它下下来,以防¾|‘站挂了.</font></p> <p><font color="#666666">引用之后ž®±æ˜¯æ›´æ”¹½W¬äºŒä¸?lt;script>里的.pngä¸ÞZ½ è¦å®žçŽ°æ•ˆæžœçš„é€‰æ‹©å™?</font></p> <p><font color="#666666">ž®±æ¯”å¦?ä½?header引用了一个background,那你上面ž®Þp¦æ”¹äØ“(f¨´):</font></p> <p><font color="#666666">DD_belatedPNG.fix('<strong>#header</strong>');</font></p> <p><font color="#666666">òq¶ä¸”它还支持¾l„选择å™?å¦?</font></p> <p><font color="#666666">DD_belatedPNG.fix('<strong>#header,h1,h2,h3,#content</strong>');</font></p> <p><font color="#666666">很简单吧,只要把有透明png的标½{¾æˆ–选择器写在里面就è¡?/font></p> <p><font color="#666666">至于˜q™é‡Œé¢èƒ½ä¸èƒ½æ”¯æŒcss3ž®×ƒ¸å¾—而知äº?</font></p> <p><font color="#666666">官网:</font><a target="_blank"><em><font color="#666666" size="2">http://www.dillerdesign.com/experiment/DD_belatedPNG/</font></em></a></p> <p><font size="2"></font></p> <p><font size="2"></font></p> <p>˜q™ä¸ªJS内容åQ?font color="#666666" size="3">DD_belatedPNG_0.0.8a-min.js</font>åQ‰ï¼Œå¤‡å­˜åQ?/p> <p>/**<br />* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.<br />* Author: Drew Diller<br />* Email: <a href="mailto:drew.diller@gmail.com"><font color="#333333" size="2">drew.diller@gmail.com</font></a><br />* URL: <a ><font color="#333333" size="2">http://www.dillerdesign.com/experiment/DD_belatedPNG/</font></a><br />* Version: 0.0.8a<br />* Licensed under the MIT License: <a ><font color="#333333" size="2">http://dillerdesign.com/experiment/DD_belatedPNG/#license</font></a><br />*<br />* Example usage:<br />* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector<br />* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement<br />**/<br />var DD_belatedPNG={<br />ns:"DD_belatedPNG",imgSize:{<br />},delay:10,nodesFixed:0,createVmlNameSpace:function () {<br />   if(document.namespaces&&!document.namespaces[this.ns]) {<br />    document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")<br />   }<br />},createVmlStyleSheet:function () {<br />   var b,a;<br />   b=document.createElement("style");<br />   b.setAttribute("media","screen");<br />   document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);<br />   if(b.styleSheet) {<br />    b=b.styleSheet;<br />    b.addRule(this.ns+"<a><u><font color="#333333" size="2">\\:*","{behavior:url(#default#VML</font></u></a>)}");<br />    b.addRule(this.ns+"<a><u><font color="#333333" size="2">\\:shape","position:absolute</font></u></a>;");<br />    b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");<br />    this.screenStyleSheet=b;<br />    a=document.createElement("style");<br />    a.setAttribute("media","print");<br />    document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);<br />    a=a.styleSheet;<br />    a.addRule(this.ns+"<a><u><font color="#333333" size="2">\\:*","{display</font></u></a>: none !important;}");<br />    a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")<br />   }<br />},readPropertyChange:function () {<br />   var b,c,a;<br />   b=event.srcElement;<br />   if(!b.vmlInitiated) {<br />    return<br />   }if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1) {<br />    DD_belatedPNG.applyVML(b)<br />   }if(event.propertyName=="style.display") {<br />    c=(b.currentStyle.display=="none")?"none":"block";<br />    for(a in b.vml) {<br />     if(b.vml.hasOwnProperty (a)) {<br />      b.vml[a].shape.style.display=c<br />     }<br />    }<br />   }if(event.propertyName.search("filter")!=-1) {<br />    DD_belatedPNG.vmlOpacity(b)<br />   }<br />},vmlOpacity:function (b) {<br />   if(b.currentStyle.filter.search("lpha")!=-1) {<br />    var a=b.currentStyle.filter;<br />    a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;<br />    b.vml.color.shape.style.filter=b.currentStyle.filter;<br />    b.vml.image.fill.opacity=a<br />   }<br />},handlePseudoHover:function (a) {<br />   setTimeout(function () {<br />    DD_belatedPNG.applyVML(a)<br />   },1)<br />},fix:function (a) {<br />   if(this.screenStyleSheet) {<br />    var c,b;<br />    c=a.split(",");<br />    for(b=0;b<c.length;b++) {<br />     this.screenStyleSheet.addRule(c[b],"behavior:expression(DD_belatedPNG.fixPng(this))")<br />    }<br />   }<br />},applyVML:function (a) {<br />   a.runtimeStyle.cssText="";<br />   this.vmlFill(a);<br />   this.vmlOffsets(a);<br />   this.vmlOpacity(a);<br />   if(a.isImg) {<br />    this.copyImageBorders(a)<br />   }<br />},attachHandlers:function (i) {<br />   var d,c,g,e,b,f;<br />   d=this;<br />   c={<br />    resize:"vmlOffsets",move:"vmlOffsets"<br />   };<br />   if(i.nodeName=="A") {<br />    e={<br />     mouseleave:"handlePseudoHover",mouseenter:"handlePseudoHover",focus:"handlePseudoHover",blur:"handlePseudoHover"<br />    };<br />    for(b in e) {<br />     if(e.hasOwnProperty (b)) {<br />      c[b]=e[b]<br />     }<br />    }<br />   }for(f in c) {<br />    if(c.hasOwnProperty (f)) {<br />     g=function () {<br />      d[c[f]](i)<br />     };<br />     i.attachEvent("on"+f,g)<br />    }<br />   }i.attachEvent("onpropertychange",this.readPropertyChange)<br />},giveLayout:function (a) {<br />   a.style.zoom=1;<br />   if(a.currentStyle.position=="static") {<br />    a.style.position="relative"<br />   }<br />},copyImageBorders:function (b) {<br />   var c,a;<br />   c={<br />    borderStyle:true,borderWidth:true,borderColor:true<br />   };<br />   for(a in c) {<br />    if(c.hasOwnProperty (a)) {<br />     b.vml.color.shape.style[a]=b.currentStyle[a]<br />    }<br />   }<br />},vmlFill:function (e) {<br />   if(!e.currentStyle) {<br />    return<br />   }else {<br />    var d,f,g,b,a,c;<br />    d=e.currentStyle<br />   }for(b in e.vml) {<br />    if(e.vml.hasOwnProperty (b)) {<br />     e.vml[b].shape.style.zIndex=d.zIndex<br />    }<br />   }e.runtimeStyle.backgroundColor="";<br />   e.runtimeStyle.backgroundImage="";<br />   f=true;<br />   if(d.backgroundImage!="none"||e.isImg) {<br />    if(!e.isImg) {<br />     e.vmlBg=d.backgroundImage;<br />     e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf('")')-5)<br />    }else {<br />     e.vmlBg=e.src<br />    }g=this;<br />    if(!g.imgSize[e.vmlBg]) {<br />     a=document.createElement("img");<br />     g.imgSize[e.vmlBg]=a;<br />     a.className=g.ns+"_sizeFinder";<br />     a.runtimeStyle.cssText="behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;";<br />     c=function () {<br />      this.width=this.offsetWidth;<br />      this.height=this.offsetHeight;<br />      g.vmlOffsets(e)<br />     };<br />     a.attachEvent("onload",c);<br />     a.src=e.vmlBg;<br />     a.removeAttribute("width");<br />     a.removeAttribute("height");<br />     document.body.insertBefore(a,document.body.firstChild)<br />    }e.vml.image.fill.src=e.vmlBg;<br />    f=false<br />   }e.vml.image.fill.on=!f;<br />   e.vml.image.fill.color="none";<br />   e.vml.color.shape.style.backgroundColor=d.backgroundColor;<br />   e.runtimeStyle.backgroundImage="none";<br />   e.runtimeStyle.backgroundColor="transparent"<br />},vmlOffsets:function (d) {<br />   var h,n,a,e,g,m,f,l,j,i,k;<br />   h=d.currentStyle;<br />   n={<br />    W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop<br />   };<br />   a=(n.L+n.bLW==1)?1:0;<br />   e=function (b,p,q,c,s,u) {<br />    b.coordsize=c+","+s;<br />    b.coordorigin=u+","+u;<br />    b.path="m0,0l"+c+",0l"+c+","+s+"l0,"+s+" xe";<br />    b.style.width=c+"px";<br />    b.style.height=s+"px";<br />    b.style.left=p+"px";<br />    b.style.top=q+"px"<br />   };<br />   e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);<br />   e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);<br />   g={<br />    X:0,Y:0<br />   };<br />   if(d.isImg) {<br />    g.X=parseInt(h.paddingLeft,10)+1;<br />    g.Y=parseInt(h.paddingTop,10)+1<br />   }else {<br />    for(j in g) {<br />     if(g.hasOwnProperty (j)) {<br />      this.figurePercentage(g,n,j,h["backgroundPosition"+j])<br />     }<br />    }<br />   }d.vml.image.fill.position=(g.X/n.W)+","+(g.Y/n.H);<br />   m=h.backgroundRepeat;<br />   f={<br />    T:1,R:n.W+a,B:n.H,L:1+a<br />   };<br />   l={<br />    X:{<br />     b1:"L",b2:"R",d:"W"<br />    },Y:{<br />     b1:"T",b2:"B",d:"H"<br />    }<br />   };<br />   if(m!="repeat"||d.isImg) {<br />    i={<br />     T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)<br />    };<br />    if(m.search("repeat-")!=-1) {<br />     k=m.split("repeat-")[1].toUpperCase();<br />     i[l[k].b1]=1;<br />     i[l[k].b2]=n[l[k].d]<br />    }if(i.B>n.H) {<br />     i.B=n.H<br />    }d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"<br />   }else {<br />    d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"<br />   }<br />},figurePercentage:function (d,c,f,a) {<br />   var b,e;<br />   e=true;<br />   b=(f=="X");<br />   switch(a) {<br />    case "left":case "top":d[f]=0;<br />    break;<br />    case "center":d[f]=0.5;<br />    break;<br />    case "right":case "bottom":d[f]=1;<br />    break;<br />    default:if(a.search("%")!=-1) {<br />     d[f]=parseInt(a,10)/100<br />    }else {<br />     e=false<br />    }<br />   }d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));<br />   if(d[f]%2===0) {<br />    d[f]++<br />   }return d[f]<br />},fixPng:function (c) {<br />   c.style.behavior="none";<br />   var g,b,f,a,d;<br />   if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR") {<br />    return<br />   }c.isImg=false;<br />   if(c.nodeName=="IMG") {<br />    if(c.src.toLowerCase().search(/\.png$/)!=-1) {<br />     c.isImg=true;<br />     c.style.visibility="hidden"<br />    }else {<br />     return<br />    }<br />   }else {<br />    if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1) {<br />     return<br />    }<br />   }g=DD_belatedPNG;<br />   c.vml={<br />    color:{<br />    },image:{<br />    }<br />   };<br />   b={<br />    shape:{<br />    },fill:{<br />    }<br />   };<br />   for(a in c.vml) {<br />    if(c.vml.hasOwnProperty (a)) {<br />     for(d in b) {<br />      if(b.hasOwnProperty (d)) {<br />       f=g.ns+":"+d;<br />       c.vml[a][d]=document.createElement(f)<br />      }<br />     }c.vml[a].shape.stroked=false;<br />     c.vml[a].shape.appendChild(c.vml[a].fill);<br />     c.parentNode.insertBefore(c.vml[a].shape,c)<br />    }<br />   }c.vml.image.shape.fillcolor="none";<br />   c.vml.image.fill.type="tile";<br />   c.vml.color.fill.on=false;<br />   g.attachHandlers(c);<br />   g.giveLayout(c);<br />   g.giveLayout(c.offsetParent);<br />   c.vmlInitiated=true;<br />   g.applyVML(c)<br />}<br />};<br />try{<br />document.execCommand("BackgroundImageCache",false,true)<br />}catch(r) {<br />}DD_belatedPNG.createVmlNameSpace();<br />DD_belatedPNG.createVmlStyleSheet();</p> <p> </p> <p> </p> <p> </p> <p>或者:(x¨¬)</p> <p><font style="font-size: 12px" color="#ff0000">让IE6支持PNG格式的图ç‰?/font></p> <p><font color="#ff0000"><font style="font-size: 12px"><strong>用法åQ?br /><br /></strong></font>先复制下面的代码在记事本中,然后另存为pngbehavior.htcåQˆåå­—可以ä“Q意)åQ?br /><br /><public:componentlightWeight="true"><br /><public:attach event="onpropertychange"onevent="propertyChanged()" /><br /><public:attach event="onbeforeprint"onevent="beforePrint()" for="window"/><br /><public:attach event="onafterprint"onevent="afterPrint()" for="window"/><br /><script><br /><br /><br /><br />var supported = /MSIE ((5\.5)|[6789])/.test(navigator.userAgent)&&<br />navigator.platform== "Win32";<br /><br />var realSrc;<br />var blankSrc = "blank.gif";<br />var isPrinting = false;<br /><br />if (supported) fixImage();<br /><br />function propertyChanged() {<br />if (!supported || isPrinting) return;<br /><br />var pName = event.propertyName;<br />if (pName != "src") return;<br />// if not set to blank<br />if (!new RegExp(blankSrc).test(src))<br />fixImage();<br />};<br /><br />function fixImage() {<br />// get src<br />var src = element.src;<br /><br />// check for real change<br />if (src == realSrc&& /\.png$/i.test(src)) {<br />element.src =blankSrc;<br />return;<br />}<br /><br />if ( ! new RegExp(blankSrc).test(src)) {<br />// backup old src<br />realSrc = src;<br />}<br /><br />// test for png<br />if (/\.png$/i.test(realSrc)) {<br />// set blank image<br />element.src =blankSrc;<br />// set filter<br />element.runtimeStyle.filter= "progid:DXImageTransform.Microsoft." +<br />"AlphaImageLoader(src='"+ src + "',sizingMethod='scale')";<br />}<br />else {<br />// remove filter<br />element.runtimeStyle.filter= "";<br />}<br />}<br /><br />function beforePrint() {<br />isPrinting = true;<br />element.src = realSrc;<br />element.runtimeStyle.filter = "";<br />realSrc = null;<br />}<br /><br />function afterPrint() {<br />isPrinting = false;<br />fixImage();<br />}<br /><br /></script><br /></public:component><br /><br /><br />最后在你的cssæ–‡äšg里面加上˜q™ä¹ˆä¸€ŒDµä»£ç ï¼š(x¨¬)</font></p><pre><span style="font-size: large"><span style="font-size: medium"><font style="font-size: 12px" color="#ff0000" size="3">img {<br />behavior: url("pngbehavior.htc");<br />}<br /></font></span></span></pre></span><img src ="http://www.aygfsteel.com/stone840/aggbug/391359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stone840/" target="_blank">老天</a> 2012-11-15 10:26 <a href="http://www.aygfsteel.com/stone840/archive/2012/11/15/391359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ÁÙÏæÊÐ</a>| <a href="http://" target="_blank">ͳ·¬ÊÐ</a>| <a href="http://" target="_blank">¶ëüɽÊÐ</a>| <a href="http://" target="_blank">À³ÎßÊÐ</a>| <a href="http://" target="_blank">ÁÙ·ÚÊÐ</a>| <a href="http://" target="_blank">Ô£ÃñÏØ</a>| <a href="http://" target="_blank">ÑÓ±ß</a>| <a href="http://" target="_blank">·áË³ÏØ</a>| <a href="http://" target="_blank">´óÒØÏØ</a>| <a href="http://" target="_blank">ÀóÆÖÏØ</a>| <a href="http://" target="_blank">³à³ÇÏØ</a>| <a href="http://" target="_blank">Ö麣ÊÐ</a>| <a href="http://" target="_blank">ÄÚÇðÏØ</a>| <a href="http://" target="_blank">¹ðƽÊÐ</a>| <a href="http://" target="_blank">лͨÃÅÏØ</a>| <a href="http://" target="_blank">±£Í¤</a>| <a href="http://" target="_blank">ÑÓ±ß</a>| <a href="http://" target="_blank">²ý¶¼ÏØ</a>| <a href="http://" target="_blank">¸·¿µÊÐ</a>| <a href="http://" target="_blank">ʦ×ÚÏØ</a>| <a href="http://" target="_blank">»³ÈÊÏØ</a>| <a href="http://" target="_blank">ÄϽ§</a>| <a href="http://" target="_blank">¿µÂíÏØ</a>| <a href="http://" target="_blank">ÍòÊ¢Çø</a>| <a href="http://" target="_blank">Íû¿üÏØ</a>| <a href="http://" target="_blank">ÁÙ·ÚÊÐ</a>| <a href="http://" target="_blank">ƽ¹ÈÇø</a>| <a href="http://" target="_blank">ÄÏͶÊÐ</a>| <a href="http://" target="_blank">°²ÈûÏØ</a>| <a href="http://" target="_blank">³¤Ë³ÏØ</a>| <a href="http://" target="_blank">¬ÊÏÏØ</a>| <a href="http://" target="_blank">ÀöË®ÊÐ</a>| <a href="http://" target="_blank">ÌåÓý</a>| <a href="http://" target="_blank">Ö£ÖÝÊÐ</a>| <a href="http://" target="_blank">Ëà±±</a>| <a href="http://" target="_blank">ͨºÓÏØ</a>| <a href="http://" target="_blank">ä¯ÑôÊÐ</a>| <a href="http://" target="_blank">ӥ̶ÊÐ</a>| <a href="http://" target="_blank">ÖÛÇúÏØ</a>| <a href="http://" target="_blank">±¨¼Û</a>| <a href="http://" target="_blank">ÎýÁÖ¹ùÀÕÃË</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>