用來描述發佈的接口(服務)
soap(simple object access protocol)
是xml和http的結合,是webservice數據通信的協議
uddi 用來管理,查詢webService的服務
(沒必要主動說)
webservice的具體三種實現方式(框架)或者三種實現框架的區別
1. Axis2:可以用多種語言開發,
是一個重量級框架,功能非常強大,
但是它的性能比較低。
2. Xfire:它相比Axis2來說是一個輕量級框架,
它的性能要比Axis2高。
3. cxf:是Xfire的升級版,就好比是,
struts2是webwork的升級,
然後cxf和spring集成起來非常方便,簡易,
性能方面也要比Xfire高。
【注】jdk6 自帶的webservice jws
(主動說)
業務場景
我在以前做項目的時候,其中遇到一個功能,
需要進行兩個項目之間的數據的傳輸,
項目經理讓我去完成這個任務,我根據以往的項目經驗,
想到兩種解決方案,第一種
就是開放另外一個項目的數據庫的權限給我,
然後我直接通過訪問另外一個項目的數據
庫,來得到需要的信息,但後來我分析了下,覺的這種方式不安全,
而且因為當時
這個項目是另外一家公司負責在做,所以數據庫裡面的表結構,
以及以後牽涉
到的責任問題都很多,所以我就採用了第二種方案,
即通過webservices的方式,進行
異構系統之間數據信息的傳遞,webservices的具體實現,
有xfire,cxf,axis2,
我根據以往的項目經驗,瞭解到cxf是xfire的升級版本,適用於java語言,
xfire/cxf 性能比axis2要高,並且和spring整合起來也比較方便,
而axis2支持更多的語言,
性能相對於cxf要低,通過上面分析,
結合我們目前的兩個項目都是基於java
語言的,所以我採用cxf這種方式實現了兩個項目之間數據的傳遞,
我們為了保證
webservice的安全性我們採用了基於
WS-Security標準的安全驗證(使用CXF回調函數)。
(沒必要主動說)
webservice服務端配置流程
首先在web.xml中引入cxfServlet核心類,
指定對以/cxf開頭的url路徑提供webservice服務,
之後我們在要發佈成webservice接口上添加@Webservice 註解,
而且還要在實現類上添加同樣的webservice註解並且要說明實現了哪個接口,
之後在spring-webservice.xml中發佈webservice服務,
通過jaxws:endpoint這個標籤,
並且在標籤配置implementor和address來表明實現服務的類,
以及發佈的地址,
最後在瀏覽器中輸入相關的webservice地址?wsdl來驗證服務是否發佈成功。
(沒必要主動說)
webservice客戶端的配置
首先通過wsdl2java根據發佈的webservice服務端地址的wsdl
生成客戶端調用的中間橋樑java類,
將生成的java類拷貝到客戶端項目中,
配置spring-client.xml文件,
通過jaxws:client定義一個bean,
並通過address屬性指明要訪問的webservice的服務地址,
通過serviceClass指明充當中間橋樑的服務類,之後獲取該bean,
就可以通過它來訪問發佈的webservice接口中的方法。
十八、oracle索引概述
索引呢 是與表相關的一個可選結構,可以提高sql語句的檢索效率,相當於我們的字典目錄 ,可以快速進行定位 ,所以可以減少磁盤I/O, 但是因為索引在物理與邏輯上都是獨立於表的數據 它會佔用一定的物理空間(額外磁盤空間) 所以並不是索引越多越好,而我們應該根據業務需求去創建索引,而且進行增刪改操作時 oracle又要自動維護索引 所以在一定程度上也降低了維護速度,而且我們在創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加,我們一般創建索引呢 是這樣創建的 create index 索引名 on 表名(字段),索引又分為普通索引 唯一索引(unique) 單個索引 複合索引(又叫組合索引,在索引建立語句中同時可包含多個字段名),順序索引,散列索引,位圖索引。
十九、oracle存儲過程
存儲過程就是封裝一些sql的集合,也就是一條條的sql語句,過程的優點就是簡化了sql命令加上它是預編譯的,所以它的執行效率和性能較高,再者,如果不調用過程的話就要和數據庫發生多次交互,調用過程只需傳一個命令所有的那些執行邏輯都在數據庫端執行,所以說它降低了網絡的通信量,其次,存儲過程大大提高了安全性,這就是優點
缺點呢,就是不同的數據庫對過程支持的關鍵字支持的關鍵字都是不一樣的,所以它的移植性是非常差的,再者,它的維護性難度也比較大,因為它沒有專業的調試和維護工具,所以說它維護起來比較麻煩,這就是存儲過程的基本概述.
二十、Junit 業務場景
在我們開發項目的時候為了提高代碼的性能和保證邏輯正確性,在我們編寫代碼後往往都要進行單元測試,來驗證代碼,當時我們公司開發人員全部使用的main方法來進行驗證,但是使用mian的最大缺點就是不能將多個類同時進行驗證,驗證的結果不直觀,測試複雜(每個類都要寫main方法,單個運行),一定程度上浪費時間,所有我和項目經理提議使用專業測試工具Junit來進行測試,因為Junit是一個Java語言的單元測試框架 ,測試簡單,不僅可以提供工作效率和代碼的質量,也提高團隊的合作能力,我提議後我們進行了Junit的培訓使用Junit4加註解的方式來測試。
二十一、Apache+Tomcat 實現負載均衡及seesion複製
當我們tomcat訪問量大,線程連接數不夠時,我們考慮到了tomcat的負載均衡來分擔過多的訪問.性能方面負載均衡也能利用多臺tomcat來增大內存量,
流程,準備工作apache,Jk_mod,tomcat,在apache的conf/httpd.conf文件中 使用include 標籤引入我們自定義的一個mood_jl.conf,在modules中引入下載的k_mod-apache-X.X.XX.so文件,在其中引入我們的.so,及work.properties文件,及指定負載分配控制器controller,在work.properties文件中worker.list=controller,tomcat1,tomcat2指定service,worker.tomcat1.port Ajp端口號,type 是ajp,host為指定ip,lbfactor 指定分配權重值越大分擔請求越多,worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2 指定分擔請求的tomcat Session的複製在tomcat中service.xml中Engine標籤加入 jvmRoute 值為work,properties中指定的tomcat名稱,然後打開
我們在做這個項目時,我們考慮到服務器性能的問題,我們最開始想到使用縱向擴展,來增加硬件的配置提高其性能,但這樣做比較耗費資金,而且服務器內存空間也是有限的;所以後來就想到使用橫向擴展來達到這一目的
當時我們的apache是通過jk藉助於ajp協議與tomcat進行通信的,在我們不進行負載均衡之前,那所有的請求都由一臺tomcat進行處理,這樣會使我們的tomcat所承受的壓力增大,而我們進行負載均衡之後,同樣數量的請求經過apache和jk將其分發到多臺tomcat進行處理,從而降低每臺tomcat所承受的壓力,而且當其中一臺機器宕機時,其他機器還可以繼續提供服務,保證服務不間斷。
在這個過程中,我們遇到了session問題,然後我此昂到用session複製來解決這個問題;
在apache的配置文件中增加session粘帶特性:
worker.lb.sticky_session=1
worker.lb.sticky_session_force=0
Tomcat的配置
修改server.xml文件:
增加jvmRoute=”tomcat2” *. jvmRoute賦的值為worker.properties中配置的相應的server名一致
修改應用的web.xml文件
在應用中的web.xml文件中增加
如果這樣做,當第一次訪問的時候,會把所以數據全部緩存到第一臺服務器上,通過web配置文件,會把第一臺緩存的數據全部複製到第二胎服務器上,這樣做就加大網路通信量,導致阻塞,所以我們就想到了可以通過memcached分佈式緩存來存取session從而解決上述問題。
二十二、Ant業務場景
Ant是基於java語言編寫的,因此具有跨平臺的特性,此外還具有簡潔方便,靈活
配置的特性,因此我就在XX項目中使用ant進行項目的編譯,打包,部署操作。使用ant
之後,如果我們在客戶那裡修改代碼後,就可以直接使用ant進行編譯,打包,部署,而不需要為了編譯,打包,部署專門在客戶那裡安裝eclipse.此外使用ant也可以直接和svn進行交互,下載源碼的同時進行編譯,打包,部署。
二十三、maven業務場景
maven業務場景
前段時間在研究maven,知道maven是一個項目管理工具,其核心特點就是通過
maven可以進行包的依賴管理,保證jar包版本的一致性,以及可以使多個項目共享
jar包,從而能夠在開發大型j2ee應用的時候,減小項目的大小,並且和ant
比起來,maven根據“約定優於配置”的特性,可以對其項目的編譯打包部署進行了
更為抽象的封裝,使得自己不需要像ant那樣進行詳細配置文件的編寫,直接使用
系統預定好的mvn clean,compile,test,package等命令進行項目的操作。於是我就
在XX項目中採用了maven,為了保證團隊中的成員能夠節省下載jar包所需要的時間,
於是我就採用nexus搭建了在局域網內的maven私服,然後通過配置settings.xml中
建立mirror鏡像,將所有下載jar包的請求都轉發到maven私服上,之後通過在pom.xml
即(project object model)中配置項目所依賴的jar包,從而達到在構建項目的時候,
先從本地倉庫中查找,如果不存在從內部私服查找,如果不存在最後再從外網central
服務器查找的機制,達到了節省下載帶寬,提高開發效率,以及jar包重用的目的。
ant業務場景
ant是基於java語言編寫的,因此具有跨平臺的特性,此外還具有簡潔方便,靈活
配置的特性,因此我就在XX項目中使用ant進行項目的編譯,打包,部署操作。使用ant
之後,如果我們在客戶那裡修改代碼後,就可以直接使用ant進行編譯,打包,部署,
而不需要為了編譯,打包,部署專門在客戶那裡安裝eclipse.此外使用ant也可以
直接和svn進行交互,下載源碼的同時進行編譯,打包,部署。
maven的常用命令
mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0
mvn clean package
maven的生命週期是獨立的,但是生命週期下的階段是相互關聯並且延續的。
maven的生命週期
clean(清理):clean;default(默認):compile,test,packageinstall;site(站點)
二十四、Servlet的概述:
Servlet是一個web容器,我們通常用的servlet是httpservlet,而httpservlet又是繼承於genericservlet,而genericservlet又實現了servlet接口
servlet的生命週期是 :先進行實例化,然後是初始化,然後是提高服務,然後銷燬,最後不可用,在這五個生命週期,其中,初始化是調用的init方法,這個方法只有一個,而提高服務的時候調用的是service方法,而我們具體在我們所寫的這個方法中,因為我們繼承了httpservlet,其實就是對應了doGet(),doPost(),這種方法,然後據我瞭解,servlet是單例的。非線程安全的,我們通常有一下幾種方案來解決:
第一種,繼承SingleThreadModel但是這樣每次都會創建一個新的servlet實例,但這樣消耗服務器的內存,降低了性能,並且這個接口現在已經過時了,不推薦使用。
第二種:我們儘量避免使用全局變量,就我個人而言,我比較喜歡使用這種方法。
第三種,我們可以通過使用ThreadLocal, 內部結構是一個Map結構,用當前線程作為key,他會創建多個副本。get,set方法
第四種,我們當然還可以來加鎖,進行解決線程問題。
而且我還知道,向我們這種常用的MVC框架,struts1,spring這些MVC框架,都是基於servlet發展而來的,就比如struts1 的核心總控制器是ActionServlet,而springMVC的前端總控制器是dispatchServlet,在項目我們曾經用serlet來生成 圖片驗證碼的,防止用戶進行暴力破解
servlet的配置文件 web.xml
描述:
我在web.xml中,我首先需要寫一個servlet標籤,servlet標籤中有兩個子標籤,一個叫servlet-name,這個name可以隨便起,但是要保證唯一性,除此之外,在這個servlet-name下有一個servlet-class,這個servlet-class對應的就是我後臺提高服務的servlet,除此之外還有一個servlet-mapping,這個裡邊首先有一個servl-name。,這個servl-name首先要保證和上邊的servlet-name保持一致,除此之外還有一個url-pattern,這是一個虛擬路徑,是用來發送請求的url地址
業務場景篇未完待續,敬請關注期待
閱讀更多 動作要快姿勢要帥 的文章