SpringMVC学习笔记

1、代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?

web:主要是客户端网页,是表层的东西,可接收和返回数据给用户
domain:主控制层,是用户与数据库交互的核心中转站,控制用户数据收集,控制请求转向
service:业务逻辑层,处理数据逻辑,验证数据,
dao:持久层,读写数据库。

web发出请求---domain接收控制数据转向(可以返回也可以进入service)---service验证数据正确性或者是否符合业务要求---dao存入,读出,依次返回。

首先这些名字不是必须的,只是为了统一,一般都这么叫。
工作流程:一个请求发送到action(作用:MVC中的C),action控制它发送到哪个biz处理,如果用到数据库,那么biz在连接dao,然后返回要的数据,最后action在返回响应的页面(比如jsp),因为是面向对象,所以实体domain在中间传递数据。以上为工作流程.
各层意义:action为控制层,MVC中充当C角色,用来分配哪个业务来处理用户请求。
biz业务层,存放好多处理业务的代码,现实中面向接口编程,一般这里定义都是业务接口,通常会有一个biz.impl这个包用来写实现类. 当然针对架构意义实现类不用说。
dao持久层,DB操作都写在这里
ui 用户交互层,通常为页面,例如.jsp,aspx等页面
util功能包,针对本项目工具类
common通用工具包,一般一个公司会有固定的jar,好几个项目通用的,例如远程调用等
domian存放实体,如果用ibatis框架,一般mapping创建在它下面,当然只针对架构mapping也是无意义. 不懂追问即可!

Action类 是[获得Form表单数据,并处理逻辑的类]
DAO(Data Access Object) 是一个接口实现[通过SessionFactory获得操作数据库的会话,并实现一些基本的删除 添加 修改数据,在servlet中更实际化业务操作]

简单点说,dao层基本都是几个固定的增删改查方法,比方说你在用hibernate的时候,数据库发生变化时,就要重新生成相应的dao,所以发你的代码重新写在service里面,dao变化都不会影响你的程序了。

还有,一些做外包的,dao、POJO都是别人生成好的,不允许程序员改动的,所以要处理你自己的业务方法,就重新建立service层,这里的东西是跟你具体的业务有关的。

2、JSONObject和JSONArray区别及基本用法

一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;

二、如何从字符串String获得JSONObject对象和JSONArray对象
JSONObject jsonObject = new JSONObject ( String str);
JSONArray jsonArray = new JSONArray(String str ) ;

三、如何从JSONArray中获得JSONObject对象
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样
JSONObject jsonObject = jsonArray.getJSONObject(i) ;

四、获取JSON内的数据
int mid= jsonObject.getInt ( "id" ) ; // 这里的mid得到的数据就是123.
String mcourse=jsonObject.getString( " courseID") ; // 这里的mcourse得到的数据就是huangt-test.

五、json数组在java中得到某列的值

public static void jsonToBean(String data) {
try {
JSONArray array = new JSONArray(data);//将json字符串转成json数组
for (int i = 0; i < array.length(); i++) {//循环json数组
JSONObject ob  = (JSONObject) array.get(i);//得到json对象
String  name= ob.getString("name");//name这里是列名称,获取json对象中列名为name的值
System.out.print(name);//输出name
} catch (JSONException e) {
}
}

3、TestNG断言

1、原理:对测试程序变量的中间状态进行断言(Assert)判断,从而辅助判断测试用例的执行是成功还是失败。
2、TestNG中常用的断言方法有:
(1) assertTrue:判断是否为True。
(2) assertFalse:判断是否为false。
(3) assertSame:判断引用地址是否相同。
(4) assertNotSame:判断引用地址是否不相同。
(5) assertNull:判断是否为null。
(6) assertNotNull:判断是否不为null。
(7) assertEquals:判断是否相等,Object类型的对象需要实现haseCode及equals方法。
(8) assertNotEquals:判断是否不相等。
(9) assertEqualsNoOrder:判断忽略顺序是否相等。
3、下面使用WebDriver测试实例体现断言的使用方法。测试用例:
(1) 打开Firefox浏览器,访问sogou首页。
(2) 查找首页上的输入框元素。
(3) 断言输入框是否存在。
(4) 输入搜索关键字,点击搜索按钮。


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";//设定访问网站的地址
  @Test
  public void testSearch() {
      //打开sogou首页
      driver.get(baseUrl+"/");
      WebElement inputBox=driver.findElement(By.id("query"));
      /*使用Assert类的assertTrue方法断言搜索输入框是否在页面显示
       * isDisplayed方法根据页面元素的显示状态返回判断值,在页面显示则返回true,不显示则返回false
       */
      Assert.assertTrue(inputBox.isDisplayed());
      inputBox.sendKeys("自动化测试");
      //点击搜索按钮
      driver.findElement(By.id("stb")).click();
  }
  @BeforeMethod
  public void beforeMethod() {
      //若无法打开Firefox浏览器,可设定Firefox浏览器的安装路径
      System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
      //打开Firefox浏览器
      driver=new FirefoxDriver();
  }

  @AfterMethod
  public void afterMethod() {
      //关闭打开的浏览器
      driver.quit();
  }
}

测试结果:
[TestNG] Running:
C:\Windows\Temp\testng-eclipse--542429537\testng-customsuite.xml

PASSED: testSearch

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • springmvc学习笔记 学习springmvc框架原理 包括哪些组件: 前端控制器(中心) 处理器映射器(三大...
    罗志贇阅读 1,170评论 0 51
  • 1、DispatcherServlet(前端控制器) 用户的请求,通过DispatcherServlet分发,到达...
    zxcvto阅读 443评论 1 2
  • 强烈推荐使用Spring Boot,搭建Spring Web项目,进入网址,把WEB依赖打钩,点击生成项目,会下载...
    tenlee阅读 1,583评论 3 44
  • @RequestMapping注解 RequestMaping是用于处理请求地址映射的注解,可作用于类或方法上。作...
    繁页阅读 244评论 0 0
  • 1.springmvc是什么 springmvc是spring框架的一个模块,他们之间无需通过整合层进行整合spr...
    月影风煞阅读 282评论 0 0