锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Ctrl+Shift+/ 鍔犱笂孌墊敞閲?**/ Ctrl+Shift+\ 鍙栨秷孌墊敞閲?**/ Ctrl+/ 鍔犱笂琛屾敞閲婃垨鍙栨秷琛屾敞閲?/p>
鑷姩姹囧叆鎵闇瑕佺殑綾誨埆錛欳trl+Shift+O 鍙栨秷鑷姩validation錛?br />
鍙栨秷鏂規硶錛?nbsp;windows-->perferences-->myeclipse-->validation 鎸塶ew Remote Site,Name濉?svn , URL濉?a >http://subclipse.tigris.org/update,涓鐩磏ext鍒癴inished涓烘 4.JTest 閲嶉噺綰х殑鍟嗕笟宸ュ叿 浣跨敤鎰熻: 瀹夎涓婃彃浠跺悗,瀵硅嚜宸辯殑欏圭洰榪涜媯鏌?鍙戠幇璀﹀憡澶浜?鏈夌偣鍙戣挋鐨勬劅瑙?涓嶈繃鎶婅鍛婄湅涓閬?瑙夊緱閮藉緢鏈夐亾鐞?鏈変簺涔熺‘瀹炴槸涓浜涢敊璇? 浠g爜鏌ラ敊鎺ㄨ崘浣跨敤Findbugs鍜孭MD,浠g爜涔﹀啓瑙勮寖鎺ㄨ崘浣跨敤CheckStyle榪涜媯鏌?榪欐牱涓嶄粎鑳芥煡鍑轟竴浜涘熀鏈殑閿欒,涔熻兘鎻愰珮欏圭洰鐨勪唬鐮佽川閲?瀵規彁楂樿嚜宸辯殑浠g爜姘村鉤涔熸槸闈炲父濂? 鎺ㄨ崘欏圭洰緇勫緩绔嬬粺涓鐨勮鍒?浠g爜澶嶆煡鐨勬椂鍊欏氨浣跨敤榪欎簺宸ュ叿,鐪佹椂鐪佸姏. 瀹炰箖灞呭鏃呰,鏉浜鴻秺璐у繀澶囦箣宸ュ叿涔?(鍥犱負鑲畾鏈変漢瑕侀獋浣?鍛靛懙,涔熸槸浣犳壘"宸?鐨勫伐鍏? 棣栧厛,鍩轟簬涓涓畝鍗曠殑鏂伴椈緋葷粺,瑕佹兂鍋氬叏鏂囨绱?鏂伴椈緋葷粺鐨勭鐞嗙瓑鍦ㄨ繖閲屼笉鍦ㄥ叿浣撴彁鍑?涓嬮潰鍒楀嚭鏂伴椈瀵硅薄鐨勭被:
蹇熸墽琛岀▼搴忥細Ctrl + F11絎竴嬈℃墽琛屾椂錛屽畠浼氳闂偍鎵ц妯″紡錛岃緗ソ鍚庯紝浠ュ悗鍙鎸夎繖涓儹閿紝瀹冨氨浼氬揩閫熸墽琛屻?/p>
闄ゅ紑Manual涓嬮潰鐨勫閫夋鍏ㄩ儴閫変腑涔嬪錛屽叾浠栧叏閮ㄤ笉閫?nbsp;
鎵嬪伐楠岃瘉鏂規硶錛?nbsp;
鍦ㄨ楠岃瘉鐨勬枃浠朵笂錛屽崟鍑婚紶鏍囧彸閿?->myeclipse-->run validation
]]>
鐩墠鐗堟湰0.9.1,鏈塮or eclipse鐨勬彃浠? 緗戝潃鏄?a >http://findbugs.sourceforge.net.
宸ヤ綔鍘熺悊:媯鏌ョ▼搴忕敓鎴愮殑class鐨勫伐鍏?
鐣岄潰:鐙珛榪愯鐨勬彁渚涘浘褰㈢晫闈?寰堝弸濂?鏈塨ug鎶ュ憡.
鍙敤鎬?澶у鏁版彁紺烘湁鐢?鍊煎緱鏀?br />
鎻掍歡:
鍙互璁劇疆鍩烘湰鍜屾鏌ョ殑閿欒綾誨埆.
鎻掍歡淇濆瓨璁劇疆鏈夐棶棰?鎴戞槸鍏抽棴欏圭洰鍚庡彴淇敼浜嗛厤緗枃浠?鍦ㄨ鍏ユ墠鎴愬姛鏀逛簡閰嶇疆鐨?
bug涓存椂瑙e喅: 浣跨敤鐙珛鐨刦indbugs璁劇疆瑙勫垯,鐒跺悗鍒癈:\Documents and Settings\XXX\涓嬫壘.Findbugs_prefs,鐒跺悗鏀瑰悕瑕嗙洊eclipse project涓嬬殑.fbprefs (鍏堝叧闂綘鐨刾roject)
閰嶇疆娌℃湁鏌ユ壘鍔熻兘,涓嶈繃緙╁啓鑳借鎴戜滑寰堝揩鎵懼埌鏌愪釜瑙勫垯
2.PMD:涓昏鏄煡閿?/strong>
鐩墠鐗堟湰3.2,鏈塮or eclipse浠ュ強鍏朵粬ide鐨勬彃浠?緗戝潃鏄?a >http://pmd.sourceforge.net
宸ヤ綔鍘熺悊:媯鏌ユ簮鐮?
鍙敤鎬?涓閮ㄥ垎鍊煎緱淇敼,鏈変簺榪囦簬涓ユ牸
鐣岄潰:鐙珛榪愯鐨勬槸鍛戒護琛岀晫闈?鍛戒護姣旇緝綆鍗?
鎻掍歡:鍙互閰嶇疆瑙勫垯,鏈変竴涓嫭绔嬬殑紿楀彛鏄劇ず鎻愮ず,鍒?綰ф彁紺?寰堝弸濂?br />
浣跨敤:寤虹珛鑷繁鐨勮鑼?鐒跺悗鐢ㄤ簬瀹為檯浣跨敤涓?
3.CheckStyle:涓昏鏌ヤ唬鐮佽鑼?/strong>
鐩墠鐗堟湰4.0 beta 5,鏈塮or eclipse鐨勬彃浠?緗戝潃鏄?a >http://checkstyle.sourceforge.net.
宸ヤ綔鍘熺悊:媯鏌ユ簮鐮?瀵筳avadoc,涔﹀啓鏍煎紡絳夎繘琛屾鏌?
瑙勫垯瀹氫箟:榛樿鐨勮鍒欐槸sun鐨勭紪鐮佽鑼?涓嶈繃鎸夌収sun鐨勮鍒欏垯榪囦簬涓ユ牸,鑰屼笖姣忎釜鍏徃涔熸湁鑷繁鐨勮鑼?鍜宻un鐨勪笉鍚?鎵浠ラ渶瑕佽嚜瀹氫箟瑙勮寖.
鐩墠鐗堟湰7.0.7,鏈塮or eclipse鐨勬彃浠?緗戝潃鏄?a >http://www.parasoft.com/
涓嶆帹鑽愪嬌鐢?涓嶈繃鍔熻兘寮哄ぇ,鍙互榪涜浠g爜媯鏌?鍙互鑷姩鐢熸垚鍗曞厓嫻嬭瘯鍜岃繘琛屽崟鍏冩祴璇?(涓嶈繃灝辨槸澶參浜?鑰屼笖鐢熸垚鐨勫崟鍏冩祴璇曟病澶ぇ鐢ㄩ?
褰撶劧PMD鍜孋heckStyle鐨勮鑼冨お涓ユ牸,鏈鍚庤繕鏄厤緗簡涓涓?
閫氳繃鏀規璀﹀憡,鎰熻榪樻槸涓嶉敊,鑷沖皯鍙互璇磋嚜宸辯殑浠g爜鍙互閫氳繃宸ュ叿鐨勬嫻嬩簡.
褰撶劧鍩虹浠g爜鍜岄」鐩唬鐮佽繕鏄笉涓鏍風殑,鍩虹浠g爜寰寰姣旇緝澶嶆潅,鎵浠ュ拰鏅氶」鐩唬鐮佺殑瑙勮寖搴旇鏈夋墍涓嶅悓.鏈変簺瑙勫垯鍙兘鐢ㄥ湪鏅氫唬鐮佷笂,鐢ㄥ湪鍩虹綾諱唬鐮佷笂寰寰娌℃硶澶勭悊.
鍏朵粬
]]>
娉?紼嬪簭鐢ㄤ細鍒頒竴浜涘伐鍏風被,涓嶅湪姝ゅ垪鍑?鐢ㄦ埛鍙互鑷繁瀹炵幇.
package com.jscud.website.newsinfo.bean;
import java.sql.Timestamp;
import com.jscud.util.DateTime;
import com.jscud.util.StringFunc;
import com.jscud.website.newsinfo.NewsConst;
/**
* 涓涓柊闂?
*
* @author scud(椋炰簯灝忎緺) http://www.jscud.com
*
*/
public class NewsItem
{
private int nid; //鏂伴椈緙栧彿
private int cid; //綾誨埆緙栧彿
private String title;//鏍囬
private int showtype; //鍐呭綾誨瀷:鐩墠鏀寔url鍜宧tml
private String content;//鍐呭
private String url;//瀵瑰簲緗戝潃,濡傛灉鍐呭綾誨瀷鏄痷rl鐨勮瘽
private Timestamp addtime; //澧炲姞鏃墮棿
private int click; //鐐瑰嚮鏁?br />
//瀵瑰簲鐨刧et,set鍑芥暟,杈冨涓嶅湪鍒楀嚭,鍙互浣跨敤宸ュ叿鐢熸垚
//......
/**
* 鎸夌収綾誨瀷鏍煎紡鍖?br />
*/
public String getShowContent()
{
String sRes = content;
if(showtype == NewsConst.ShowType_HTML)
{
}
return sRes;
}
public String getTarget()
{
if(showtype == NewsConst.ShowType_URL)
{
return "_blank";
}
else
return "";
}
/**
* 闈欐丠tml鏂囦歡鐨勮礬寰勫強鍏跺悕瀛?br />
*/
public String getHtmlFileName()
{
int nYear = DateTime.getYear_Date(getAddtime());
int nMonth = DateTime.getMonth_Date(getAddtime());
String sGeneFileName =
"/news/" + getCid() + "/" + nYear + "/" + nMonth +"/" + getNid() + ".htm";
return sGeneFileName;
}
/**
* 闈欐丠tml鏂囦歡鐨勮礬寰?br />
*/
public String getHtmlFilePath()
{
int nYear = DateTime.getYear_Date(getAddtime());
int nMonth = DateTime.getMonth_Date(getAddtime());
String sGeneFilePath =
getCid() + "_" + nYear + "_" + nMonth;
return sGeneFilePath;
}
}
鍙互鐪嬪埌,鎴戜滑闇瑕佸鏍囬鍜屽唴瀹硅繘琛屾绱?涓轟簡榪欎釜鐩殑,鎴戜滑棣栧厛闇瑕佹潵鐮旂┒涓涓媗ucene.
鍦↙ucene涓?濡傛灉瑕佽繘琛屽叏鏂囨绱?蹇呴』瑕佸厛寤虹珛绱㈠紩鐒跺悗鎵嶈兘榪涜媯绱?褰撶劧瀹為檯宸ヤ綔涓繕浼氭湁鍒犻櫎绱㈠紩鍜屾洿鏂扮儲寮曠殑宸ヤ綔.
鍦ㄦ涔嬪墠,浠嬬粛涓涓渶鍩烘湰鐨勭被(鎽樻妱鑷?a href="http://www.tkk7.com/cap/archive/2005/07/17/7849.html">http://www.tkk7.com/cap/archive/2005/07/17/7849.html):
Analyzer 鏂囦歡鐨勫垎鏋愬櫒錛堝惉璧鋒潵鍒壄錛岃繕鏄彨Analyzer濂戒簡)鐨勬娊璞★紝榪欎釜綾葷敤鏉ュ鐞嗗垎璇?瀵逛腑鏂囧挨鍏墮噸瑕侊紝杞崲澶у皬鍐?Computer->computer,瀹炵幇鏌ヨ澶у皬鍐欐棤鍏?錛岃漿鎹㈣瘝鏍?computers->computer),娑堥櫎stop words絳?榪樿礋璐f妸鍏朵粬鏍煎紡鏂囨。杞崲涓虹函鏂囨湰絳?
鍦╨ucene涓?涓鑸細浣跨敤StandardAnalyzer鏉ュ垎鏋愬唴瀹?瀹冩敮鎸佷腑鏂囩瓑澶氬瓧鑺傝璦,褰撶劧鍙互鑷繁瀹炵幇鐗規畩鐨勮В鏋愬櫒.StandardAnalyzer鐩墠瀵逛腑鏂囩殑澶勭悊鏄寜鐓у崟瀛楁潵澶勭悊鐨?榪欐槸鏈綆鍗曠殑鍔炴硶,浣嗘槸涔熸湁緙虹偣,浼氱粍鍚堝嚭涓浜涙病鏈夋剰涔夌殑緇撴灉鏉?
棣栧厛鎴戜滑鏉ヤ簡瑙e緩绔嬬儲寮?寤虹珛绱㈠紩鍖呭惈2縐嶆儏鍐?涓縐嶆槸緇欎竴鏉℃柊闂誨緩绔嬬儲寮?鍙﹀鐨勬儏鍐墊槸鍦ㄥ紑濮嬫垨鑰呬竴瀹氱殑鏃墮棿緇欐壒閲忕殑鏂伴椈寤虹珛绱㈠紩,鎵浠ヤ負浜嗛氱敤,鎴戜滑鍐欎竴涓氱敤鐨勫緩绔嬬儲寮曠殑鍑芥暟:
(涓鑸竴綾葷殑绱㈠紩閮芥斁鍦ㄤ竴涓洰褰曚笅,榪欎釜閰嶇疆鍙互鍦ㄥ嚱鏁頒腑瀹氫箟,涔熷彲浠ュ啓鍦ㄩ厤緗枃浠朵腑,閫氳繃鍙傛暟浼犻掔粰鍑芥暟.)
/** * 鐢熸垚绱㈠紩. * * @param doc 鐩爣鏂囨。 * @param indexDir 绱㈠紩鐩綍 */ public static void makeIndex(Document doc, String indexDir) { List aList = new ArrayList(); aList.add(doc); makeIndex(aList, indexDir); } /** * 鐢熸垚绱㈠紩. * * @param doc 鐢熸垚鐨刣ocument. * @param indexDir 绱㈠紩鐩綍 */ public static void makeIndex(List docs, String indexDir) { if (null == docs) { return; } boolean indexExist = indexExist(indexDir); IndexWriter writer = null; //娣誨姞涓鏉℃枃妗?br />
for (int i = 0; i < docs.size(); i++) //绱㈠紩瀹屾垚鍚庣殑澶勭悊 |
鍙互鐪嬪埌,寤虹珛绱㈠紩鐢ㄥ埌綾繪槸IndexWrite,瀹冨彲浠ユ柊寤虹儲寮曟垨鑰呰拷鍔犵儲寮?浣嗘槸闇瑕佽嚜宸卞垽鏂?鍒ゆ柇鏄氳繃IndexReader榪欎釜綾繪潵瀹炵幇鐨?鍑芥暟濡備笅:
/** * 媯鏌ョ儲寮曟槸鍚﹀瓨鍦? * @param indexDir * @return */ public static boolean indexExist(String indexDir) { return IndexReader.indexExists(indexDir); } |
濡傛灉姣忔閮芥槸鏂板緩绱㈠紩鐨勮瘽,浼氭妸鍘熸潵鐨勮褰曞垹闄?鎴戝湪浣跨敤鐨勬椂鍊欎竴寮濮嬪氨娌℃湁娉ㄦ剰鍒?鍚庢潵瑙傚療浜嗕竴涓嬬儲寮曟枃浠?鎵嶅彂鐜拌繖涓棶棰?
榪樺彲浠ョ湅鍒?寤虹珛绱㈠紩鏄粰鐢ㄦ埛鐨凞ocument瀵硅薄寤虹珛绱㈠紩,Document琛ㄧず绱㈠紩涓殑涓鏉℃枃妗h褰?閭d箞鎴戜滑濡備綍寤虹珛涓涓枃妗i偅?浠ユ柊闂葷郴緇熶負渚?浠g爜濡備笅:
/** * 鐢熸垚鏂伴椈鐨凞ocument. * * @param aNews 涓鏉℃柊闂? * * @return lucene鐨勬枃妗e璞?br /> */ public static Document makeNewsSearchDocument(NewsItem aNews) { Document doc = new Document(); doc.add(Field.Keyword("nid", String.valueOf(aNews.getNid()))); doc.add(Field.Text("title", aNews.getTitle())); //瀵笻tml榪涜瑙f瀽,濡傛灉涓嶆槸html,鍒欎笉闇瑕佽В鏋?鎴栬呮牴鎹牸寮忚皟鐢ㄨ嚜宸辯殑瑙f瀽鏂規硶 String content = parseHtmlContent(aNews.getContent()); doc.add(Field.UnStored("content", content)); doc.add(Field.Keyword("addtime", aNews.getAddtime())); //鍙互鍔犲叆鍏朵粬鐨勫唴瀹?渚嬪鏂伴椈鐨勮瘎璁虹瓑 doc.add(Field.UnStored("other", "")); //璁塊棶url String newsUrl = "/srun/news/viewhtml/" + aNews.getHtmlFilePath() + "/" + aNews.getNid() + ".htm"; doc.add(Field.UnIndexed("visiturl", newsUrl)); return doc; } |
閫氳繃涓婇潰鐨勪唬鐮?鎴戜滑鎶婁竴鏉℃柊闂昏漿鎹負lucene鐨凞ocument瀵硅薄,浠庤岃繘琛岀儲寮曞伐浣?鍦ㄤ笂闈㈢殑浠g爜涓?鎴戜滑鍙堝紩鍏ヤ簡lucene涓殑Field(瀛楁)綾?Document鏂囨。灝卞儚鏁版嵁搴撲腑鐨勪竴鏉¤褰?瀹冩湁寰堝瀛楁,姣忎釜瀛楁鏄竴涓狥ield瀵硅薄.
浠庡埆鐨勬枃绔犳憳鎶勪竴孌靛叧浜嶧ield鐨勮鏄?鎽樻妱鑷?a href="http://www.tkk7.com/cap/archive/2005/07/17/7849.html">http://www.tkk7.com/cap/archive/2005/07/17/7849.html):
[quote]
綾誨瀷 Analyzed Indexed Stored 璇存槑
Field.Keyword(String,String/Date) N Y Y 榪欎釜Field鐢ㄦ潵鍌ㄥ瓨浼氱洿鎺ョ敤鏉ユ绱㈢殑姣斿(緙栧彿,濮撳悕,鏃ユ湡絳?
Field.UnIndexed(String,String) N N Y 涓嶄細鐢ㄦ潵媯绱㈢殑淇℃伅,浣嗘槸媯绱㈠悗闇瑕佹樉紺虹殑,姣斿,紜歡搴忓垪鍙?鏂囨。鐨剈rl鍦板潃
Field.UnStored(String,String) Y Y N 澶ф鏂囨湰鍐呭,浼氱敤鏉ユ绱?浣嗘槸媯绱㈠悗涓嶉渶瑕佷粠index涓彇鍐呭,鍙互鏍規嵁url鍘籰oad鐪熷疄鐨勫唴瀹?
Field.Text(String,String) Y Y Y 媯绱?鑾峰彇閮介渶瑕佺殑鍐呭,鐩存帴鏀緄ndex涓?涓嶈繃榪欐牱浼氬澶ndex
Field.Text(String,Reader) Y Y N 濡傛灉鏄竴涓猂eader, lucene鐚滄祴鍐呭姣旇緝澶?浼氶噰鐢║nstored鐨勭瓥鐣?
[/quote]
鎴戜滑鍙互鐪嬪埌鏂伴椈鐨勭紪鍙鋒槸鐩存帴鐢ㄦ潵媯绱㈢殑,鎵浠ユ槸Keyword綾誨瀷鐨勫瓧孌?鏂伴椈鐨勬爣棰樻槸闇瑕佹绱㈠拰鏄劇ず鐢ㄧ殑,鎵浠ユ槸Text綾誨瀷,鑰屾柊闂葷殑鍐呭鍥犱負鏄疕tml鏍煎紡鐨?鎵浠ュ湪緇忚繃瑙f瀽鍣ㄧ殑澶勭悊鐢?浣跨敤鐨刄nStored鐨勬牸寮?鑰屾柊闂葷殑鏃墮棿鏄洿鎺ョ敤鏉ユ绱㈢殑,鎵浠ユ槸KeyWord綾誨瀷.涓轟簡鍦ㄦ柊闂葷儲寮曞悗鐢ㄦ埛鍙互璁塊棶鍒板畬鏁寸殑鏂伴椈欏甸潰,榪樿緗簡涓涓猆nIndexed綾誨瀷鐨勮闂湴鍧瀛楁.
(瀵笻tml榪涜瑙f瀽鐨勫鐞嗙◢鍚庡湪榪涜璁茶В)
涓轟竴鏉℃柊闂誨緩绔嬬儲寮曢渶瑕佷袱涓楠?鑾峰彇Document,浼犵粰makeIndex鍑芥暟,浠g爜濡備笅:
public static void makeNewsInfoIndex(NewsItem aNews) { if (null == aNews) { return; } makeIndex(makeNewsSearchDocument(aNews),indexDir); } |
寤虹珛绱㈠紩鐨勫伐浣滃氨榪涜瀹屼簡,鍙鍦ㄥ鍔犳柊闂誨悗璋冪敤 makeNewsInfoIndex(newsitem); 灝卞彲浠ュ緩绔嬬儲寮曚簡.
濡傛灉闇瑕佸垹闄ゆ柊闂?閭d箞涔熻鍒犻櫎瀵瑰簲鐨勭儲寮?鍒犻櫎绱㈠紩鏄氳繃IndexReader綾繪潵瀹屾垚鐨?
/** * 鍒犻櫎绱㈠紩. * @param aTerm 绱㈠紩鍒犻櫎鏉′歡 * @param indexDir 绱㈠紩鐩綍 */ public static void deleteIndex(Term aTerm, String indexDir) { List aList = new ArrayList(); aList.add(aTerm); deleteIndex(aList, indexDir); } /** IndexReader reader = null; |
鍒犻櫎绱㈠紩闇瑕佷竴涓潯浠?綾諱技鏁版嵁搴撲腑鐨勫瓧孌墊潯浠?渚嬪鍒犻櫎涓鏉℃柊闂葷殑浠g爜濡備笅:
public static void deleteNewsInfoIndex(int nid) { Term aTerm = new Term("nid", String.valueOf(nid)); deleteIndex(aTerm,indexDir); } |
閫氳繃鏂伴椈鐨処D,灝卞彲浠ュ垹闄や竴鏉℃柊闂?
濡傛灉闇瑕佹洿鏂版柊闂?濡備綍鏇存柊绱㈠紩鍝? 鏇存柊绱㈠紩闇瑕佸厛鍒犻櫎绱㈠紩鐒跺悗鏂板緩绱㈠紩2涓楠?鍏跺疄灝辨槸鎶婁笂闈㈢殑浠g爜緇勫悎璧鋒潵,渚嬪鏇存柊涓鏉℃柊闂?
public static void updateNewsInfoIndex(NewsItem aNews) { if (null == aNews) { return; } deleteNewsInfoIndex(aNews.getNid()); makeNewsInfoIndex(aNews); } |
鑷蟲,绱㈠紩鐨勫緩绔嬫洿鏂板拰鍒犻櫎灝卞憡涓孌佃惤浜?鍏朵腑鎵歸噺鏇存柊鏂伴椈鐨勪唬鐮佸涓?
(鎵歸噺鏇存柊搴旇鍦ㄨ闂漢鏁板皯鎴栬呭悗鍙扮▼搴忓湪澶滈棿鎵ц)
public static void makeAllNewsInfoIndex(List newsList) { List terms = new ArrayList(); List docs = new ArrayList(); for (int i = 0; i < newsList.size(); i++) deleteIndex(terms,indexDir); |
緗戝潃鏄? http://htmlparser.sourceforge.net ,褰撳墠鐗堟湰涓?.5.
涓嬭澆涓嬫潵,璇曠敤涓鐣?鎰熻涓嶉敊,瀹屽叏鑳芥弧瓚砽ucene瑙f瀽Html鐨勯渶姹?
榪囧嚑澶╄創鍑簂ucene榪涜鍏ㄦ枃媯绱㈢殑浠g爜.(媯绱㈡湰绔欑殑鏂囩珷絳?.
璇曠敤浠g爜濡備笅,渚涘ぇ瀹跺弬鑰?
package com.jscud.test; import java.io.BufferedReader; import org.htmlparser.Node; import com.jscud.util.LogMan; //涓涓棩蹇楄褰曠被 /** public class ParseHtmlTest public static void main(String[] args) throws Exception String content = readTextFile(aFile, "GBK"); test1(content); test2(content); test3(content); test4(content); test5(aFile); //璁塊棶澶栭儴璧勬簮,鐩稿鎱?br /> test5(" System.out.println("===================================="); } /** //璁劇疆緙栫爜 HtmlPage visitor = new HtmlPage(myParser); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getTitle(); System.out.println(textInPage); /** HtmlPage visitor = new HtmlPage(myParser); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getTitle(); System.out.println(textInPage); /** TextExtractingVisitor visitor = new TextExtractingVisitor(); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getExtractedText(); System.out.println(textInPage); /** myParser = Parser.createParser(content, "GBK"); NodeFilter textFilter = new NodeClassFilter(TextNode.class); //鏆傛椂涓嶅鐞?meta OrFilter lastFilter = new OrFilter(); nodeList = myParser.parse(lastFilter); Node[] nodes = nodeList.toNodeArray(); for (int i = 0; i < nodes.length; i++) String line = ""; line = linknode.getLink(); if (isTrimEmpty(line)) System.out.println(line); /** myParser = Parser.createParser(content, null); nodes = myParser.extractAllNodesThatAre(TextNode.class); //exception could be thrown here for (int i = 0; i < nodes.length; i++) } /** try String dataLine = ""; ins.close(); return sbStr.toString(); /** /** }
|
鎵嬪伐璋冪敤jdbc鐨刢onnection浜嬪姟鏂規硶鍜屼嬌鐢↗TA鎺ュ彛閮藉睘浜庣紪紼嬪紡寮鍙戯紝鍦‥JB涓彨BMT(Bean綆$悊浜嬪姟)銆?br /> JTA鏈閲嶈鐨勬帴鍙e氨鏄疷serTransaction鍜屽畠鐨勫叚涓柟娉?begin錛宑ommit錛宺ollback錛実etStatus錛宻etRollbackonly錛宻etTransactionTimeout銆?br /> 紼嬪簭闇瑕乁serTransaction鏃跺彲浠ヤ粠JNDI棰嗗彇錛屼笉榪嘕NDI鍚嶉殢搴旂敤鏈嶅姟鍣ㄤ笉鍚岃屼笉鍚屻侲JB3閲屽彲浠ョ洿鎺ョ敤涓狜Resource娉ㄥ叆銆?/p>
鍓嶉潰閮芥槸閾哄灚錛岃繖涓墠鏄富鎵撶殑浜嬪姟妯″瀷錛屽EJB鐨凜MT(瀹瑰櫒綆$悊浜嬪姟)鍜孲prin銆?/p>
鍏朵腑EJB2.0錛孲pring1.0鍦ㄩ儴緗叉弿榪扮鍜宎pplicationContext.xml涓畾涔夛紝鑰孍JB3.0鍜孲pring2.0鍒欓噰鐢╝nnotation銆?/p>
榪欓噷JavaEE涓嶴pring鐨勫畾涔夊熀鏈浉鍚岋細
鍙錛孯equired鏄粯璁ょ殑璁劇疆錛孲upports鏄彧璇繪柟娉曠殑鏈浣抽夋嫨銆?/p>
綰у埆瓚婁綆瓚婂畨鍏ㄦ晥鐜囦篃瓚婁綆銆傞殧紱葷駭鍒渶瑕佺浉鍏寵祫婧愭敮鎸侊紝濡傞噸澶嶈鍦∣racle閲屼細闄嶇駭涓篟eadCommited銆係pring閲岄粯璁ょ殑Default綰у埆瀹屽叏鐪嬫暟鎹簮鐨勮劯鑹茶浜嬨?/p>
EJB閲岋紝鎯硆ollback鍙兘sessionContext.setRollbackOnly()錛屾垨鑰呮姏鍑篍JBException銆?EJB3榪樺彲浠nnotation璁劇疆鏌愪簺鑷畾涔塃xception鍙互瑙﹀彂rollback)
鍦⊿pring閲岋紝鍚屾牱鍙細rollback unchecked exception(RuntimeExcption鍙婂瓙綾?錛岃宑hecked exception(Exception鍙婂瓙綾?鏄笉浼歳ollback鐨勶紝闄ら潪浣犵壒鍒0鏄庛?/p>
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW,rollbackFor = {MyException1.class,MyException2.class})
鍥犳鎵鏈夊湪service灞傛柟娉曚腑鐢╰hrows瀹氫箟鐨凟xception錛岄兘蹇呴』鍦ㄤ簨鍔″畾涔変腑榪涜rollback璁懼畾銆?璇峰嬁鍠勫繕)
鎵鏈夊湪service灞傛柟娉曚腑c琚玜tch澶勭悊浜嗙殑寮傚父錛屽張甯屾湜瀹瑰櫒杈呭姪rollback鐨勮瘽錛屽繀欏婚噸鎶涗竴涓瀹氫箟鐨凴untimeException鐨勫瓙綾匯?璇峰嬁鍥炴湜)
Spring涓嶅笇鏈涚紪紼嬪紡浜嬪姟綆$悊銆?br /> Spring涔熶笉甯屾湜浣跨敤EJB CMT--CMT渚濊禆浜嶦JB鑰屾棤娉曠敤浜嶱OJO錛屼緷璧栦簬JTA鍏ㄥ眬浜嬪姟瀵瑰崟鏁版嵁婧愬満鏅犳垚浜嗘氮璐癸紝鑰屼笖rollback鏈哄埗姣旇緝楹葷儲錛堝繀欏諱負EJBException鎴栨墜宸etRollbackOnly())銆?br /> 鍥犳Spring閫氳繃AOP瀹炵幇浜嗗POJO鐨勬暣濂楀鍛婂紡浜嬪姟浣撶郴錛涘jdbc,hibernate,jpa,jms絳塴ocal鏁版嵁婧愬拰JTA瀹炵幇浜嗙粺涓鐨勪簨鍔$鐞嗘満鍒訛紝鑰屼笖鏀寔鏈湴璧勬簮涓嶫TA鍦ㄩ厤緗枃浠剁駭鐨勫垏鎹紝鑰屼笖鏀硅繘浜唕ollback鏈哄埗銆?/p>
1錛変竴涓湰鍦頒簨鍔$鐞嗗櫒錛?/p>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean>
2錛塖pring灝變細鎶婅姹傞兘杞彂鍒板簲鐢ㄦ湇鍔″櫒鐨凧TA瀵硅薄涓婏紙娉ㄦ剰姝ゆ椂鏁版嵁婧愪篃闇瑕佹敼涓虹敤JNDI浠庡簲鐢ㄦ湇鍔″櫒鑾峰彇)銆?/p>
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
3錛夊簲鐢ㄦ湇鍔″櫒涓撴湁鐨勭被鍨嬬殑JTA浜嬪姟綆$悊鍣細
<bean id="myTxManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"/>
鏈濂藉皢hibernate.cfg.xml鏂囦歡瀛樻斁浜庨」鐩殑鏍圭洰褰曚笅銆?br />
4錛夌敓鎴?hbm.xml鏂囦歡銆侳ile->New->Other->Hibernate->Hibernate Mapping File錛屽嚭鐜板涓嬬晫闈細
鍦ㄥ~鍐欏畬Password鍚庯紝鐐瑰嚮Refresh鎸夐挳錛屽氨浼氬湪Tables涓垪鍑烘墍鏈夊彲浠ヨ闂殑鏁版嵁搴撹〃錛岀劧鍚庨変腑瑕佷負鍏剁敓鎴?hbm.xml鏂囦歡鐨勮〃錛岀偣鍑籉inish錛屽嵆浼氱敓鎴愬搴旂殑.hbm.xml鏂囦歡錛屾瘮濡傛垜涓婇潰閫夋嫨鐨勬槸Mobileuser琛紝灝變細鐢熸垚Mobileuser.hbm.xml鏂囦歡銆?br />
錛?錛変粠.hbm.xml鏂囦歡鑷姩鐢熸垚瀹炰綋綾匯?br />
鍦≒ackage Explorer涓変腑Mobileuser.hbm.xml鏂囦歡錛屽彸閿?>Hibernate Synchronizer->Synchronize Files 錛屽嵆鍙敓鎴愬搴旂殑瀹炰綋綾誨拰DAO綾匯傚鏋滀綘浠呬粎鎯寵瀹炰綋綾伙紝閭d箞鍙互鍦≒roject->Properies->Hibernate Synchronizer->Data Access Objects 錛屽皢“I would like to have DAOs created for me”鐨勯挬閫夐」鍘繪帀鍗沖彲銆?br />
錛?錛夊湪hibernate.cfg.xml鏂囦歡涓坊鍔犲搴旂殑mapping resource銆?br />
鍦≒ackage Explorer涓変腑Mobileuser.hbm.xml鏂囦歡錛屽彸閿?>Hibernate Synchronizer->Add Mapping Reference錛屽嵆浼氬湪
hibernate.cfg.xml涓嚜鍔ㄧ敓鎴愬涓嬮厤緗細
錛?錛変慨鏀硅嚜鍔ㄧ敓鎴愮殑hibernate.cfg.xml鏂囦歡銆傞渶瑕佸湪hibernate.cfg.xml鏂囦歡鐨勯閮ㄦ坊鍔狅細
姣旇緝綣佺悙鐨勬槸錛屾瘡嬈¤嚜鍔ㄤ慨鏀筯ibernate.cfg.xml鏂囦歡鍚庯紝閮借閲嶆柊娣誨姞榪欎釜xml鐗囨柇銆?br />
涓囦簨鍏峰錛岀幇鍦ㄥ彲浠ュ啓涓祴璇曟潵媯楠屼竴涓嬩簡錛?/p>
web.xml涓坊鍔犵殑servlet鏄犲皠琛ㄦ槑錛屾墍鏈夊尮閰?#8220;/services/*”鐨剈rl璇鋒眰鍏ㄩ儴浜ょ粰org.codehaus.xfire.transport.http.XFireConfigurableServlet鏉ュ鐞嗐?br />
錛?錛夌紪鍐欓渶瑕佸彂甯冧負WebService鐨凧ava綾伙紝榪欎釜渚嬪瓙涓槸涓涓潪甯哥畝鍗曠殑MathService.java銆?/p>
錛?錛夊湪WebContent\META-INF鐩綍涓嬫柊寤?strong>xfire鏂囦歡澶?/strong>錛岀劧鍚庡湪xfire鐩綍涓嬫坊鍔犱竴涓猉Fire浣跨敤鐨勯厤緗枃浠秙ervices.xml錛岃閰嶇疆鏂囦歡涓殑鍐呭鍙嶆槧浜嗚灝嗗摢浜沯ava綾誨彂甯冧負web鏈嶅姟銆傛湰渚嬩腑鐨剆ervices.xml鍐呭濡備笅錛?br />
錛?錛夊湪IE涓緭鍏?http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl 浼氬緱鍒版紜殑web鏈嶅姟鎻忚堪鏂囨。銆?/p>
錛?0錛夋祴璇曞垰鍙戝竷鐨剋ebService銆傛垜浣跨敤C#鍔ㄦ佽皟鐢╓eb鏈嶅姟錛?/p>
錛堝叧浜嶤#鍔ㄦ佽皟鐢╓eb鏈嶅姟錛岃鍙傝榪欓噷錛?br />
鎵ц鍚庯紝寮瑰嚭瀵硅瘽妗嗭紝鏄劇ず緇撴灉鏄?銆?
CREATE procedure pagination
@str_sql varchar(1000) = '*', -- 鎵ц鐨凷QL 涓嶅惈Order by 鍐呭
@str_orderfield varchar(255)='''', -- 鎺掑簭鐨勫瓧孌靛悕
@page_size int = 10, -- 欏靛ぇ灝?nbsp;
@page_index int = 0, -- 欏電爜
@order_type int, -- 璁劇疆鎺掑簭綾誨瀷, 闈?-1 鍊煎垯闄嶅簭
@total_count int output -- 榪斿洖璁板綍鎬繪暟, 闈?0 鍊煎垯榪斿洖
as
---------------------
-- 鑾峰彇鎸囧畾欏電殑鏁版嵁--
---------------------
declare @strsql varchar(5000) -- 涓昏鍙?br />
declare @strtmp varchar(5000) -- 涓存椂鍙橀噺
declare @strorder varchar(400) -- 鎺掑簭瀛椾覆
declare @cruRow int -- 褰撳墠琛屽彿
--鎵ц鎬繪暟緇熻
exec getRowCount @str_sql,@total_count output
set @strtmp = ' select * from ' +
' (select top ' + convert(varchar(10),@page_size) + ' * from ' +
' (select top ' + convert(varchar(10),(@page_index + 1) * @page_size) +' * from '+ -- N+1欏?br />
' ('+ @str_sql +') Src '
--鎺掑簭鏂瑰悜
if @order_type !=0
begin
set @strsql= @strtmp +
' order by @str_orderfield asc) a ' +
' order by @str_orderfield desc)b' +
' order by @str_orderfield asc'
end
else
begin
set @strsql= @strtmp +
' order by @str_orderfield desc) a ' +
' order by @str_orderfieldasc)b' +
' order by @str_orderfield desc'
end
exec (@strsql)
GO
----------------------------------------------------------------------------
2.鍒嗛〉瀛樺偍榪囩▼鎵ц涓敤鍒扮殑琛屾暟緇熻
create procedure getRowCount
@sql nvarchar(2000),
@count int output
as
begin
--------------------
-- 鑾峰彇鏁版嵁鎬昏鏁?--
--------------------
declare @tmpsql nvarchar(2000)
set @tmpsql='select @count=count(*) from ('+ @sql +') a'
execute sp_executesql @tmpsql,N'@count int output',@count output
end
GO