




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Web開發(fā)更加快捷。提供了優(yōu)雅的HTML和CSS規(guī)范,能制作響應式網頁。Bootstrap運行in項Bootstrap2.4.1.查<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<style@mediaonlyscreenand(min-width:0px)and(max-width:768px){bodybackground-color:}}@mediaonlyscreenand(min-width:768px)and(max-width:992px){bodybackground-color:}}@mediaonlyscreenand(min-width:992px)bodybackground-color:}}<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<style.item{color:red;}.titlefont-size:}<div<div<divclass="item<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<styledivfloat:}@mediaonlyscreenand(min-width:0px)(max-width:768px).col-xs-12{width:100%;}.col-xs-6{width:50%;}}@mediaonlyscreenand(min-width:.col-sm-12{width:100%;}.col-sm-6{width:50%;}}<divclass="col-xs-12col-sm-<divclass="col-xs-12col-sm-在chrome瀏覽器elements窗口中會發(fā)現(xiàn)當屏幕大于768時,col-sm-6768com-xs-12超0-幕平板768-1200在Bootstrap源碼1625行中定義了col-xs-12樣式,圖-Bootstrap使用bootstrap框架制作一個網頁網頁嵌套關系圖-Col_xs超小Col_sm小Col_md中<div<div <!DOCTYPE<metacharset="UTF-<linkrel="stylesheet"type="text/css"<div<div class="col-xs-12col-sm- class="col-xs-12col-sm- elements小于768時,只有com-xs-12生效。Vue是個的前端框架,比jquery,ajax開發(fā)效率高,>開始使用-->指南查看那些公 VueVue從optionselroot.style.backgroundColorroot.style.backgroundColor=}varoptions=el:}varvue=new<!DOCTYPE<metacharset="UTF-<title>Inserttitle<div<script//申明一個VuenewfunctionVue(options)varel=varroot 從options.data1,在optionsdata2,調用vue()函數(shù)<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<div<scriptfunctionvarvarvarvar}var}}varvue=new1.mounted函數(shù)<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<scriptfunctionVue(options)varmounted=options.mounted;window.onload=mounted();}varoptions=mounted:function(){}}varvue=new每隔10ms從options.data中取數(shù)據(jù),顯示在Body中增加div,insertBtn<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle<button<div<script框架自動從上functionVue(options)varel=varroot vardata=options.data;varitems=data.items;setInterval(function(){root.innerHTML="";for(vari=0;i<items.length;{varitem=vartitle=item.title;root.innerHTML=root.innerHTML+title+}},}varoptions={el:"app",data:{items:[{title: }}}varvue=newfunctioninsert()varindex=varitem=titletitle新商品options.data.items[index]=}加事件了,自動從options找一個函數(shù)來處理<button<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitleforfor(vari=0;i<buttons.length;i++)varbutton=varattributes=for(vari=0;i<i++)varattribute=varattributeName==if(attributeName=="@click") }}}}varoptions=deleteTest:function(){console.log("deleteTest");}}<scriptfunctionVue(options) //遍歷所有varvarvue=new1@click寫<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle <button<scriptfunctionVue(options) for(vari=0;i<buttons.length;i++)varbutton=varattributes=for(vark=0;k<k++)
varattribute=varattributeName= if(attributeName=="@click") value)if(key==attributeValue){button.onclick=value;}}}}}varoptions=deleteTest:function(){console.log("deleteTest");modify:function()}}varvue=new<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle <button<div<scriptfunctionVue(options)varel=varroot= setInterval(function(){root.innerHTML=varitems=for(vari=0;i<items.length;{varitem=root.innerHTML=root.innerHTMLitem.title+}}, for(vari=0;i<buttons.length;i++)varbutton=varattributes=for(vark=0;k<k++)
varattribute=varattributeName= if(attributeName=="@click")value)if(key==attributeValue)button.onclick=}}}}}varoptions={el:"app",data:{items:deleteTest:function(){insert:function()varitem={title新商品"}}varvue=newvue引入vue框架創(chuàng)建options<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle <div<divv-for="itemin<scriptvaroptions={el:"#app",mounted:function(){data:{items:[{title:},"title電腦}methods:deleteItem:function(param){}}varvue=new<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle <div商品名稱:<input<divv-for="itemin <scriptvarusers=["user1","user2","user3","user4"];users.splice(1,users.splice(0,varoptions={el:"#app",
data:{items:[{title: },title電腦}methodsmethodsdeleteItem:function(param)i++)varitem=this.items[i];if(item.title==param){this.items.splice(i,}}console.log("deleteItem"+insert:function(){ varitem=title:}}}varvue=new設置數(shù)據(jù)包的大小,如果不設置,sql文件態(tài)大,只能執(zhí)行一部分sql SETGLOBAL \ , \android\pdServer\pd.sql中的所有內容到查詢窗口圖-圖-eclipse中import圖-圖-把path設置成/,如圖-圖-修改MySql通過能看到商城電腦端的首頁,圖-參考培優(yōu)課前資料億發(fā)移動端課前資料jsonView,安裝后chrome-圖-
mounted:mounted:function(){varurl="/api/getIndexItem.html";{}){}圖-首頁包含兩個row,如圖-圖- pdServer/src/main/webapp中創(chuàng)建網<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle href="css/bootstrap.css"/><divid="app"<div<divclass="col-xs-class="img-responsive"/><br<div <divid="app"<div v-for="itemin<span>{{item.title}}</span><br<scriptvarvue=newel:mounted:function(){data:{items:[{title:" price:2000{title電腦",price:3000}]}圖- mounted:mounted:function(){var{}){}圖-4.4.1.<!DOCTYPE<!DOCTYPE<metacharset="UTF-<title>Inserttitle href="css/bootstrap.css" <divid="app"class="container-<div<divclass="col-xs-class="img-responsive"/><br<divv-for="itemin <imgv-bind:src="item.image" <scriptvarvue=newel:mounted:function(){varurl="/api/getIndexItem.html";{var//服務器返回的結果有var){var;}}){}data:{itemsdata:{items:[{title:" price:3000{title電腦",price:3000}]}圖-<!DOCTYPE<!DOCTYPE href="css/bootstrap.css"<metacharset="UTF-<title>Inserttitle<divid="app"<div<divclass="col-xs-<ahref="mobileIndex.html">返回<!DOCTYPE<!DOCTYPE href="css/bootstrap.css"<metacharset="UTF-<title>Inserttitle<divid="app"<div<divclass="col-xs-<ahref="mobileIndex.html">返回<scriptvarvue=newVue({el:"#app",mounted:function()//斷 varmap=varitemId=map.get("itemId");}<!DOCTYPE<!DOCTYPE href="css/bootstrap.css"<metacharset="UTF-<title>Inserttitle<divid="app"<div<divclass="col-xs-<ahref="mobileIndex.html">返回
<br>v-class="img-responsive"><divv-<scriptvarvue=newVue({el:"#app",mounted:function()//斷點varmap=varitemId=map.get("itemId");varvar}}學程序的重要5.1.1.圖-.1.3.當某個行為產生后,能在 好友/群、中5.1.4.,支付寶小程5.1.5.圖- 圖- 圖-圖-圖- 圖- 圖- 圖-圖-圖-1,掃 圖-圖-3,選擇程序,輸入appId,如圖-圖-圖-5, 圖-圖-圖-圖-圖-創(chuàng)建模1,選中page右鍵“新 圖-2,register,右鍵“新建Page”,如圖-圖-圖- {{}制作界面圖-<view<textwidth:100%;height:200rpx;background-color:red;padding-left:48rpx;padding-top:padding-top:}font-size:48rpx;}制作界面圖-<view<text border:1pxblack}margin-top:24rpx;width:80%;} *data:{username:"",password:""usernameInput:function(e){varusername=e.detail.value;username:passwordInput:function(e){varpassword=e.detail.value;password:register:function(e){}})++onReady:onReady:function(){ 代碼在“\億發(fā),移動端課前資料圖-image,audio如圖-圖-game,game"pages":"pages":width:320px;height:background-color:}onShow:onShow:function() = 路 800,onShow:onShow:function()varbgX=functionrun()= =bgX=bgX-10;console.log("bgX="+bgX);if(bgX<(320-800))bgX=}context.drawImage(backgroundPath,bgX,0,800,600);}//100ms運行一次setInterval(run,onShow:onShow:function(){varbgX=0;varcarX=0;varindex=0;functionrun() varcarPath=bgX=bgX-console.log("bgX="+if(bgX<(320-800))bgX=}context.drawImage(backgroundPath,bgX,0,800,600);if{}varcarY=400;if(index%2==0){}context.drawImage(carPath,carX,100,}}//100ms運行一次runsetInterval(run,100);}圖-page必須在app.json中申明,才會執(zhí)行生命index,程序一啟動,就創(chuàng)建所有的//pages/index/index.jsconsole.log("http://pages/index/index.jsconsole.log("index.js")*data:*生命周期函數(shù)- onLoad:function(options){console.log("index*生命周期函數(shù)- onReady:function(){console.log("indexonReady()");*生命周期函數(shù)- onShow:function(){console.log("indexonShow()")*生命周期函數(shù)- onHide:function(){console.log("indexonHide()")*生命周期函數(shù)onUnload:function()console.log("index)圖- <textbindtap='indexClick'>index</text> {url:}圖-windowsip的ip地址。在windows上執(zhí)行ipconfig查看以太網或無線網卡的ip地址,不是vmnet1,vmnet8的ip地址,不是linux的ip地址。小程序開發(fā)工具中設置→項目設置,如圖-圖-onReady:function(){console.log("loginonReady:function(){console.log("loginonReady()"); success:function(response){fail:function(e){}聯(lián)網之后,得到的數(shù)據(jù)如圖圖-圖-onReady:function(){console.log("loginonReady:function(){console.log("loginonReady()");varpage=this; success:function(response){varserverData=response.data;varitems=serverData.data;for(var{}}<image拷貝圖片,圖片在億發(fā)<view<view圖-<view<textclass='titleText'>登錄 <buttonclass="btn"bindtap='login'>App.wxsswxml文件都width:100%;height:100rpx;padding-left:48rpx;padding-top:26rpx;}font-size:}border:1pxblack}margin-top:24rpx;width:80%;}url:} <view<textbindinput='usernameInput' {url:}globalData:userInfo:null,globalData:userInfo:null,}"varonReady:function(){usernameInput:usernameInput:function(event)varusername=event.detail.value;username:passwordInput:function(event){varpassword=event.detail.value;password:confirmPasswordInput:function(event){confirmPassword:mailInput:function(event){varmail=event.detail.value;mail:mobileInput:function(event){varmobile=event.detail.value;mobile:register:function()varusername=this.data.username;varpassword=varconfirmPassword=varmail=varmobile=varurl=app.globalData.serverIp+"user/register.html?username="+username+"&password="+password+"&="+mail+"&phone="+mobile;url:url,success:function(response){varserverReturnData=response.data;varstatus=serverReturnData.status;if(status==200){title:成功',}else{title:失敗}fail:function(e){}usernameInput:usernameInput:function(event)varusername=event.detail.value;username:passwordInput:function(event){varpassword=event.detail.value;password:login:function()varusername=this.data.username;varpassword=varvarurl="&password="+url:url,+++success:function(response)if(status==200){title:成功',}else{title:失敗}fail:function(e){} 創(chuàng)建pagestoreIndex修改storeIndex.xmlifif(status==200)title:成功',url:圖-創(chuàng) page創(chuàng) page"tabBar":"tabBar":"color":"selectedColor":"#FF670c","list":[{"text首頁",{"pagePathpages/message/message","text":"消息",{"pagePathpages/me/me","text":"我",}]}////url://url:wx.setStorageSync("user",wx.setStorageSync("user",storage中查看保存的數(shù)據(jù)如圖-圖-Index.js中判斷有沒有用戶名,如果有直接跳轉到onReady:onReady:function()console.log("username="+username)setTimeout(function(){if(username){url:}else{url:}},圖-確認提交審核中點“下一步”,如圖-圖-圖-圖- demo創(chuàng)建項目指向demo,運行demo,查看 c/sb/sc/sb/s做軟件運行在電腦,推薦用做軟件運行在上,叫app,推薦用 圖-dos下執(zhí)行在圖-57輸入cmd,打開dos,如圖-58.執(zhí)行令是nox_adb.execonnect圖-如果不出現(xiàn),在dos窗口中再執(zhí)行一次”nox_adb.execonnect:62001”圖-點“ProceedwithoutInstantRun”不用閃電安裝圖-圖-Android圖-圖-單擊圖-64中的textxml圖--圖-project01圖-圖-圖-androidactivity_main.xml1,修改文本,字號2,設置<!--match_parent<!--match_parent是父容器的大小<!--學 的區(qū)別,design,text的作用 tivityTextView savedInstanceState){ //方法必須是提示出來的,studio必須配置好,//接口名是方法名去掉set,接口名是提示出來的,onClick是studio生成的View.OnClickListener()publicvoidonClick(Viewv){"你單擊了我"}}}圖-從上 到\app\build\outputs\apk文件夾下找到apk,拷貝到\pdServer\src\main\webapp文件夾androidStudio中將視圖切換成project,找到圖- <ahref="app- 圖- 圖- 圖-圖-圖-Android圖-filenameview1,如圖-77
圖-<?<?xmlversion="1.0"encoding="utf-<!--vertical從上向下 horizontal從左向右排-- <?<?xmlversion="1.0"encoding="utf- view3.xmllinearlayout,view2.xml中的<?<?xmlversion="1.0"encoding="utf-<!--把linnearLayout改成scrollView android:text="button1"/>View3.xmlbutton加android:text="button1"/> tivity savedInstanceState){ View.OnClickListener(){publicvoidonClick(Viewv){"btn1"}}}Androidjs添注意uses- 放在 <?xmlversion="1.0"encoding="utf- <activityandroid:name="ent.action.MAIN"/>AndroidsavedInstanceState) String}Android調圖-}username:<input<!DOCTYPE<metacharset="UTF-<title>Inserttitle<scripttype="text/javascript">functionsetUsername(){ 在電腦上用chromeconsole測試ButtonButtonbtn1=(Button)findViewById(R.id.btn1);View.OnClickListener(){publicvoidonClick(Viewv)//java中調}JavaScript調用Android中的圖-ptivityptivity{ View.OnClickListener(){publicvoidonClick(Viewv)//java中調}Phonephone=new//jsphone對在js中通過androidPhoneObject來調用phone對}//內部finalclass publicvoidcall(){Uri }}}jsfunctionfunction{//js中windowandroidPhone// 上運行時,window.androidPhone} 圖-拼多商城android圖-在Relativelayout中增加background景 圖-圖-<?xmlversion="1.0"encoding="utf- android:textSize="48dp"/>android:text="用戶名android:layout_height="wrap_content" "android:layout_height="wrap_content"android:text="登錄 "圖-tivitypsavedInstanceState)=}}classToLoginThreadextendsThreadpublicvoidrun()try Intent(MainActivity.this,}catch(Exceptione){}}}}圖-登錄中單擊按鈕跳到到//單擊登錄界//單擊登錄界面中界ButtonregisterButton=View.OnClickListener(){publicvoidonClick(Viewv){ ,RegisterActivity.class);}聯(lián)網用
publicPdResultregister(PdUserthrows{PdResultajiaResult=newPdResult();Stringpassword=ajiaUser.getPassword(); Stringusername=ajiaUser.getUsername();PdUserdbPdUser=userServiceif{intif{}}return} 再刷新url,服務器執(zhí)行下面select查詢用戶SELECTSELECT*FROMpd_userORDERBYid圖-圖-Jar文件要放到app/libs文件夾,如圖-88圖-把兩個jar加到編譯路徑中有兩種方法第法,如圖-89所示。圖-在圖-90中點擊圖-圖-{privateintstatus;privateStringmsg;privateObjectpublicStringgetMsg()return}publicvoidsetMsg(Stringmsg)this.msg=}publicObjectgetData()return}publicpublicvoidsetData(Objectdata)this.data=}publicintgetStatus()return}publicvoidsetStatus(intstatus)this.status=}}publicpublicclassPdApplication}<!--權限<activityandroid:name="ent.action.MAIN"/>ptivitysavedInstanceState)finalButtonregisterBtn=(Button)View.OnClickListener(){publicvoidonClick(Viewv)
try//1.5個控 EditTextconfirmPasswordEtEditTextphoneEt=(EditText) Et=(EditText) //2. //3.//4.1拼出 =++username+passowrd+ =";
//4.2發(fā)數(shù)myErrorListener=newRequestQueue=}elseToast.makeText(RegisterActivity.this," 不一致",Toast.LENGTH_LONG).show();}}catch(Exceptione){}}} Response.Listener<String>publicvoidonResponse(Strings){Log.i("pd",s);//4.3//4.4json轉成對 JSON.parseObject(s,if(result.getStatus()==200)Toast.makeText(RegisterActivity.this 成功",}elseToast.makeText(RegisterActivity.this 失敗",}}} Response.ErrorListenerpublicvoidonErrorResponse(VolleyErrorvolleyError){}}}圖- publicPdResult{password) PdResultajiaResult=newPdUserif(dbPdUser!=null{}return} tivity savedInstanceState){//單擊登volley發(fā)數(shù)據(jù)給服務 View.OnClickListener()publicvoidonClick(Viewv)//1,找到EditTextusernameEt=EditTextpasswordEt=//2,接收界面上用戶輸入的數(shù) //3,判斷 ||TextUtils.isEmpty(password))Toast.makeText(LoginActivity.this,"用戶名或不能為空",Toast.LENGTH_LONG).show();}else//4.//4.1 PdApplication.SERVER_IP+"/user/login.html" username+
successListener=newMyErrorListener=newStringRequestrequest= }}//單擊登錄界面中 按鈕跳 界 View.OnClickListener(){publicvoidonClick(Viewv)//跳 界 }}//內部 Response.Listener<String>publicvoidonResponse(Strings)//4.3在回調的方法中接收//4.4處理數(shù)//4.5把結果顯示在界面 JSON.parseObject(s,成功",Toast.LENGTH_LONG).show();}}else失敗",Toast.LENGTH_LONG).show();}}} Response.ErrorListenerpublicvoidonErrorResponse(VolleyErrorvolleyError){System.out.println("}}}錯 +圖-javaClass,類名為publicclasspublicclassextendsprotectedvoid{}}文件,activity要放在application標 <?xmlversion="1.0"encoding="utf- <!--權限<activityandroid:name="ent.action.MAIN"/>ifif(result.getStatus()==200)Toast.makeText(LoginActivity.this,"登錄成功",Toast.LENGTH_LONG).show();try{//=}catch(Exceptione){}}8.7.1.分析,如圖-94所示圖-圖-OpenHelperpublicDatabaseHelper(Contextcontext)super(context,"pd.db",null,}publicvoidDatabasedb)Stringsql="createtablepd_user+"usernamevarchar(50))}publicvoidonUpgrade(oldVersion,intnewVersion){Databasedb,}}publicpublicclassUserDAOusername)insert(Contextcontext,//得到連 //得到寫數(shù)據(jù)庫 contentValues.put("username",//添StringtableName=long null,}}ifif(result.getStatus()==200)Toast.makeText(LoginActivity.this,"登錄成功",Toast.LENGTH_LONG).show();try{//UserDAOuserDAO=new }catch(Exceptione){}}在dos令adb在dos令adbroot@android:/root@android:/#root@android:/#cdroot@android:/data#root@android:/data#cdroot@android:/data/data#lse## e#cddatabases e/databases#ls e/databases# 3pd.dbversion3.7.112012-03-20Enter".help"forEnterSQLstatementsterminatedwithaandroid_metadatapd_userselect*from e/databases#exitD:\Program 圖-publicpublicintquery(Contextint //得到sql語句的對//定義Stringsql="select*fromString[]//cursor游標相當于 if{}return}classToLoginThreadextendsThread{publicvoidrun()try//從數(shù)據(jù)庫中查詢用戶是否UserDAOuserDAO=new if(count>=1)//已經登錄過,直接顯示主界 }else//沒登錄,跳到 Intent(MainActivity.this,}}}catch(Exceptione){}}}圖- 圖-//fragment//fragment類是v4publicclassIndexFragmentextendsFragment@NullableBundlesavedInstanceState)//把fragment_index.xml轉成 // //單擊超連接,打開的 的瀏覽器,不能打瀏覽
//用webView加載網//允許webview執(zhí)行//return}}publicpublicclassMainFragmentActivityFragmentActivity{IndexFragmentindexFragment;protectedvoid{// //開始事//動 1:加 indexFragmentindexFragment=new//2//add()和show()有一個失敗了,出異常,不執(zhí)行//提交事}}顯示消息,我圖-{ @NullableBundlesavedInstanceState)Viewreturn}}publicpublicclassMeFragmentextendsFragment@NullableBundlesavedInstanceState)Viewreturn}}FragmentActivityIndexFragmentFragment[]fragments=newButton[]buttons=new//現(xiàn)在顯示的是第幾個int//單擊的按鈕是第幾intprotectedvoid{// //開始事//動 1:加 indexFragmentindexFragment=new//2//add()和show()有一個失敗了,出異常,不執(zhí)行//提交事// MeFragmentmeFragment=new//把三個fragment放到fragments //設置事 for(Button{}//設置第一個按鈕的狀態(tài)為選} 的 {publicvoidonClick(Viewv)//判斷單擊是第幾個按鈕clickBtnIndex=1switch{case}//判斷單擊的是不是當(currentFragmentIndex!=clickBtnIndex)//動作2:添加新的if{}//3://}}}}在androidManifest.xml配置屏幕切換時不執(zhí)行圖-100所示。圖-京淘項目中使用httpClient上,如圖-1所示。微服務一般做成分布式。圖-拆分成多個項目如cart,sso,order,web容易,好定位bug??蓴U展,訂單部署3臺服務器,web集nginx,nginx再3臺訂單服務器http-client使用http協(xié)議,請求有請求行,請求發(fā)送信息比httpClient,如圖2圖-zookeeper的作用如圖-3圖-ZooKeeper地址會寫入zookeeper.zookeeper內部會服務列表,某個服務提供者當消費者需要服務時,需要先zookeeper獲取服務列表信息.之后將服務列表保存到本地緩如果ooepr服器出宕現(xiàn)象.時中心通過心跳檢測的方式判斷服務器是否宕機.如果服務器宕機則會將該服務器信息從服務列表中刪除之后將新的服務列表發(fā)送消費者(客戶端)進行更新.Zookeeper與nginx,mycatZookeeper與nginx,mycat的比較如圖-4圖-Zookeeper如圖-5圖-加載新的虛擬機第將京淘課前資料下發(fā)-2\3-jt初始化虛擬機\dsCentOS-empty.zip解壓雙擊dsCentOS.vmx文件,選擇“我已該虛擬機”如圖-6所示.圖-在Windows系統(tǒng)dos中運行ipconfig查看vmnet8的ip,為虛擬機設置靜態(tài)ip,虛擬機的靜態(tài)ip可以是前一個虛擬機的ip加1,ip的前三段應該與serviceserviceiptableschkconfigchkconfigiptables使用下圖中比較新的快照克隆如圖-7所示。使用早期的快照,有些基礎軟件沒裝上,后面我們用的軟件裝不上。圖-選擇現(xiàn)有快照如圖-8圖-選擇完整克隆如圖-9圖-xs 圖-10所示。圖-Filezilla在京淘課前資料下發(fā)-2\7-Fz置信息如圖-11所示。圖-使用fz進入/usr/local/src,注意不要進入上傳jdk1.8,jdk1.8在京淘課前資料下發(fā)在 執(zhí)行命令解壓tartar-xzvfjdk-8u51-linux-使用fz/etc/profile到windows中,操作步驟如圖-12所示圖-使用工具修改 如圖-13所示,并上傳圖-在xs 中執(zhí)行source/etc/profile使配置執(zhí)行javaversion查看jdk1.8,如圖-14所示。圖-車\zookeeper安裝包”文件夾中的zookeeper-3.4.8.tar.gz到/usr/local/src執(zhí)行下面令解壓cdcdtar-xzvfzookeeper-在zookeeper- 下創(chuàng)建文件夾data和cdcdcdcdzookeeper-mkdirdata pwd data zoo.cfg文件中12行的dataDir修改后如圖-15圖-使用fz上傳zoo.cfg到zookeeper3.4.8/confcdcd/usr/local/src/zookeeper-shzkServer.shstarted,如圖-16圖-[root@localhostbin]#sh//[zk:localhost:2181(CONNECTED)0]ls//[zk:localhost:2181(CONNECTED)1]Dubbo系圖-在windows中部署dubbo系統(tǒng)。通過系統(tǒng)查看dubbo的提供者信息。面的學習,我們可以使用zk客戶端查看服務信息。Windows中拷貝\Day15-dubbo實現(xiàn)購物車\dubbo控制jdk版本,如圖18所示圖-根據(jù)jdk版本拷貝對應的root.war到webapps雙擊\tomcat-dubbo\bin\startup.bat啟動zookeeper服務器ip地址,會報下面的錯誤如圖-19所示。圖-將\ROOT\WEB-INF\perties中的ip地址改為虛擬機的IP地址端2181不用改要保留下來。修改后記得保存,如圖-20所示.圖- tomcat dos , 用戶名是root是登錄成功后如圖-21圖-DubboDubbo運行過程如圖22圖-項目之間關系如圖23圖-Windows——>Preferences——>Java>ContentAsistAutoactivationtriggersforJava后面的文本框里只有一個?,F(xiàn)在你將其改為Eclipse→validation→Disable項目類型是quickstartgroupId是com.jt.1803artifactIddubboInterface創(chuàng)建包com.tedu.service,如圖-24圖-publicpublicinterfaceCartService}Runas→maven創(chuàng)建第一個提供者項目,類型是dubbodubbospringjar,這些jar會自動添加進來,如圖-25所示圖-強制更新,如圖26圖-eclipse→preferences圖-27所示圖-在拷貝別人或網盤的maven拷貝完后,本地倉庫文件夾應該有org-28圖-創(chuàng)建包CartService{return"第1個提供 cartuserId="}}jar所在位置如圖-29圖-解 dubbo-2.8.4.jar, meta-inf中找Window→preference→xml→xmlcatalog添加catalog,如圖30Locationdubbo.xsd文件Key /schema/dubbo/dubbo.圖- <?xml<?xmlversion="1.0"encoding="UTF- a- 中心zookeeper-- <dubbo:registrytimeout="900000"1,設置應用(微服務)名稱<dubbo:application<dubbo:registrytimeout="900000"1,設置應用(微服務)名稱<dubbo:application<dubbo:protocolport="20880"<dubbo:protocolport="20880"<!--<!--4,設置實現(xiàn)類<bean<!--5,設置客戶端服務的地址,地址是接口名--<dubbo:service>publicpublicclassprovider1MainExceptionClassPathXmlApplicationContextSystem.out.println("1啟動");{}}}cdcd/usr/local/src/zookeeper-3.4.8/binshzkCli.sh[zk:localhost:2181(CONNECTED)1]ls/[dubbo,zookeeper]//查看dubbo[zk:localhost:2181(CONNECTED)2]ls/dubbo ////[zk:localhost:2181(CONNECTED)3]localhost:8090,如圖-31所示圖-dubbo與zookeeper的關拷 dubboProvider1項目,改名cartServiceImpl2個提return"第2個提供 cartuserId="}1.設置應用名稱<dubbo:application2.配置zookeeper地址3.<!--4.配置實現(xiàn)類的類名5.配置接口名,開放服務publicpublicclassprovider2MainExceptionClassPathXmlApplicationContextSystem.out.println("2啟動");{}}}}Dubbo中查看提供者創(chuàng)建類型 quickstart maven項<?xml<?xmlversion="1.0"encoding="UTF-bo.xsd<dubbo:applicationname="cart"中心地址有@serviceLoginServiceImpl@autowiredLoginService@autowiredCartService,@autowired--publicclassCartControllerExceptionClassPathXmlApplicationContextcontext while(true) System.out.println("服務消費者收到的結果:"+string);}}}cdcd/usr/local/src/zookeeper-3.4.8/binshzkCli.sh[zk:localhost:2181(CONNECTED)1]ls/[dubbo,zookeeper]//查看dubbo[zk:localhost:2181(CONNECTED)2]ls/dubbo //退出zkCli[zk:localhost:2181(CONNECTED)3]quitcdcd/usr/local/src/zookeeper-shzkServer.sh說明:zk如果宕機后,消費者能否正確運行因為zk會動態(tài)的向客戶端更新服務列表信息.當宕機后,zk的服務列表信息,所以客戶如果這時,所有的服務端程序都宕機,則整個服務陷入RPC(RemoteProcedureCall)—過程調SOASOA面向服務的架構(Service-oriented圖-圖-易定位2、可靠性差:由于高度依賴網絡狀況,任何一次以管理員運行如果前面課程中已經配置好switch,不用再配置linuxredis上 \培優(yōu)課前資料\億發(fā),移動端課前資 tar-xzvfredis-cdredis-在redis 下運行makeinstall,編譯redis上傳“億發(fā),移動端課前資料\redisCluster\置文件\cluster文件夾到“/usr/local/src/cdshstart.shpsef|grepredisredis在redis的 cd/usr/local/src/redis- 如圖-34所示,輸入yes圖-查看集群狀態(tài),如圖-35圖-nginx\ #gzip#gzipserverlisten80;;location/ }}server{listen80;location/ }}server{listen80; location/ }}server{listen80; location/ }}server{listen80; location/ }} server{listen80; location/rootD:\jt-}}}如果前面課程中已經配置好數(shù)據(jù)庫,不用再配置jtdb設置數(shù)據(jù)包的大小,如果不設置,sql文件態(tài)大,只能執(zhí)行一部分sql SETGLOBALTb-order_item表添加CREATEDUPDATED如圖-36圖-redisip初始項目代碼“001dubbo初始代碼”在“\培優(yōu)001dubbo初始代碼.rar,文件夾不要有中依次導入jt-dubbo-parent, jt-dubbo-orderjt-dubbo-web7個項目修改jt-dubbo-manager,jt-dubbo-cart,jt-dubbo-order,jt-dubbo-sso,jt-dubbo-web五個項目中redis服務器ip地址perties在每個項目的每個項目執(zhí)行runas→maveninstall發(fā)布啟動jt-dubbo-manager,jt-dubbo-cart,jt-dubbo-order,jt-dubbo-sso,jt-dubbo-webHttpclient實現(xiàn)如圖-37圖-(service,pojo提供者的關系,如圖-38所示。圖-dubbo,zookeeper相關依賴
quickstart,如圖-39圖- dubbo,zookeeper相關依賴>pojo,service,如圖-40圖- jt-dubbo-cart Cart.java 從jt-dubbo-cart中拷貝cartService.javajt- pojo和service,如圖-41圖-com.jt.cart.service.-cartdubbo的依賴都不一樣,因為dubbo要依賴dubbo,zookeeper相關依賴從dubboProvider1項目拷貝applicationContext-provider.xml放 main/resources/spring,修改applicationName,端口<?xml<?xmlversion="1.0"encoding="UTF-
<!--微服務提供者配置文件作用是把提供者的端口, 中心zookeeper-->1,設置應用(微服務)名稱<dubbo:application<!--2,設置zookeeper的ip地址和 --<dubbo:registrytimeout="900000"<!--3,設置微服務的 --<dubbo:protocolport="20884"4,設置實現(xiàn)類<beanid="CartServiceImpl"><!--5,設置客戶 服務的地址,地址是接口<dubbo:servicetimeout="900000">Jt-dubbo-web通過httpClientjt-dubbo-cart的CartController,用了dubbohttpClient了,要刪除CartController。Web.xml中自動加 dubbo配置文配置文 bo-cart三個項目Runas→maveninstallcdcd/usr/local/src/zookeeper-3.4.8/binsh/zkCli.shlslss,如圖-42所示圖-以前的程序在jt-web中是用httpClientjt-cart,如圖-43所示。圖-在pom.xml中添加下面dubbo依賴,和jt-dubbo-cartdubbo,zookeeper相關依賴 pojo和service,如圖-44所示圖-jt-dubbo-webpojoCart刪除jt-dubbo-web中的cartService包中的接口使用jt-dubbo-interface中的Jt-dubbo-webcartController,orderController中的import原先代碼導入的包 com.jt.web要改將importcom.jt.web.pojo.Cart改成import從dubboConsumer項目中拷貝消費者配置文件,并修a-a- <?xmlversion="1.0"encoding="UTF- 中心zookeeper-- 1,設置應用(微服務)名稱<dubbo:application<!--2,設置zookeeper的ip地址和 --<dubbo:registrytimeout="900000"3,dubbocheck=false消費者啟動時不會檢查提供者是否啟動--><!--cartController@autowiredCartServicecartservice-->timeout="90000"check="false">者。是cdcd/usr/local/src/zookeeper-3.4.8/binsh/zkCli.shlsls/dubbos如圖-45所示圖-直接輸入斷點如如圖-46所示圖-頁面效果,如圖-47圖-jt-dubbo-web/CartControllerjt-dubbo-cart/CartServiceImpl中新增,分析如圖48圖-jt-dubbo-interface,創(chuàng)建com.jt.order.pojo,Jt-dubbo-interface中創(chuàng)建order子包,在order.pojo,order.service兩個包。包結構如圖-49所示圖-拷貝jt-dubbo-order中的實體類Order,OrderItem,OrderShip到 .jt.order.pojo中.拷貝jt-dubbo-order/orderService到 .jt.order.service拷貝后如圖-50圖-jt-dubbo-order service/orderService, Jt-dubbo-order添加dubbo在pom.xml中添加下面dubbo依賴,和jt-dubbo-cartdubbo,zookeeper相關依賴Jt-dubbo-web通過httpClientjt-dubbo-order的OrderController,用了dubbohttpClient了,要刪除OrderController。 <?xmlversion="1.0"encoding="UTF-
<!--微服務提供者配置文件作用是把提供者的端口, 中心zookeeper-->1,設置應用(微服務)名稱<dubbo:application<!--2,設置zookeeper的ip地址和 --<dubbo:registrytimeout="900000"<!--3,設置微服務的 --<dubbo:protocolport="20885"--
4,設置實現(xiàn)類<beanid="orderServiceImpl"<!--5,設置客戶 服務的地址,地址是接口<dubbo:servicetimeout="900000">Jt-dubbo-interface增加了Order要runasmaveninstallJt-dubbo-orderrunasmavenshshzkCli.shls/lspojo和刪除service/orderService,orderServiceImpl,如圖-51所示圖-修 jt-dubbo-web/orderController中1.Order,OrderService的包修改前如圖-52所示圖-修改后如圖53圖-Jt-dubbo-webrunas→mavenshshlsls如圖-54圖-在reference中配置負載均衡策interface="..."loadbalance="randomRandomRoundRobinLeastActiveConsistentHash一致性Hash如圖-55所示。圖-圖-56所示。圖-用戶的請求,服務器接收后,首先寫入消息隊流量削峰也叫限流削峰或削峰填場景說明:用戶下單后,web系統(tǒng)需要通知訂單系統(tǒng)。傳統(tǒng)的做法是,web系統(tǒng)調用訂單系統(tǒng)的接口。如下圖
圖-假如jt-dubbo-order無法,則用戶下單失敗。jt-dubbo-web系統(tǒng)與jt-dubbo-order系統(tǒng)耦合高圖-58圖-場景說明:用戶后,需要發(fā)郵件和。傳統(tǒng)的做法有兩種1.串行的方式;2.并行方式回給客戶端,如圖-59所示圖-時間,如圖-60所示圖-假設三個業(yè)務節(jié)點每個使用50100造后的架構如圖-61所示:圖-數(shù)據(jù)庫的時間,也就是50毫秒。郵件,寫入本可以忽略,因此用戶的響應時間可能是50毫秒。MQMessageQueue消息隊列(MQ)是一種應隊列中獲取消息,并且通信通過RPC調用,可以傳遞java對消息隊列的產品,如圖-62圖-RabbitMQ使用fz在/usr/local/src下創(chuàng)建文件夾上傳京淘項目每日課前資料\Day17-rabbitMQ\到rpmRPMRed-HatPackageManager(RPM軟件包管理器的縮Red-hat是一種Linux,RPM是用來安裝Linuxrpmrpm-ivhrabbitmq-server-3.6.1-安裝過程如圖-63圖-安裝rabbitMQweb管安裝插件cdcdls#vim打開rabbitmq-pluginsvimrabbitmq- enablerabbitmq_managementThefollowingpluginshavebeenenabled: rabbit@localhost...failed.Couldnotcontactnoderabbit@localhost.Options:--online-failifbrokercannotbecontacted.--offline-donottryto##cd/usr/sbin#lsra*servicerabbitmq-server啟動后如圖64圖-單擊火狐瀏覽器,如圖65圖-在虛擬機中用localhost:15672能,能登:guest,登錄成功后如圖用戶名:guest,登錄成功后如圖圖-在windows上用http://虛擬機ip:15672能看到登錄界面,但不能登錄,如圖-67所示。圖-[root@localhost[root@localhostsbin]#[root@localhostsbin]#lsmanman進入命令模式輸入/add_useradd_user字符串,如圖-68所示圖-會搜到下面的內容,如圖-69圖-進入命令模式輸入qvi執(zhí)行下面令創(chuàng)建一個用戶用戶名是jtadmin,rabbitmqctlrabbitmqctladd_userjtadmin執(zhí)行下面令設置jtadmin是超級管理員在windows上用http://虛擬機ip:15672能看到登錄Virtualhostexchangequeuechannel之間的關系,如圖-70所示圖-virtualHostExchanges:交換 作用:將消息發(fā)往不同的隊中 號.超級管理員可以對用戶,策略.者同時可以查看rabbingmq節(jié)點的相關.策略制定者policy進行.普通管理者僅可登陸管理控制.無法登錄管理控制新增虛擬主機,如圖-71圖-選
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈社團活動風采展示
- 蛋制品加工過程的安全控制
- 危廢處理車間工作總結
- 通訊寫作技巧培訓
- 藍黃色商務年終總結
- 醫(yī)院藥品二級庫房管理
- 腰痛臨床表現(xiàn)
- 小學英語連系動詞的使用技巧
- 建筑行業(yè)古建筑保護與維修知識考點梳理
- 急診科醫(yī)生面對暴力和攻擊的應對策略
- 重癥肺炎護理查房文獻參考
- 小紅書經典營銷案例分析
- 企業(yè)戰(zhàn)略與績效管理
- 虛擬貨幣交易合同
- 操作系統(tǒng)課程設計報告
- 小學安全教育《平安校園 拒絕欺凌》劉偉【省級】優(yōu)質課
- 靜脈輸液的不良反應及處理原則考核試題及答案
- 檔案袋密封條格式范本(可直接打印,可自行編輯)
- 2022年深圳市南山區(qū)教育系統(tǒng)招聘公辦幼兒園園長考試真題
- 2023年全國《軍事理論》教育知識競賽試題與答案
- 新課程標準2022版初中歷史考試題及答案
評論
0/150
提交評論