第一篇:Java技術:漢字轉拼音碼
Java技術:漢字轉拼音碼
public class Test_unicode { /** * @param args */
public static String getPinym(String a){ // 漢字區位碼
int li_SecPosValue[] = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };// 存放國標一級漢字不同讀音的起始區位碼對應讀音
char lc_FirstLetter[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z' };// 二級字庫偏移量 int ioffset = 0;// //存放所有國標二級漢字讀音 java.lang.String ls_SecondSecTable = “CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY” + “[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK” + “[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J” + “[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[” + “[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY” + “[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWY” + “GHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQY” + “AXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDD” + “NLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGX” + “GKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY” + “[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ” + “[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZY” + “LXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJ” + “PCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJ” + “BPMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTG” + “JHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQ” + “JJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZ” + “NYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXX” + “LHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRS” + “KMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHP” + “JTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLY” + “GKDZPZXJYYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQH” + “JGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQF” + “YQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQ” + “JGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPH” + “JSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBSAQTGYLBXMMYGSZLDYDQMJJRGBJ” + “TKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ”;java.lang.String sreturn = “";for(int j = 0;j < a.length();j++){ String stemp = a.substring(j, j + 1);byte[] by = stemp.getBytes();if(by.length == 1){ sreturn = sreturn + stemp;} else { int ia = 96 +(int)by[0];// 區碼 int ib = 96 +(int)by[1];// 位碼 int in = ia * 100 + ib;if(in > 1600 && in < 5590){ for(int i = 0;i < 24;i++){ if(in < li_SecPosValue[i]){ sreturn = sreturn + lc_FirstLetter[i56)* 94 + ib-1;if(ioffset >= 0 && ioffset <= 3007){ sreturn = sreturn + ls_SecondSecTable.substring(ioffset, ioffset + 1);} } } sreturn = sreturn.toLowerCase();} return sreturn;}
public static void main(String[] args){ // TODO Auto-generated method stub 判斷字符串中的漢字 /* * String str = ”中國chinese“;for(int i = 0;i < str.length();i++){ * System.out.println(str.substring(i, i + 1).matches(* ”[一-龥]+“)+ str.substring(i, i + 1));} */ String s = getPinym(”安會鋒");System.out.println(s);} }
第二篇:Java技術路線圖
在技術方面無論我們怎么學習,總感覺需要提升自已不知道自己處于什么水平了。但如果有清晰的指示圖供參考還是非常不錯的,這樣我們清楚的知道我們大概處于那個階段和水平。
Java程序員 高級特性
反射、泛型、注釋符、自動裝箱和拆箱、枚舉類、可變
參數、可變返回類型、增強循環、靜態導入
核心編程
IO、多線程、實體類、集合類、正則表達式、XML和屬性文件
圖形編程
AWT(Java2D/JavaSound/JMF)、Swing、SWT、JFace 網路編程
Applet、Socket/TCP/UDP、NIO、RMI、CORBA Java語法基礎
類、抽象類、接口、最終類、靜態類、匿名類、內部類、異常類、編碼規范 Java開發環境
JDK、JVM、Eclipse、Linux Java核心編程技術
Java,設計而又非常精巧的語言。學習Java,須從Java開發環境開始,到Java語法,再到Java的核心API。
1.Java開發入門:Java開發環境的安裝與使用,包括JDK命令、EclipseIDE、Linux下Java程序的開發和部署等。
2.Java語法基礎:基于JDK和Eclipse環境,進行Java核心功能開發,掌握Java面向對象的語法構成,包括類、抽象類、接口、最終類、靜態類、匿名類、內部類、異常的編寫。
3.Java核心API:基于JDK提供的類庫,掌握三大核心功能:
A。Java核心編程:包括Java編程的兩大核心功能——Java輸入/輸出流和多線程,以及常用的輔助類庫——實體類、集合類、正則表達式、XML和屬性文件。B。Java圖形編程:包括Sun的GUI庫AWT(Java2D、JavaSound、JMF)和Swing,IBM和GUI庫SWT和Jface;C.Java網路編程:Applet組件編程,Socket編程,NIO非阻塞Socket編程、RMI和CORBA分布式開發。
4.Java高級特性:掌握JDK1.4、JDK5.0、JDK6.0中的Java高級特性,包括反射、泛型、注釋,以及java高級特性——自動裝箱和拆箱、枚舉類、可變參數、可變返回類型、增強循環、靜態導入等。JavaEE初級軟件工程師 JSF框架開發技術
配置文件(頁面導航、后臺Bean)、JSF組件庫(JSF EL語言、HTML標簽、事件處理、)、JSF核心庫(格式轉換、輸入驗證、國際化)Javaweb核心開發技術 開發環境(Eclipse、Linux)
三大組件(JSP、JavaBean、Servlet)
擴展技術(EL、JSTL、Taglib)網頁開發技術
HTML、XML、CSS、JavaScript、AJAX 數據庫設計技術
SQL、MySql、Oracle、SQLServer、JDBC Web服務器(Tomcat/Jetty/Resin/JBossWeb)JavaWeb核心技術:
JavaWeb項目開發的全過程可以分解為:
網頁開發+數據庫設計——>JavaWeb項目開發,其中,javaWeb由6項基本技術組成:JSP+JavaBean+Servlet+EL+JSTL+Taglib,而JSF正是將這6種技術進行有機結合的技術框架:
JavaEE中級軟件工程師
四種經典架構SSH1、SSI1、SSH2、SSI2 Struts1表現層框架
入門配置、核心組件、標簽庫、國際化、數據檢驗、數據庫開發、Sitemesh集成、集成Hibernate/iBATIS Struts2表現層框架
入門配置、核心組件、標簽庫、國際化、數據校驗、Sitemesh集成轉換器、攔截器、集成Hibernate/iBATIS Spring業務層框架
入門配置、IoC容器、MVC、標簽庫、國際化、數據校驗、數據庫開發 Hibernate持久層框架
MySQL、Oracle、SQLServer iBATIS持久層框架 MySQL、Oracle、SQLServer Web服務器(Tomcat/Jetty/Resin/JBossWeb)Java高級軟件工程師 javaWeb開源技術與框架
工作流、規則引擎 搜索引擎、緩存引擎、任務調度、身份認證
報表服務、系統測試、集群、負載平衡、故障轉移 JavaWeb分布式開發技術 JTA(Java事物管理)
JAAS(Java驗證和授權服務)JNDI(Java命名和目錄服務)JavaMail(Java郵件服務)JMS(java信息服務)WebService(web服務)JCA(java連接體系)JMS(java管理體系)
應用服務器(JBossAS/WebLogic/WebSphere)JavaEE系統架構師
面向云架構(COA)
COA、SaaS、網格計算、集群計算、分布式計算、云計算
面向資源架構(ROA)ROA、RESI 面向web服務架構(SOA)
WebService、SOA、SCA、ESB、OSGI、EAI Java設計模式
創建式模式:抽象工廠/建造者/工廠方法/原型/單例
構造型模式:適配器/橋接/組合/裝飾/外觀/享元/代理
行為型模式:責任鏈/命令/解釋器/迭代子/中介者/備忘錄/觀察者/狀態/策略/模板方法/訪問者 Java與UML建模
對象圖、用例圖、組件圖、部署圖、序列圖、交互圖、活動圖、正向工程與逆向工程 CTO首席技術官
發展戰略
技術總監
團隊提升
團隊建設
項目管理
產品管理
企業級項目實戰(帶源碼)地址:http://zz563143188.iteye.com/blog/1825168
收集五年的開發資料下載地址: http://pan.baidu.com/share/home?uk=4076915866&view=share
下面的更深入的有興趣可以了解一下,我的目的不是要大家掌握下面的知識,只是希望擴展自己的思維,摘自牛人的技術博客。
/**************************************************牛人必看*****************************************************************/
系統后臺框架:
前端工程師技能:
B2C電子商務基礎系統架構解析 運營B2C日 久,越來越深刻的意識到IT系統對確保規范化業務流轉,支撐消費者端的均一服務有著決定性的作用。于是,一直想好好整理下相關的系統架構,怎奈俗務纏身,一直拖到今日,猛然發現下周娃很可能就要出生,拖無可拖,快馬加筆,居然整出來了。本文的重點是理清系統的邏輯關系,詳細的功能模塊請參見結尾附上的系統 架構圖。
首先,聊下對系統邏輯架構的看法;我個人始終堅持認為,系統的開發與演化,前臺嚴格follow消費者的購買流程,后臺則盯牢訂單流轉,牢牢抓住這兩條主線,才能高屋建瓴的看清B2C的邏輯鏈和數據流,更深刻的規劃功能模塊,從而更有效支撐實際業務的流轉。前臺系統包括:商品展示,內容展示,訂單確認,支付系統,用戶中心四大模塊 一,商品展示
按照Ebay的內部分類,任何將商品以單個或批量的方式展示給消費者的功能均應歸入此系統。因此,該系統至少包括:
A,站內搜索(搜索提示,搜索規則,搜索成功頁,搜索不成功頁,相似推薦)
B,導航(頻道導航,其他導航如銷售排行,廣告位,推薦位,文字鏈,Also buy等)C,商品分類(品牌分類,品類分類,屬性分類如剪裁形式)D,登陸頁(商品列表頁,商品詳細頁,商品活動頁)
這里的訪問邏輯是:A /B/C分流消費者去往相對個性化的頁面,由登陸頁體現商家的核心訴求和價值傳遞,完成call-to-action的第一步。二,內容展示
內容展示較為簡單,對純購物品牌而言包括: A,公告區 B,幫助中心
C,論壇(如需商城與論壇發生交互,則需自行開發,否則可集成discuz做同步登陸即可)大家都知道,就不多說了。三,訂單確認
訂單確認,就是幫助消費者正確提交訂單信息的環節,看似簡單,實則非常復雜,需要對很多信息邏輯判斷和處理,一般由2個部分組成:
A,購物車(購物車浮層,購物車頁面,無注冊購買)
無注冊購買是需要慎用的功能,除非刻意追求用戶的短平快下單,如團購/換購,一般不推薦使用,會造成系統異常復雜,開發量也很大。B,訂單提交(返回購物車,收貨地址&地址薄,支付方式判斷,配送方式,發票,訂單標記,實付金額計算等等)值得一提的是,幾乎大多數的促銷邏輯運算在這個環節完成,充分考慮各種促銷方式之間的互斥與重疊是系統設計的核心,需要充分考慮各種情況,避免出現邏輯漏洞。四,支付系統
與一般的想象不同,支付系統其實并不簡單等于第三方支付工具接入:
A,外部支付系統(支付寶將接口,財付通接口,網銀直聯端口,信用ka分期端口)B,內部支付系統(賬戶余額,積分,禮品卡,優惠券)支付系統的邏輯設計不但需要考慮到各種極端情況的發生(如一張訂單先用禮品卡,再用積分,最后網銀支付),還要預留財務做賬所需的相關字段,并充分考慮訂單取消之后如何回滾各類內部賬戶。五,用戶中心
用戶中心的實質是用戶自助功能的dashboard,一般4個部分組成: A,注冊&登陸(快速注冊,完整注冊,注冊有禮,推薦注冊,密碼找回,主站id登陸,open-id登陸如QQ,新浪微博等)
B,訂單中心(歷史訂單狀態,中間狀態訂單修改,物流追蹤)
C,服務中心(各類自助服務如退款申請,退換貨申請,建議與投訴等)D,信息管理(用戶基本信息管理和賬戶信息管理)用戶中心的價值在于:盡可能引導用戶自行獲取所需的信息并提交所需的服務,在提升服務準確率,及時性的同時降低對人工成本。
后臺系統包括:商品&促銷,CRM,訂單處理,WMS,采購管理,財務管理,報表管理,系統設置,WA系統9大模塊 一,商品&促銷
商品&促銷模塊的核心在于確保消費者下單之前,前臺內容所見即所得 A,商品管理(品類管理,品牌管理,單品管理)B,促銷管理(活動管理和自定義活動模板管理)在上述模塊中,最重要的是2個部分:單品管理中的批量產品生成的自動程序和活動管理中“共享與互斥”管理。前者用于大幅提升上新速度,后者避免促銷活動失控。二,CRM CRM是對B2C核心資源—會員的管理,服務與再營銷系統,包括如下部分: A,會員管理(會員信息的增刪改查和到其他系統的鏈接)B,用戶關懷(條件觸發和人工觸發相關EDM & 短信 & OB)C,定向營銷(會員分組和營銷活動管理)
D,客服管理(內容非常多,集成所有需前臺與后臺交互的功能,詳情還是看圖吧)E,呼叫中心(IVR,坐席管理,統計報表,參數傳遞與窗口嵌入)
值得注意的,EDM和短信通道市面上已經有成熟的外包服務商,一般都會外包;呼叫中心和在線客服自行開發成本太高,特別是呼叫中心系統,業務初期也都是外包的。三,訂單處理
訂單處理是在訂單未正式進入倉儲部門處理之前,對訂單的前置性處理環節。A,訂單錄入(電話訂購,網上下單,外部團購訂單,無金額訂單錄入如禮品單)B,訂單審核(自動審核和人工審核)C,RMA處理(RMA申請單和RMA處理單)
RMA的邏輯也異常復雜,需要在效率和成本之間找平衡,確保在不拖垮倉儲部門的正常出入庫的前提下對消費者端快速有效close工單;對內部則需要控制成本,貨損不能超過預算上限。
四,WMS(Warehouse Management system倉庫管理系統)
WMS的流程很長,功能模塊也很多,大致分為入庫管理,庫存管理,出庫管理和票據管理4個模塊四個模塊,細細道來就是另外一篇文章了,各位可以參考 我這篇文章:庖丁解牛—B2C倉儲內部運作解密(上,中,下)http://blog.sina.com.cn/wangxida0855 五,采購管理
采購管理的核心是有效跟進采購合同/發票的狀態,大貨的采購入庫/退庫,財務結算和在倉庫存查詢和處理。
A,供應商管理(供應商信息管理,合同發票管理)B,采購單管理(PO單管理,負PO單管理)
C,庫存管理(庫存查詢,庫存占用單,庫存變動log)六,財務管理
B2C的財務管理,主要是對供應商,渠道和內部費用支出的成本控制。A,供應商結算 B,渠道結算 C,配送結算 D,內部結算 說實在的,哥對財務這塊也不算很了解,大家將就看看,圖片上有明細。七,報表管理
報表是B2C業務的宏觀表現,理論上說,每個部門的KPI都應該從中找到。A,搜索報表(站內搜索量查詢)
B,銷售報表(多個維度銷量查詢,優惠券使用情況,報表導出)C,財務報表
D,客服報表(客服日報和坐席報表)
前者反映與消費者發生的日常交互(包括正常與異常),后者考核客服的工作績效 E,倉儲物流報表
這幾塊報表,是業務運作的核心,涉及到公司機密,就不能寫的太細了,見諒。八,系統設置
這塊大家都知道是干嘛的,也就不多說了,分成三塊。A,基礎設置(和業務有關的一些字段值)
B,權限設置(不同賬號的操作權限和操作記錄)C,其他設置
九,WA系統(Web Analytcis)
網 站分析系 統,幾乎全是外購,很少有能夠自建的,即使自建,最多做幾個簡單的模塊。用于實戰的,要么是免費的GA(Google Analytics),要么是昂貴的Omniture。這塊的知識,細細說來也是另外一篇文章了,有興趣的同學可以看我這篇科普文章:揭秘—我所知道的網 站分析(上,下)http://blog.sina.com.cn/wangxida0855 最后,上全系統大圖,再感慨一句,B2C系統,真是一個大工程啊。fr http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html
第三篇:java技術架構
Java技術體系圖
Java程序員
高級特性
反射、泛型、注釋符、自動裝箱和拆箱、枚舉類、可變
參數、可變返回類型、增強循環、靜態導入
核心編程
IO、多線程、實體類、集合類、正則表達式、XML和屬性文件
圖形編程
AWT(Java2D/JavaSound/JMF)、Swing、SWT、JFace
網路編程
Applet、Socket/TCP/UDP、NIO、RMI、CORBA
Java語法基礎
類、抽象類、接口、最終類、靜態類、匿名類、內部類、異常類、編碼規范
Java開發環境
JDK、JVM、Eclipse、Linux
Java核心編程技術
Java,設計而又非常精巧的語言。學習Java,須從Java開發環境開始,到Java語法,再到Java的核心API。
1.Java開發入門:Java開發環境的安裝與使用,包括JDK命令、EclipseIDE、Linux下Java程序的開發和部署等。
2.Java語法基礎:基于JDK和Eclipse環境,進行Java核心功能開發,掌握Java面向對象的語法構成,包括類、抽象類、接口、最終類、靜態類、匿名類、內部類、異常的編寫。
3.Java核心API:基于JDK提供的類庫,掌握三大核心功能:
A。Java核心編程:包括Java編程的兩大核心功能——Java輸入/輸出流和多線程,以及常用的輔助類庫——實體類、集合類、正則表達式、XML和屬性文件。
B。Java圖形編程:包括Sun的GUI庫AWT(Java2D、JavaSound、JMF)和Swing,IBM和GUI庫SWT和Jface;
C.Java網路編程:Applet組件編程,Socket編程,NIO非阻塞Socket編程、RMI和CORBA分布式開發。
4.Java高級特性:掌握JDK1.4、JDK5.0、JDK6.0中的Java高級特性,包括反射、泛型、注釋,以及java高級特性——自動裝箱和拆箱、枚舉類、可變參數、可變返回類型、增強循環、靜態導入等。
JavaEE初級軟件工程師
JSF框架開發技術
配置文件(頁面導航、后臺Bean)、JSF組件庫(JSF EL語言、HTML標簽、事件處理、)、JSF核心庫(格式轉換、輸入驗證、國際化)
Javaweb核心開發技術
開發環境(Eclipse、Linux)
三大組件(JSP、JavaBean、Servlet)
擴展技術(EL、JSTL、Taglib)
網頁開發技術
HTML、XML、CSS、JavaScript、AJAX
數據庫設計技術
SQL、MySql、Oracle、SQLServer、JDBC
Web服務器(Tomcat/Jetty/Resin/JBossWeb)
JavaWeb核心技術:
JavaWeb項目開發的全過程可以分解為:
網頁開發+數據庫設計——>JavaWeb項目開發,其中,javaWeb由6項基本技術組成:JSP+JavaBean+Servlet+EL+JSTL+Taglib,而JSF正是將這6種技術進行有機結合的技術框架:
JavaEE中級軟件工程師
四種經典架構SSH1、SSI1、SSH2、SSI2
Struts1表現層框架
入門配置、核心組件、標簽庫、國際化、數據檢驗、數據庫開發、Sitemesh集成、集成Hibernate/iBATIS
Struts2表現層框架
入門配置、核心組件、標簽庫、國際化、數據校驗、Sitemesh集成轉換器、攔截器、集成Hibernate/iBATIS
Spring業務層框架
入門配置、IoC容器、MVC、標簽庫、國際化、數據校驗、數據庫開發
Hibernate持久層框架
MySQL、Oracle、SQLServer iBATIS持久層框架
MySQL、Oracle、SQLServer
Web服務器(Tomcat/Jetty/Resin/JBossWeb)
Java高級軟件工程師
javaWeb開源技術與框架
工作流、規則引擎
搜索引擎、緩存引擎、任務調度、身份認證
報表服務、系統測試、集群、負載平衡、故障轉移
JavaWeb分布式開發技術
JTA(Java事物管理)
JAAS(Java驗證和授權服務)
JNDI(Java命名和目錄服務)
JavaMail(Java郵件服務)
JMS(java信息服務)
WebService(web服務)
JCA(java連接體系)
JMS(java管理體系)
應用服務器(JBossAS/WebLogic/WebSphere)
JavaEE系統架構師
面向云架構(COA)
COA、SaaS、網格計算、集群計算、分布式計算、云計算
面向資源架構(ROA)
ROA、RESI
面向web服務架構(SOA)
WebService、SOA、SCA、ESB、OSGI、EAI
Java設計模式
創建式模式:抽象工廠/建造者/工廠方法/原型/單例
構造型模式:適配器/橋接/組合/裝飾/外觀/享元/代理
行為型模式:責任鏈/命令/解釋器/迭代子/中介者/備忘錄/觀察者/狀態/策略/模板方法/訪問者
Java與UML建模
對象圖、用例圖、組件圖、部署圖、序列圖、交互圖、活動圖、正向工程與逆向工程
CTO首席技術官
發展戰略
技術總監
團隊提升
團隊建設
項目管理
產品管理
第四篇:java開發技術總結
數據庫
oracle-->數據庫管理系統-->SQL、PL/SQL-->Java(JDBC+SQL)DBA,數據庫編程程序員 1.概念導論
1)什么是數據庫
有組織和結構存儲數據。可以存儲 字符、字節、圖形、圖像等類型數據
DB(數據庫):數據集合
DBMS(數據庫管理系統):對數據集合進行管理和操作的軟件
--Oracle
--DB2
--MySQL
--SQLSERVER
JDBC 1.什么是JDBC 全稱Java DataBase Connection,Java數據庫訪問。
JDBC是Java訪問數據庫的一項技術
JDBC是SUN推出的Java訪問數據庫的一套標準。由一系列接口構成。
各個數據庫廠商負責提供JDBC接口API的實現包。
開發者只需要掌握JDBC接口的使用,就可以實現對各種數據庫的操作,不需要了解開發商的實現類。
XML
1、什么是xml(xtendsible markup language可擴 展的標記語言)? 1)定義
基于文本的通用的數據保存格式。
(1)通用的點的坐標
Point類
point對象(x=10,y=20)
a,序列化
b,數據庫表
c,文件
...(2)數據格式
HTML 知識準備
1、分層:表現層:UI界面(DOS界面、桌面類型、web類型)
業務層:
數據層:文件、Oracle數據庫
2、Web類型的應用程序----B/S 類型
打開 Browser,輸入 URL,瀏覽器將請求發送到服務器
服務器得到請求,分析,返回響應
瀏覽器得到響應,解析(翻譯),顯示為頁面
3、web 學習階段
客戶端技術:HTML+CSS+Javascript---Web 基礎
服務器端技術:JSP、PHP、ASP.NET
4、web基礎的課程
HTML:頁面的創建
CSS:頁面的外觀
JavaScript:頁面的動態效果和交互行為--3 一:HTML 概述
1、超文本標記語言:一種編寫頁面的純文本的標記語言,文件以.html或者.htm 為后綴,依靠瀏覽器運行顯示----解釋性的語言
2、標記:一些用 <> 括起來的內容,特殊的顯示
3、主流瀏覽器:IE/Firefox/Chrome/
4、瀏覽器兼容性:符合標準規范,具體問題
CSS 一:CSS 概述
1、CSS:級聯樣式表(層疊樣式表)
2、特征:為頁面定義外觀的語言,實現內容和表現的分離,多個樣式可以合為一個,如果沖突,以優先級為準
二:基礎語法
1、語法:
屬性名稱:值;屬性名稱:值;比如--color:red;
2、如何應用
方式一(內聯方式):<元素 style=“" />---將樣式直接定義在元素的 style 屬性里
方式二(內部樣式表):在頁面的 head 里的 style 里定義樣式
方式三(外部樣式表):定義一個單獨的.css的文件(定義樣式);然后,在頁面的 head 里用 link 引入---推薦方式
3、外部樣式表的優點:實現內容和表現的分離,提高代碼的可重用性和可維護性
---可以準備多套樣式---換皮膚/主題
4、樣式表,如果重復定義
a、樣式不同,取并集
b、相同,按照優先級
內聯 > 內部或者外部
c、相同優先級下,以最后定義的為準
javascript 一:javascript 概述
1、什么是 javascript:一種基于對象和事件驅動的解釋性腳本語言,嵌入到網頁上
2、歷史:js代碼---W3C定義了標準規范的 js 代碼
3、瀏覽器兼容問題:標準代碼,個別情況個別對待
4、怎么寫
方式一:直接寫在事件里,僅限于代碼很少
方式二:寫在 head 的 script 里,僅限于當前頁面重用
方式三:寫在 js 文件里,html 頁面的head 里用 script 引入
5、js的特征53………………………………………………..一種解釋性的腳本語言,適用于為網頁添加動態效果和交互行為
6、錯誤:
二:基礎語法
1、寫法:以 ;結束,大小寫敏感
名
2、標識符:以字母、數字和下劃線還有 $組成,不以數字開頭---不能和系統關鍵字重
3、變量 ***----聲明變量,以 var 開始
var i = 1;var s = ”mary“;var b = true;js是一種弱類型的語言---變量聲明時不需要確定類型,數據類型以賦值為準
4、數據類型
簡單類型:string、number、bool 特殊類型:null、undefined
var i;
alert(i);---undefined 復雜類型:對象
5、(string)字符串類型
var s = ”mary“;var s = 'mary';
特殊字符:使用轉義---轉換為普通字符,解決漢字的問題
”hello'w“ornld” alert(“一”);alert(“u4e00”);[u4e00-u9fa5]
6、number:并不區分整數和小數
var n = 12;var n1 = 12.34;
7、bool:true(1)和 false(0)
8、數據類型之間的轉換
var n = 18;var name = “mary”;隱式轉換(直接)
string + number--
number + bool--
bool + bool--
string + bool--
顯式轉換(調用方法)*** xxx.toString()parseInt(xxx);parseFloat(xxx);--確實能轉,如果不能轉,將返回 NaN
NaN---not a number 判斷
isNaN(“aaa”)--is not a number--返回 bool
9、運算符
算術運算符、比較、邏輯、位。。
特殊一:***
=== 嚴格相等:值和類型
if(a == b)
if(a === b)servlet 1、web開發的背景知識(了解)b/s架構:
特點:
客戶端使用瀏覽器,服務器端使用web服務器,客戶端與服務器端使用標準化的http協議來進行通信。
優點:
與c/s架構相比,有兩個優點:
a,客戶端不需要單獨安裝
b,開發相對簡單(因為c/s架構需要自定義協議,開發相應的 通信模塊,而b/s使用標準化的http協議,瀏覽器與 web服務器都提供了相應的通信模塊)。
2、什么是servlet? sun公司制訂的一種用來擴展web服務器功能的組件規范。
(1)擴展web服務器功能
早期的web服務器(iis,apache ws等等),只能夠處理靜態
資源的請求(即需要事先將html文件寫好并保存到web服務器
相應的文件夾下面),不能夠處理動態資源的請求(即需要進行
計算,然后生成相應的html)。
a,可以使用cgi程序來擴展。
cgi程序可以使用c/c++,perl等語言來開發,但是,程序比較復雜,而且可移值性不好,性能也比較差,現在用得不多。
b,servlet可以擴展這些web服務器的功能。
瀏覽器發送請求給web服務器(apache ws),web服務器
檢查請求是否需要計算,如果需要,web服務器會訪問
servlet容器,servlet容器會調用servlet來進行計算。
(2)組件規范
1)什么是組件?
符合一定規范,實現部分功能,并且需要部署到
相應的容器里面才能運行的軟件模塊。
2)什么是容器?
符合一定規范,為組件提供運行環境及相應服務的 程序。
3、如何開發一個servlet? step1,先寫一個java類,實現Servlet接口或者繼承
HttpServlet類(一般會使用繼承的方式)。
step2,編譯
step3,打包(創建一個具有如下結構的文件夾)
appname(應用名稱)
WEB-INF
classes(放.class文件)
lib(可選,放.jar文件)
web.xml(部署描述文件)step4,部署
將step3創建好的文件夾拷貝到servlet容器指定的 某個文件夾下面(比如,如果容器是tomcat,可以拷貝到
webapps文件夾下面)。
注意:也可以使用jar命令將step3創建好的文件夾
壓縮成一個以“.war”為后綴的文件,然后拷貝。
step5,啟動servlet容器,訪問servlet
http://ip:port/appname/servlet-url
6、servlet是如何運行的? 比如,在瀏覽器地址欄輸入
http://ip:port/web01/hello
step1,瀏覽器依據ip,port建立與servlet容器(容器同時 也是一個簡單的web服務器)之間的連接。
step2,瀏覽器將請求數據打包(按照http協議,該數據包 也稱為請求數據包)。
step3,瀏覽器發送請求數據包給容器。
step4,容器收到請求數據包之后,解析該數據包,并將
解析之后得到的數據封裝到request(請求數據包)對象上,同時,容器 還要創建response對象。
step5,容器要依據請求資源路徑(“/web01/hello”)找到 servlet的配置,然后創建servlet對象。
step6,容器調用servlet對象的service方法。容器會將事先 創建好的request,response作為參數傳遞給service方法。step7,在service方法里面,可以通過request對象獲得
請求參數,并進行相應的處理,處理結果會放到response對象 里面。
step8,容器從response對象中取出處理結果,然后打包(按照http協議,該數據包稱之為響應數據包)。然后將 響應數據包發送給瀏覽器。
step9,瀏覽器收到響應數據包之后,解析處理結果,然后生成 相應的頁面。
http://localhost:8080/web01/hello?uname=jetty ?后是請求參數,其中uname是參數名,jetty是參數值。
JSP
1、什么是jsp(java server page java服務器端頁面技術)? 1)定義
sun公司制訂的一種服務器端動態頁面生成技術規范。
2)理解
a,因為直接使用servlet,雖然也可以生成動態頁面,但是比較繁瑣(需要使用out.println語句),并且維護困難
(如果頁面發生改變,必須修改java代碼),所以,sun 在servlet規范制訂之后,又添加了jsp規范。
b,jsp其實就是一個以“.jsp”為后綴的文本文件,該文件會被容器(比如tomcat)轉換成一個servlet。
2、如何寫一個jsp文件? step1,寫一個以“.jsp”為后綴的文件。step2,在該文件里面,可以添加如下的內容:
1)html(css,javascript)
直接寫即可(不用out.println)
2)java代碼
a, java代碼片斷
<% java代碼;
%>
b, jsp表達式
<%= java表達式 %>
3)指令
a,什么是指令?
告訴容器,在容器將.jsp文件轉換成.java文件時
做一些額外的處理,比如導包。
b,基本語法
<%@指令名稱 屬性名稱=屬性值 %>
c,page指令
import屬性:導包,比如
<%@page import=“java.util.*”%>
<%@page import=“java.util.*,java.text.*”%>
contentType屬性:設置
response.setContentType的內容,比如
<%@page contentType=“text/html;charset=utf-8”%>
pageEncoding屬性:告訴容器jsp文件的編碼。
因為容器需要讀jsp文件的內容(也就是
說,需要解碼,某些容器,如果沒有該
屬性,默認情況下會按照iso-8859-1
去解碼,會產生亂碼問題)。
4)隱含對象
a,什么是隱含對象?
在jsp文件里面可以直接使用的對象,比如
out,request,response。
b,為什么可以直接使用這些隱含對象?
因為容器會自動添加創建這些對象的語句。
3、jsp是如何運行的? step1,容器要將.jsp文件轉換成.java文件(其實就是
一個servlet類)。
a, html(css,javascript)--->
在service方法里,使用out.write輸出。
(out.write方法會將null轉換成“"輸出)
b,<%
%>
----->
在service方法里,照搬。
c, <%=
%>
----->
在service方法里,使用out.print輸出。
step2,容器調用servlet來處理請求。
4、轉發
(1)什么是轉發?
一個web組件(servlet/jsp)將未完成的處理通過
容器交給另外一個web組件繼續完成。
最常見的情況:
一個servlet獲得數據,然后轉發給一個jsp來展現
這些數據。
(2)如何轉發?
step1,綁訂數據到request對象上。
request.setAttribute(String name,Object value);
說明:
name:綁訂名稱
value:綁訂值 step2,獲得轉發器
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
說明:
url : 轉發的目的地 step3,轉發
rd.forward(request,response);request對象的其它和綁訂相關的方法: 依據綁訂名稱找到綁訂值,如果找不到對應的值,返回null。
Object request.getAttribute(String name);
解除綁訂
request.removeAttribute(String name)(3)轉發的特點
a,轉發之后,瀏覽器地址欄的地址不變。
b,轉發的目的地必須是同一個應用內部某個
web組件的地址。
Ajax
1、ajax是什么?(asynchronous javascript and xml 異步的javascript 和xml)
ajax是一種用來改善用戶體驗的技術,其實質是
利用瀏覽器提供的一個特殊的對象(XMLHttpRequest 對象,一般稱之為ajax對象)異步地(當ajax對象向
服務器發請求時,瀏覽器不會銷毀當前頁面,用戶
仍然可以對當前頁面做其它的操作)向服務器發送請求。服務器返回的數據不再是一個完整的新的頁面,而是部分數據,利用這些數據,更新當前頁面。整個
過程,頁面無刷新,不打斷用戶的操作。
2、如何獲得ajax對象?
XMLHttpRequest沒有標準化,要區分瀏覽器。
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
} //非ie瀏覽器
xhr = new XMLHttpRequest();}else{ //ie瀏覽器
xhr = new ActiveXObject('MicroSoft.XMLHttp');} return xhr;
4、編程步驟
step1,獲得ajax對象。
比如:
var xhr = getXhr();
step2,使用ajax對象發請求。
1)發送get請求
xhr.open('get', 'check_username.do?username=tom',true);xhr.onreadystatechange=f1;xhr.send(null);注意:
true:發送異步請求(ajax對象發請求時,瀏覽器不會銷毀當前頁面,用戶仍然可以
做其它操作)。
false:發送同步請求(ajax對象發請求時,瀏覽器不會銷毀當前頁面,瀏覽器會鎖定
當前頁面,用戶不能操作當前頁面)。step3,編寫服務器端的處理代碼,一般不再需要返回
一個完整的頁面,只需要返回部分數據。step4,編寫事件處理函數
function f1(){
if(xhr.readyState == 4){
var txt = xhr.responseText;
更新當前頁面
}
} jQuery
1、jQuery介紹 www.tmdps.cn
(1)特點
利用選擇器查找要操作的節點,并且會將這些節點
封裝成一個jQuery對象。通過調用jQuery對象的屬性
或者方法來實現對底層節點的操作,這樣做的好處有
兩個:一是兼容性更好了,另外,代碼得到簡化。
(2)編程步驟
step1,使用jQuery選擇器查找要操作的節點。
step2,調用jQuery對象的方法或者屬性。
(3)一個簡單例子 first.html(4)jQuery對象與dom對象如何相互轉換?
1)dom對象---> jQuery對象
$(dom對象)
2)jQuery對象---> dom對象
2、選擇器
(1)選擇器是什么?
jQuery借鑒了css選擇器的語法,用來查找要操作的節點。
(2)基本選擇器
selector / s1.html
#id
.class
element
select1,select2..selectn
*(3)層次選擇器
selector / s2.html
select1 select2:查找所有的后代
select1>select2:只查找子節點
select1+select2:下一個兄弟
select1~select2:下面所有兄弟
(4)過濾選擇器
1)基本過濾選擇器
selector / s3.html
:first
:last
:not(select)排除滿足select要求的節點 :even :odd :eq(index):gt(index):lt(index)2)內容過濾選擇器
selector / s4.html :contains(text)匹配包含給定文本的元素
:empty 匹配所有不包含子元素或者文本的空元素
:has(select)匹配含有選擇器所匹配的元素的元素
:parent 匹配含有子元素或者文本的元素 3)可見性過濾選擇器 selector / s5.html :hidden 匹配所有不可見元素,或者type為hidden的元素
:visible 匹配所有的可見元素 4)屬性過濾選擇器 selector / s6.html [attribute] [attribute=value] [attribute!=value] 5)子元素過濾選擇器
selector / s7.html :nth-child(index/even/odd)
注意: 下標從1開始。
6)表單對象屬性過濾選擇器 selector / s8.html
:enabled
:disabled
:checked
:selected(5)表單選擇器
:input :text
:pasword :radio :checkbox :submit :image :reset :button :file :hidden
3、dom 1)查詢
dom / d1.html
找到節點之后,可以讀取或者修改節點的html內容,文本,值,屬性。
a, html()讀取或者修改節點的html內容
b, text()讀取或者修改節點的文本內容
c, val()
讀取或者修改節點的值
d, attr()讀取或者修改節點的屬性
2)創建
dom / d2.html
$(html);3)插入節點
append():作為最后一個孩子添加進來。
prepend():作為第一個孩子添加進來。
after():作為下一個兄弟
before():作為上一個兄弟 4)刪除節點
dom / d3.html remove()remove(selector)empty():清空節點
5)數據與行為分離 dom / d4.html d5.html 即不用修改html文件,通過引入外部的js文件來 為頁面提供動態效果。
$(fn);fn是一個函數的名稱
或者
$(function(){
//當整個頁面加載完畢,會執行這兒的代碼。
});6)復制節點 dom / d6.html clone()clone(true):使復制的節點也具有行為(將事件
處理代碼一塊復制)7)屬性操作
讀取:attr('id');設置: attr('id','d1')或者一次
設置多個 attr({”id“:”d1“,”class“:”s1“});刪除:removeAttr('id')8)樣式操作 dom / d7.html 獲取和設置: attr(”class“,”“)attr(”style“,”“)追加:addClass('')移除:removeClass('')
或者removeClass('s1 s2')
或者removeClass()//會刪除所有樣式
切換樣式:toggleClass,有該樣式,就刪除,沒有,就添加。
是否有某個樣式 hasClass('')讀取css('')設置css('','')或者
css({'':'','':''})//設置多個樣式 9)遍歷節點 dom / d8.html children()/children(select):只考慮子元素,不考慮其它后代元素。
next()/next(select):下一個兄弟
prev()/prev(select):上一個兄弟
siblings()/siblings(select):其它兄弟
find(select):從當前節點向下查找所有的后代
(滿足select要求的)parent():父節點
struts
1、什么是Struts? Struts是基于MVC的輕量級框架,主要處理請求分發的問題,重心在控制層和表現層。
--基于MVC:實現了MVC,滿足MVC的設計思想。
--輕量:侵入性低,是我們業務代碼對框架的依賴程度很小,既很少需要import Struts包。
--框架:基礎的代碼,引入之后可以減少我們的開發工作量,提高開發效率。
2、為什么用Struts? 1)對比Servlet
--Servlet優缺點
優點:直接、效率高
缺點:業務代碼耦合度高,不便于維護
--Struts優缺點
優點:將業務代碼解藕,便于維護
缺點:效率低
--Servlet中的MVC與Struts中的MVC,參考圖理解
2)對比其他框架
--健壯性(4*):穩定程度
--易用性(4*):好學、好用
--擴展性(5*):就軟件未來而言,將來有更復雜的需求時,是否有處理方式。
--侵入性(4*):與依賴性/耦合度成正比
3、Struts發展史
1)Struts1,結構簡單、易用,由Apache推出。
與Servlet/JSP耦合緊密,導致發展受限。
2)WebWork,技術先進,核心是XWork。
3)Struts2,基于XWork,在此基礎上發展形成。
面試題:Struts1和Struts2的區別和聯系?
--Struts2與Struts1差別很大,不能理解為Struts1
的升級版本。
--Struts2以XWork為核心,可以理解為WebWork
的升級版本。
*
4、Struts2使用步驟,HelloWorld--使用版本Struts2.1.8 1)創建web項目
2)導包
3)配置前端控制器(filter)
--在web.xml中配置filter
--控制請求分發的控制器
4)創建struts.xml--放在src根路徑
--名稱必須是struts.xml 5)*創建Action--控制業務流程的控制器 6)*創建JSP 7)*配置struts.xml--體現請求和Action的關系
--體現Action和JSP的關系
*
5、擴展HelloWorld 目標:掌握Action與JSP頁面數據交換的方式。
1)Action如何向頁面發送數據?
--通過EL表達式
2)*Action如何從頁面接收數據?
--注入:調用JavaBean的set方法,為其屬性賦值的行為稱之為注入。
*a、基礎屬性注入
--Action中定義基本類型的屬性,給它set方法
--表單中,文本框的name=”屬性名“
--表單提交時,Struts2會自動將表單的內容,傳遞給Action里的屬性。
--Struts2會自動初始化屬性
--注意:Action跳轉的頁面,EL表達式${屬性名}
*b、域模型注入
--Action中定義JavaBean類型的屬性,給他set方法
--表單中,文本框的name=”對象名.屬性名“
--表單提交時,Struts2會自動將表單的內容,傳遞給Action里定義的對象
--Struts2會自動的初始化對象
--注意:Action跳轉的頁面,EL表達式${對象名.屬性名}
c、模型驅動注入(了解即可)
--需要Action實現接口ModelDriven
*
6、使用Struts2實現NetCTOSS中的資費列表
--準備:分析需求、了解表結構、建表
1)創建web項目
2)導包
3)前端控制器(filter)4)創建struts.xml 5)創建Action
-->filter->struts.xml->Action
-->DAO-->DBUtil,Entity a、Entity b、DBUtil c、DAO d、Action 6)JSP 7)配置struts.xml Hibernate
1、什么是Hibernate 1)Hibernate是數據訪問層的框架,對JDBC進行了
封裝,是針對數據訪問層的面向對象的解決方案。
2)Hibernate允許我們直接訪問對象,然后將訪問
自動轉化為SQL去執行,從而達到間接訪問數據庫
的目的,簡化代碼開發,提升開發效率。
2、為什么使用Hibernate 1)使用JDBC開發出現的問題
--需要在代碼中寫大量的SQL
--需要給大量的?賦值
--需要將結果集轉換為實體對象
--在SQL中可能會寫數據庫特定的函數,移植性差。
2)使用Hibernate可以解決上面的問題
--基本上不需要寫SQL,因為Hibernate可以
自動生成SQL并執行
--可以自動給?賦值
--可以自動將結果集轉換為實體對象
--Hibernate提供通用的API來訪問不同的數據庫,移植性好。
3)補充JDBC與Hibernate的優缺點
a、JDBC優點:
效率高
b、Hibernate缺點:
效率相對于JDBC要低
*
3、Hibernate的設計原理
1)Hibernate是采用了ORM的思想,對JDBC進行的 封裝。
2)ORM:Object Relation Mapping,即對象關系
映射,指的是Java對象和關系數據庫的映射。
--之前使用JDBC開發時,需要知道數據庫表和實體
對象的關系,以及字段和對象屬性的關系,比如
需要知道COST表和Cost對象的關系。那么這種 關系我們之前是手動維護的,比如: cost.setName(rs.getString(”name“));ps.setString(2,cost.getName());--ORM思想是希望將這種關系的維護提煉出來,用一個公共的組件描述,那么在我們訪問數據庫
時,需要使用這種關系時,可以復用基于ORM 思想提煉出來的關系
--正是由于存在這樣通用關系的描述,Hibernate 才可以讓我們直接訪問Java對象,從而通過
關系轉換成SQL自動執行。
--Hibernate中將這種關系定義在XML配置文件中。
4、Hibernate體系結構
1)hibernate.cfg.xml
是Hibernate的主配置文件,用于配置數據庫連接
參數,以及Hibernate框架參數。
2)實體類
是Java類型,用于封裝表中的數據
3)xxx.hbm.xml
是關系映射文件,用于配置表與實體類的關系,以及表中字段與類中屬性的關系。
4)Hibernate底層API
主要是用于解析主配置文件,以及關系映射文件,然后根據關系自動生成SQL并執行。
5、Hibernate常用API 1)Configuration
用于解析主配置文件的2)SessionFactory
用于創建Session的3)Session
是數據庫連接會話,相當于是數據庫連接。
注意:此Session和HttpSession沒有任何關系。
4)Transaction
用于控制事務
5)Query
用于做特殊查詢
*
6、Hibernate使用步驟
1)導包
2)引入主配置文件hibernate.cfg.xml 3)創建實體類Emp 4)*創建關系映射文件Emp.hbm.xml
--該配置文件必須和實體類同名
--該配置文件必須和實體類位于同一個包下
--在主配置文件中引入該關系映射文件
5)使用Hibernate的API,來進行增、刪、改、查
Spring 1.什么是Spring,有什么作用
Spring框架屬于一個解決方案框架 可以對其他技術和框架進行整合 應用。
*好處是:將程序中的各個組件和 框架技術進行解耦,便于日后系統 維護,升級和擴展操作。
在SSH中,會將Action,DAO組件都 交給Spring框架管理,由Spring 框架創建這些對象,建立這些對象 關聯。
*2.Spring都含有哪些功能
--可以創建和管理程序組件對象
(相當于工廠的作用)--提供了IoC機制實現組件對象關系的解耦
--提供了AoP機制實現共通組件低耦合的調用。
(例如事務處理)--提供了對其他技術,例如JDBC,Hibernate,Struts等框架整合API--提供了一個Spring MVC框架實現
*3.Spring基本使用
1)創建和管理程序組件對象
--引入Spring IOC開發包
--在src下添加Spring配置文件
--將Bean組件定義到Spring配置
文件中
--(編碼)實例化Spring容器對象
利用getBean獲取Bean對象實例
*a.控制Bean對象創建模式
在使用時,可以在
scope=”singleton“表示單例模式(默認值)scope=”prototype“表示原型模式,每次調用getBean都返回一個新的 Bean對象。
b.控制Bean對象創建時機
scope=”singleton“時,Bean對象 是在容器實例化時創建。
在
scope=”prototype“時,Bean對象 是在getBean方法時創建。
c.追加初始化和銷毀方法
在
同理destroy-method=”mydestroy“ 在容器銷毀時,也釋放單例的Bean 對象,此時會自動調用mydesctory 方法。(該屬性僅適用于singleton 模式的Bean對象)
2)Spring的核心IoC容器
a.IoC概念
Inversion of Control 控制反轉 或反向控制(控制轉移)
2004 Martin fowler提出的IoC思想.IoC思想:兩個組件之間調用(例如A調用B)原有方式是A負責創建B對象;現在變成了 B對象由第三方框架或容器負責實例化,然后給A對象注入。即A對象獲取B對象的 方式發生了反轉。
IoC技術方案有兩種:依賴注入和依賴查找 Spring采用依賴注入技術實現IoC控制。依賴技術主要以下兩種方式:--set方式注入(推薦)在A中定義setB(B b),接收傳進來的B對象--構造方式注入 在A中定義構造方法 public A(B b){}
DI:Dependency Injection依賴注入
b.IoC使用方法
--編寫Action,定義到Spring配置中
--編寫DAO,定義到Spring配置中
--在Action中定義DAO接口類型變量和
setter方法
--在Action的
配置
ref=”要注入的Bean對象id值">
第五篇:Java反射技術總結
Java反射技術知識點總結
1、反射:
反射是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。
2、Java語言的反射機制主要提供以下功能:
在運行時判斷任意一個對象所屬的類 在運行時構造任意一個類的對象
在運行時判斷任意一個類所具有的成員變量和方法 在運行時調用任意一個類所具有的成員變量和方法 生成動態代理
3、在java.lang.reflect包當中提供了實現反射機制的類:
Class類:代表一個類。
Field類:代表類的成員變量,也稱為類的屬性。Method類:代表類的方法。Constructor類:代表類的構造方法。
Array類:該類提供動態地生成和訪問java數組的方法。
4、Class實例: Class類和其它的類一樣繼承自Object類,Class對象包含了與類相關的信息。
事實上,Class對象就是用來創建類的所有的“普通”對象的。類是程序的一部分,每個類都有一個Class對象。換言之,每當編寫并且編譯了一個新類時,就會產生一個Class對象(恰當地說,該對象被保存在一個同名的.class文件中)。在運行時,當我們想生成這個類的對象時,運行這個程序的java虛擬機(JVM)首先檢查這個類的Class對象是否已經加載。如果尚未加載,JVM就會根據類名查找.class文件,并將其載入。
一旦某個類的Class對象被載入內存,它就被用來創建這個類的所有對象。這些對象都會對應于同一個Class對象。
要想使用反射,首先需要獲得待處理類或對象所對應的Class實例。獲取Class實例的四種方式: 第一種:調用類本身的.class屬性。Class c =String.class;第二種:調用對象的getClass()方法獲取該對象的Class實例。
String str = “abc”;Class c = str.getClass();第三種:使用Class類的靜態方法forName(),用類的全名(包名.類名)來獲取一個Class實例。
Class.forName(“java.lang.String”);
第四種:對于基本數據類型的封裝類,可以采用.TYPE來獲取相對應的基本數據類型的Class實例。
Class intClass = Integer.TYPE
5、Class類的其它方法: Object newInstance()
使用Class對象生成該類的新實例。它調用了缺省(無參數)的類構造方法創建一個新的對象。所以使用newInstance()方法創建的類必須有一個無參數的構造方法。
boolean isInstance()該方法提供了一種動態地調用instanceof運算符的途徑。Class[] getInterfaces()該方法返回Class對象的數組,這些對象代表的是某個Class對象所包含的接口 Class getSuperclass()該方法獲取該Class對象的直接基類。這個方法自然也是返回一個Class引用,所以可以進一步查詢其基類。這意味著在運行時,可以找到某個對象的完整類層次結構。
6、獲得類的構造方法可以調用Class類對象的以下方法:
Constructor getConstructor(Class[] params):獲得類的指定參數類型的公共構造方法。Constructor[] getConstructors():獲得類的所有公共構造方法。
Constructor getDeclaredConstructor(Class[] params):獲得類的指定參數類型的構造方法(與訪問級別無關)。
Constructor[] getDeclaredConstructors():獲得類的所有構造方法(與訪問級別無關)
7、獲得類的成員變量可以調用Class類對象的以下方法:
Field getField(String name):獲得指定的公共字段(屬性)Field[ ] getFields():獲得類的所有公共字段(屬性)Field getDeclaredField(String name):獲得類聲明的指定的字段(與訪問級別無關)Field[ ] getDeclaredFields():獲得類聲明的所有字段
8、獲得類的成員方法可以調用Class類對象的以下方法:
Method getMethod(String name, Class[ ] params):獲取包含指定的參數類型及名稱的公共方法 Method[ ] getMethods():獲得類的所有公共方法
Method getDeclaredMethod(String name, Class[ ] params):獲取包含指定的參數類型及名稱的類聲明的方法 Method[ ] getDeclaredMethods():獲得類聲明的所有方法
9、使用反射來動態的調用類的方法,需要使用java.lang.reflect.Method中的:Object invoke(Object obj, Object[ ] args)方法
obj :指需要調用的那個方法的隱式參數,也即那個方法所屬的對象,如果調用的是一個靜態方法將第一個參數指定為null。
args :指需要調用的那個方法的顯式參數,因為一個方法可以有很多個參數所以在這里我們必須要用一個數組來存放這些參數,在存放時需要把值類型的參數轉換成相應的包裝類型存放進去。
10、使用反射來動態的改變成員變量
調用Class的getField()并指定field名稱,獲得特定的Field對象之后便可直接調用Field的get()和set()方法來改變成員變量了