SpringMVC學(xué)習(xí)筆記

1、代碼結(jié)構(gòu)中Dao拴鸵,Service玷坠,Controller,Util劲藐,Model是什么意思八堡,為什么劃分?

web:主要是客戶端網(wǎng)頁(yè),是表層的東西聘芜,可接收和返回?cái)?shù)據(jù)給用戶
domain:主控制層兄渺,是用戶與數(shù)據(jù)庫(kù)交互的核心中轉(zhuǎn)站,控制用戶數(shù)據(jù)收集汰现,控制請(qǐng)求轉(zhuǎn)向
service:業(yè)務(wù)邏輯層挂谍,處理數(shù)據(jù)邏輯,驗(yàn)證數(shù)據(jù)瞎饲,
dao:持久層口叙,讀寫(xiě)數(shù)據(jù)庫(kù)。

web發(fā)出請(qǐng)求---domain接收控制數(shù)據(jù)轉(zhuǎn)向(可以返回也可以進(jìn)入service)---service驗(yàn)證數(shù)據(jù)正確性或者是否符合業(yè)務(wù)要求---dao存入嗅战,讀出妄田,依次返回。

首先這些名字不是必須的驮捍,只是為了統(tǒng)一形庭,一般都這么叫。
工作流程:一個(gè)請(qǐng)求發(fā)送到action(作用:MVC中的C),action控制它發(fā)送到哪個(gè)biz處理,如果用到數(shù)據(jù)庫(kù)厌漂,那么biz在連接dao萨醒,然后返回要的數(shù)據(jù),最后action在返回響應(yīng)的頁(yè)面(比如jsp),因?yàn)槭敲嫦驅(qū)ο?所以實(shí)體domain在中間傳遞數(shù)據(jù)苇倡。以上為工作流程.
各層意義:action為控制層富纸,MVC中充當(dāng)C角色,用來(lái)分配哪個(gè)業(yè)務(wù)來(lái)處理用戶請(qǐng)求。
biz業(yè)務(wù)層旨椒,存放好多處理業(yè)務(wù)的代碼晓褪,現(xiàn)實(shí)中面向接口編程,一般這里定義都是業(yè)務(wù)接口综慎,通常會(huì)有一個(gè)biz.impl這個(gè)包用來(lái)寫(xiě)實(shí)現(xiàn)類. 當(dāng)然針對(duì)架構(gòu)意義實(shí)現(xiàn)類不用說(shuō)涣仿。
dao持久層,DB操作都寫(xiě)在這里
ui 用戶交互層,通常為頁(yè)面,例如.jsp,aspx等頁(yè)面
util功能包,針對(duì)本項(xiàng)目工具類
common通用工具包,一般一個(gè)公司會(huì)有固定的jar好港,好幾個(gè)項(xiàng)目通用的愉镰,例如遠(yuǎn)程調(diào)用等
domian存放實(shí)體,如果用ibatis框架,一般mapping創(chuàng)建在它下面,當(dāng)然只針對(duì)架構(gòu)mapping也是無(wú)意義. 不懂追問(wèn)即可!

Action類 是[獲得Form表單數(shù)據(jù)钧汹,并處理邏輯的類]
DAO(Data Access Object) 是一個(gè)接口實(shí)現(xiàn)[通過(guò)SessionFactory獲得操作數(shù)據(jù)庫(kù)的會(huì)話丈探,并實(shí)現(xiàn)一些基本的刪除 添加 修改數(shù)據(jù),在servlet中更實(shí)際化業(yè)務(wù)操作]

簡(jiǎn)單點(diǎn)說(shuō)拔莱,dao層基本都是幾個(gè)固定的增刪改查方法碗降,比方說(shuō)你在用hibernate的時(shí)候,數(shù)據(jù)庫(kù)發(fā)生變化時(shí)塘秦,就要重新生成相應(yīng)的dao讼渊,所以發(fā)你的代碼重新寫(xiě)在service里面,dao變化都不會(huì)影響你的程序了尊剔。

還有爪幻,一些做外包的,dao赋兵、POJO都是別人生成好的笔咽,不允許程序員改動(dòng)的,所以要處理你自己的業(yè)務(wù)方法霹期,就重新建立service層叶组,這里的東西是跟你具體的業(yè)務(wù)有關(guān)的。

2历造、JSONObject和JSONArray區(qū)別及基本用法

一甩十、JSONObject和JSONArray的數(shù)據(jù)表示形式
JSONObject的數(shù)據(jù)是用 { } 來(lái)表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作業(yè)", "content" : null }
而JSONArray吭产,顧名思義是由JSONObject構(gòu)成的數(shù)組侣监,用 [ { } , { } , ...... , { } ] 來(lái)表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作業(yè)" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2個(gè)JSONObject的JSONArray臣淤。
可以看到一個(gè)很明顯的區(qū)別橄霉,一個(gè)最外面用的是 { } ,一個(gè)最外面用的是 [ ] 邑蒋;

二姓蜂、如何從字符串String獲得JSONObject對(duì)象和JSONArray對(duì)象
JSONObject jsonObject = new JSONObject ( String str);
JSONArray jsonArray = new JSONArray(String str ) ;

三、如何從JSONArray中獲得JSONObject對(duì)象
大家可以把JSONArray當(dāng)成一般的數(shù)組來(lái)對(duì)待医吊,只是獲取的數(shù)據(jù)內(nèi)數(shù)據(jù)的方法不一樣
JSONObject jsonObject = jsonArray.getJSONObject(i) ;

四钱慢、獲取JSON內(nèi)的數(shù)據(jù)
int mid= jsonObject.getInt ( "id" ) ; // 這里的mid得到的數(shù)據(jù)就是123.
String mcourse=jsonObject.getString( " courseID") ; // 這里的mcourse得到的數(shù)據(jù)就是huangt-test.

五、json數(shù)組在java中得到某列的值

public static void jsonToBean(String data) {
try {
JSONArray array = new JSONArray(data);//將json字符串轉(zhuǎn)成json數(shù)組
for (int i = 0; i < array.length(); i++) {//循環(huán)json數(shù)組
JSONObject ob  = (JSONObject) array.get(i);//得到j(luò)son對(duì)象
String  name= ob.getString("name");//name這里是列名稱卿堂,獲取json對(duì)象中列名為name的值
System.out.print(name);//輸出name
} catch (JSONException e) {
}
}

3束莫、TestNG斷言

1懒棉、原理:對(duì)測(cè)試程序變量的中間狀態(tài)進(jìn)行斷言(Assert)判斷,從而輔助判斷測(cè)試用例的執(zhí)行是成功還是失敗览绿。
2策严、TestNG中常用的斷言方法有:
(1) assertTrue:判斷是否為T(mén)rue。
(2) assertFalse:判斷是否為false挟裂。
(3) assertSame:判斷引用地址是否相同享钞。
(4) assertNotSame:判斷引用地址是否不相同揍诽。
(5) assertNull:判斷是否為null诀蓉。
(6) assertNotNull:判斷是否不為null。
(7) assertEquals:判斷是否相等暑脆,Object類型的對(duì)象需要實(shí)現(xiàn)haseCode及equals方法渠啤。
(8) assertNotEquals:判斷是否不相等。
(9) assertEqualsNoOrder:判斷忽略順序是否相等添吗。
3沥曹、下面使用WebDriver測(cè)試實(shí)例體現(xiàn)斷言的使用方法。測(cè)試用例:
(1) 打開(kāi)Firefox瀏覽器碟联,訪問(wèn)sogou首頁(yè)妓美。
(2) 查找首頁(yè)上的輸入框元素。
(3) 斷言輸入框是否存在鲤孵。
(4) 輸入搜索關(guān)鍵字壶栋,點(diǎn)擊搜索按鈕。


image.png

例子:

package cn.testng;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class AssertTest {
    public WebDriver driver;
    String baseUrl="http://www.sogou.com";//設(shè)定訪問(wèn)網(wǎng)站的地址
  @Test
  public void testSearch() {
      //打開(kāi)sogou首頁(yè)
      driver.get(baseUrl+"/");
      WebElement inputBox=driver.findElement(By.id("query"));
      /*使用Assert類的assertTrue方法斷言搜索輸入框是否在頁(yè)面顯示
       * isDisplayed方法根據(jù)頁(yè)面元素的顯示狀態(tài)返回判斷值普监,在頁(yè)面顯示則返回true,不顯示則返回false
       */
      Assert.assertTrue(inputBox.isDisplayed());
      inputBox.sendKeys("自動(dòng)化測(cè)試");
      //點(diǎn)擊搜索按鈕
      driver.findElement(By.id("stb")).click();
  }
  @BeforeMethod
  public void beforeMethod() {
      //若無(wú)法打開(kāi)Firefox瀏覽器贵试,可設(shè)定Firefox瀏覽器的安裝路徑
      System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
      //打開(kāi)Firefox瀏覽器
      driver=new FirefoxDriver();
  }

  @AfterMethod
  public void afterMethod() {
      //關(guān)閉打開(kāi)的瀏覽器
      driver.quit();
  }
}

測(cè)試結(jié)果:
[TestNG] Running:
C:\Windows\Temp\testng-eclipse--542429537\testng-customsuite.xml

PASSED: testSearch

===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凯正,隨后出現(xiàn)的幾起案子毙玻,更是在濱河造成了極大的恐慌,老刑警劉巖廊散,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桑滩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡允睹,警方通過(guò)查閱死者的電腦和手機(jī)运准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擂找,“玉大人戳吝,你說(shuō)我怎么就攤上這事」嵯眩” “怎么了听哭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我陆盘,道長(zhǎng)普筹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任隘马,我火速辦了婚禮太防,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酸员。我一直安慰自己蜒车,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布幔嗦。 她就那樣靜靜地躺著酿愧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邀泉。 梳的紋絲不亂的頭發(fā)上嬉挡,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音汇恤,去河邊找鬼庞钢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛因谎,可吹牛的內(nèi)容都是我干的基括。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蓝角,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阱穗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起使鹅,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揪阶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后患朱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鲁僚,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年裁厅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冰沙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡执虹,死狀恐怖拓挥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情袋励,我是刑警寧澤侥啤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布当叭,位于F島的核電站,受9級(jí)特大地震影響盖灸,放射性物質(zhì)發(fā)生泄漏蚁鳖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一赁炎、第九天 我趴在偏房一處隱蔽的房頂上張望醉箕。 院中可真熱鬧,春花似錦徙垫、人聲如沸讥裤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坞琴。三九已至哨查,卻和暖如春逗抑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寒亥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工邮府, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉奕。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓褂傀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親加勤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仙辟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容