第六章 API应用(下篇)

1、本地数据及缓存API

         小程序提供了以键值对的形式进行本地数据缓存功能,并且是永久存储的,但最大不超过10MB,其目的是提高加载速度。数据缓存的接口主要有4个:

         wxsetStorage(Object)或wx.setStorageSyne (key,data)接口用于设置缓存数据。  

         wx. getStorage(Object)或wx.getStorageSync( key)接口用于获取缓存数据。

         wx. removeStorage( Object)或wx.removeStorageSync(key)接口用于删除指定缓存数据。

         wx.clearStorage( )或wx.clearStorageSync()接口用于清除缓存数据。其中,带Sync后缀的为同步接口,不带Syne后缀的为异步接口。

(1) 保存数据

1、wx.setStorage( Object)
        wx.setStorage(Object )接口将数据存储到本地缓存接口指定的key中,接口执行后会覆盖原来key对应的内容。

      其参数如下表所示:

实例代码如下:

wx.setStorage({
  key:'name',
  data:'sdy',
  success:function(res){
    console.log(res)
  }
})

2、wx.setStorageSync( Object)

     wx.setStorageSync(key,data)是同步接口,其参数只有key和data。

实例代码如下:


wx.setStorageSync('age','25')
(2) 获取数据 

1、wx.setStorage( Object)
        wx.setStorage(Object )接口是从本地缓存中异步获取指定的key对应的内容。其参数如下表所示:

 实例代码如下:

wx.setStorage({
  key:'name',
  success:function(res){
    console.log(res.data)
  }
})

2、wx.setStorageSync( key)
        wx.setStorage(key )接口是从本地缓存中同步获取指定的key对应的内容。

实例代码如下:

try{
  var value=wx.getStorageSync('age')
  if(value){
    console.log("获取成功"+value)
  }
}catch(e){
  console.log("获取失败")
}
 (3) 删除数据

   1、wx.removeStorage(Object)

          wx.removeStorage(Object)接口用于从本地缓存异步移除指定key,其参数如下表所示:

实例代码如下:

wx.removeStorage({
  key: 'name',
  success:function(res){
    console.log("删除成功")
  },
  fail:function(){
    console.log("删除失败")
  }
})

2、wx.removeStorageSync( key)

    wx.removeStorageSync( key)接口用于从本地缓存中同步删除指定key对应的内容,其参数只有key。

实例代码如下:

try{
  wx.removeStorageSync('name')
}catch(e){
  
}
(4) 清空数据

1、wx.clearStorage()

         wx.clearStorage()接口用于异步清理本地数据缓存,没有参数。

实例代码如下:

wx.getStorage({
  key:'name',
  success:function(res){
    wx.clearStorage()
  }
})

2、wx.clearStorageSync()

         wx.clearStorageSync()接口用于异步清理本地数据缓存。

try{
  wx.clearStorageSync()
}catch(e){
  
}

2、位置信息API

          小程序可以通过位置信息API来获取或显示本地位置信息,小程序支持WGS84和GCj02标准,WGS84标准为地球坐标系,是国际上通用的坐标系;GCj02标准是中国国家测绘局制定的地理信息系统的坐标系统,是由WGS84坐标系经加密后的坐标系,又称为火星坐标系。默认为WGS84标准,若要查看位置需要使用GCj02标准。主要包括以下3个API接口:

    wx. getLocation(Object)接口用于获取位置信息。

    wx. chooseLocation(Object)接口用于选择位置信息。

    wx. openLocation(Object)接口用于通过地图显示位置。

(1)获取位置信息

       wx.getLocation( Object)接口用于获取当前用户的地理位置、速度,需要用户开启定位功能,当用户离开小程序后,无法获取当前的地理位置及速度,当用户点击“显示在聊天顶
部”时,可以获取到定位信息,    其相关参数如表所示:

wx.getLocation( Object)调用成功后,返回的参数如表所示:

实例代码:

wx.getLocation({
  type:'wgs84',
  success:function(res){
    console.log("经度"+res.longitude);
    console.log("纬度"+res.longitude);
    console.log("速度"+res.longitude);
    console.log("位置的精准度"+res.accuracy);
    console.log("水平精准度"+res.horizontalAccuracy);
    console.log("垂直精准度"+res.verticalAccuracy);
  }
})
(2)选择位置信息

       wx.chooseLocation( Object)接口用于在打开的地图中选择位置,用户选择位置后可返回当前位置的名称,地址,经纬度信息。其相关参数如表所示:

wx.chooseLocation(Object)调用成功后,返回的参数如表:


示例代码如下:

wx.chooseLocation({
  success:function(res){
    console.log("位置名称"+res.name)
    console.log("位置地址"+res.address)
    console.log("位置经度"+res.longitude)
    console.log("位置纬度"+res.latitude)
  }
})
(3) 显示位置信息

       wx. openLocation(Object)接口用于在微信内置地图中显示位置信息,其相关参数如表所示:

示例代码如下:

wx.getLocation({
  type:'gcj02',
  success:function(res){
    var latitude=res.latitude
    var longitude=res.longitude
    wx.openLocation({
      latitude: latitude,
      longitude: longitude,
      scale:10,
      name:'弃疗国际酒店',
      address:'龙城市长安区圣人城圣龙大道27号'
    })
  }
})

3、设备相关API

     设备相关的接口用于获取设备相关关信息,主要包括系统信息、网络状态、拨打电话及扫码等。主要包括以下5个接口API:

wx.getSystemInfo( Object)接口、wx. getSystemInfoSync()接口用于获取系统信息。

wx. getNetworkType( Object)接口用于获取网络类型。

wx.onNetworkStatusChange(Call Back)接口用于监测网络状态改变。

wx. makePhoneCall(Object)接口口用于拨打电话。

wx.scanCode(Object)接口用于扫描二维码。

(1)获取系统信息

wx. getSystemInfo( Object)接口、wx.getSys temInfoSync()接口分别用于异步和同步获取系统信息。其相关参数如表所示:

wx.getSystemInfo( )接口或wx x. getSystemInfoSyne()接口调用成功后,返回系统相关信息,如表所示:


示例代码如下:

wx.getSystemInfo({
  success:function(res){
    console.log("手机型号"+res.model)
    console.log("设备像素比"+res.pixelRatio)
    console.log("窗口宽度"+res.windowWidth)
    console.log("窗口高度"+res.windowHeight)
    console.log("微信版本号"+res.version)
    console.log("操作系统版本"+res.system)
    console.log("客户端平台"+res.platform)
  }
})
运行结果:


(2)网络状态

1.获取网络状态

wx.getNetworkType(Object)用于获取网络类型,其相关参数如表:


如果wx.getNetworkType()接口被成功调用,则返回网络类型包,有WiFi、2G、3G、4G、unknown(Android 下不常见的网络类型)、none(无网络)。

示例代码如下:

wx.getNetworkType({
  success:function(res){
    console.log(res.networkType)
  }
})


2.监听网络状态变化

wx.NetworkStatusChange(CallBack)接口用于监听网络状态变化,当网络状态变化时,返回当前网络状态类型及是否有网络链接。

示例代码如下:


wx.onNetworkStatusChange(function(res){
  console.log("网络是否连接:"+res.isConnected)
  console.log("变化后的网络类型"+res.networkType)
})

(3)拨打电话

wx.makePhoneCall(Object)接口用于实现调用手机拨打电话,其相关参数如表:


示例代码如下:

wx.makePhoneCall({
  phoneNumber: '159********',
})

(4)扫描二维码

wx.scanCode(Object)接口用于调起客户端扫码界面,扫码成功后返回相应的内容,其相关参数如表:


扫码成功后,返回的参数如表:


示例代码如下:

wx.scanCode({
  success:(res)=>{
    console.log(res.result)
    console.log(res.scanType)
    console.log(res.charSet)
    console.log(res.path)
  }
})

wx.scanCode({
  onlyFromCamera:true,
  success:(res)=>{
    console.log(res)
  }
})

  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
 Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。   Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。   《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。 目录 第1篇 概述 第1章 Spring概述 1.1 认识Spring 1.2 关于SpringSource 1.3 Spring带给我们什么 1.4 Spring体系结构 1.5 Spring 3.0的新功能 1.5.1 核心API更新到Java 5. 1.5.2 Spring表达式语言 1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇 IoC和AOP 第3章 IoC容器概述 3.1 IoC概述 3.1.1 通过实例理解IoC的概念 3.1.2 IoC的类型 3.1.3 通过容器完成依赖关系的注入 3.2 相关Java基础知识 3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 BeanFactory中Bean的生命周期 3.5.2 ApplicationContext中Bean的生命周期 3.6 小结 第4章 在IoC容器中装配Bean 4.1 Spring配置概述 4.1.1 Spring容器高层视图 4.1.2 基于XML的配置 4.2 Bean基本配置 4.2.1 装配一个Bean 4.2.2 Bean的命名 4.3 依赖注入 4.3.1 属性注入 4.3.2 构造函数注入 4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法注入 4.5.1 lookup方法注入 4.5.2 方法替换 4.6 <bean>之间的关系 4.6.1 继承 4.6.2 依赖 4.6.3 引用 4.7 整合多个配置文件 4.8 Bean作用域 4.8.1 singleton作用域 4.8.2 prototype作用域 4.8.3 Web应用环境相关的Bean作用域 4.8.4 作用域依赖问题 4.9 FactoryBean 4.10 基于注解的配置 4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition 5.1.3 InstantiationStrategy 5.1.4 BeanWrapper 5.2 属性编辑器 5.2.1 JavaBean的编辑器 5.2.2 Spring默认属性编辑器 5.2.3 自定义属性编辑器 5.3 使用外部属性文件 5.3.1 使用外部属性文件 5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章 Spring AOP基础 6.1 AOP概述 6.1.1 AOP到底是什么 6.1.2 AOP术语 6.1.3 AOP的实现者 6.2 基础知识 6.2.1 带有横切逻辑的实例 6.2.2 JDK动态代理 6.2.3 CGLib动态代理 6.2.4 AOP联盟 6.2.5 代理知识小结 6.3 创建增强类 6.3.1 增强类型 6.3.2 前置增强 6.3.3 后置增强 6.3.4 环绕增强 6.3.5 异常抛出增强 6.3.6 引介增强 6.4 创建切面 6.4.1 切点类型 6.4.2 切面类型 6.4.3 静态普通方法名匹配切面 6.4.4 静态正则表达式方法匹配切面 6.4.5 动态切面 6.4.6 流程切面 6.4.7 复合切点切面 6.4.8 引介切面 6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 了解注解 7.2.2 一个简单的注解类 7.2.3 使用注解 7.2.4 访问注解 7.3 着手使用@AspectJ 7.3.1 使用前的准备 7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 增强织入的顺序 7.6.4 访问连接点信息 7.6.5 绑定连接点方法入参 7.6.6 绑定代理对象 7.6.7 绑定类注解对象 7.6.8 绑定返回值 7.6.9 绑定抛出的异常 7.7 基于Schema配置切面 7.7.1 一个简单切面的配置 7.7.2 配置命名切点 7.7.3 各种增强类型的配置 7.7.4 绑定连接点信息 7.7.5 Advisor配置 7.8 混合切面类型 7.8.1 混合使用各种切面类型 7.8.2 各种切面类型总结 7.9 JVM Class文件字节码转换基础知识 7.9.1 java.lang.instrument包的工作原理 7.9.2 如何向JVM中注册转换器 7.9.3 使用JVM启动参数注册转换器的问题 7.10 使用LTW织入切面 7.10.1 Spring的LoadTimeWeaver 7.10.2 使用LTW织入一个切面 7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问 第8章 Spring对DAO的支持 8.1 Spring的DAO理念 8.2 统一的异常体系 8.2.1 Spring的DAO异常体系 8.2.2 JDBC的异常转换器 8.2.3 其他持久技术的异常转换器 8.3 统一数据访问模板 8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 9.1.2 数据并发的问题 9.1.3 数据库锁机制 9.1.4 事务隔离级别 9.1.5 JDBC对事务支持 9.2 ThreadLocal基础知识 9.2.1 ThreadLocal是什么 9.2.2 ThreadLocal的接口方法 9.2.3 一个TheadLocal实例 9.2.4 与Thread同步机制的比较 9.2.5 Spring使用ThreadLocal解决线程安全问题 9.3 Spring对事务管理的支持 9.3.1 事务管理关键抽象 9.3.2 Spring的事务管理器实现类 9.3.3 事务同步管理器 9.3.4 事务传播行为 9.4 编程式的事务管理 9.5 使用XML配置声明式事务 9.5.1 一个将被实施事务增强的服务接口 9.5.2 使用原始的 TransactionProxyFactoryBean 9.5.3 基于tx/aop命名空间的配置 9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 BEA WebLogic 9.8 小结 第10章 Spring的事务管理难点剖析 10.1 DAO和事务管理的牵绊 10.1.1 JDBC访问数据库 10.1.2 Hibernate访问数据库 10.2 应用分层的迷惑 10.3 事务方法嵌套调用的迷茫 10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC数据连接泄漏 10.7.3 通过DataSourceUtils获取数据连接 10.7.4 通过DataSourceUtils获取数据连接 10.7.5 JdbcTemplate如何做到对连接泄漏的免疫 10.7.6 使用TransactionAwareDataSourceProxy 10.7.7 其他数据访问技术的等价类 10.8 小结 第11章 使用Spring JDBC访问数据库 11.1 使用Spring JDBC 11.1.1 JDBCTemplate小试牛刀 11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 NamedParameterJDBCTemplate 11.5.2 SimpleJDBCTemplate 11.6 以OO方式访问数据库 11.6.1 使用MappingSqlQuery查询数据 11.6.2 使用SqlUpdate更新数据 11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM技术 12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 在Spring配置myBatis 12.3.3 编写myBatis的DAO 12.5 DAO层设计 12.5.1 DAO基类的设计 12.5.2 查询接口方法的设计 12.5.3 分页查询接口设计 12.6 小结 第4篇 业务层及Web层技术 第13章 任务调度和异步执行器 13.1 任务调度概述 13.2 Quartz快速进阶 13.2.1 Quartz基础结构 13.2.2 使用SimpleTrigger 13.2.3 使用CronTrigger 13.2.4 使用Calendar 13.2.5 任务调度信息存储 13.3 在Spring中使用Quartz 13.3.1 创建JobDetail 13.3.2 创建Trigger 13.3.3 创建Scheduler 13.4 Spring中使用JDK Timer 13.4.1 Timer和TimerTask 13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的支持 13.5.1 了解JDK 5.0的Executor 13.5.2 Spring对Executor所提供的抽象 13.6 实际应用中的任务调度 13.6.1 如何产生任务 13.6.2 任务调度对应用程序集群的影响 13.6.3 任务调度云 13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML 14.1.2 XML的处理技术 14.2 XML处理利器:XStream 14.2.1 XStream概述 14.2.2 快速入门 14.2.3 使用XStream别名 14.2.4 XStream转换器 14.2.5 XStream注解 14.2.6 流化对象 14.2.7 持久化API 14.2.8 额外功能:处理JSON 14.3 其他常见O/X Mapping开源项目 14.3.1 JAXB 14.3.2 XMLBeans 14.3.3 Castor 14.3.4 JiBX 14.3.5 总结比较 14.4 与Spring OXM整合 14.4.1 Spring OXM概述 14.4.2 整合OXM实现者 14.4.3 如何在Spring中进行配置 14.4.4 Spring OXM 简单实例 14.5 小结 第15章 Spring MVC 15.1 Spring MVC概述 15.1.1 体系结构 15.1.2 配置DispatcherServlet 15.1.3 一个简单的实例 15.2 注解驱动的控制器 15.2.1 使用@RequestMapping映射请求 15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter<T> 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据绑定流程剖析 15.3.2 数据转换 15.3.3 数据格式化 15.3.4 数据校验 15.4 视图和视图解析器 15.4.1 认识视图 15.4.2 认识视图解析器 15.4.3 JSP和JSTL 15.4.4 模板视图 15.4.5 Excel 15.4.6 PDF 15.4.7 输出XML 15.4.8 输出JSON 15.4.9 使用XmlViewResolver 15.4.10 使用ResourceBundle ViewResolver 15.4.11 混合使用多种视图技术 15.5 本地化解析 15.5.1 本地化概述 15.5.2 使用CookieLocaleResolver 15.5.3 使用SessionLocaleResolver 15.5.4 使用LocaleChangeInterceptor 15.6 文件上传 15.6.1 配置MultipartResolver 15.6.2 编写控制器和文件上传表单页面 15.7 杂项 15.7.1 静态资源处理 15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2 JUnit 4快速进阶 16.2.1 JUnit 4概述 16.2.2 JUnit 4生命周期 16.2.3 使用JUnit 16.3 模拟利器Mockito 16.3.1 模拟测试概述 16.3.2 创建Mock对象 16.3.3 设定Mock对象的期望行为及返回值 16.3.4 验证交互行为 16.4 测试整合之王Unitils 16.4.1 Unitils概述 16.4.2 集成Spring 16.4.3 集成Hibernate 16.4.4 集成Dbunit 16.4.5 自定义扩展模块 16.5 使用Unitils测试DAO层 16.5.1 数据库测试的难点 16.5.2 扩展Dbunit用Excel准备数据 16.5.3 测试实战 16.6 使用unitils测试Service层 16.7 测试Web层 16.7.1 对LoginController进行单元测试 16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要功能流程描述 17.2 系统设计 17.2.1 技术框架选择 17.2.2 Web目录结构及类包结构规划 17.2.3 单元测试类包结构规划 17.2.4 系统的结构图 17.2.5 PO的类设计 17.2.6 持久层设计 17.2.7 服务层设计 17.2.8 Web层设计 17.2.9 数据库设计 17.3 开发前的准备 17.4 持久层开发 17.4.1 PO类 17.4.2 DAO基类 17.4.3 通过扩展基类所定义DAO类 17.4.4 DAO Bean的装配 17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配 17.7 对服务层进行测试 17.7.1 编写Service测试基类 17.7.2 编写ForumService测试用例 17.8 Web层开发 17.8.1 BaseController的基类 17.8.2 用户登录和注销 17.8.3 用户注册 17.8.4 论坛管理 17.8.5 论坛普通功能 17.8.6 分页显示论坛版块的主题帖子 17.8.7 web.xml配置 17.8.8 Spring MVC配置 17.9 对Web层进行测试 17.9.1 编写Web测试基类 17.9.2 编写ForumManageController测试用例 17.10 部署和运行应用 17.11 小结 以下内容详见本书配书光盘: 附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
此代码是随书光盘拷贝。 此版本是网上最详细的书签版本,也是最清晰的版本。 MFC Windows程序设计(第2版修订版) (Programming Windows with MFC, 2nd Edition) 基本信息 作者: (美)Jeff Prosise [作译者介绍] 译者: 北京博彦科技发展有限责任公司 出版社:清华大学出版社 ISBN:9787302150428 上架时间:2007-5-22 出版日期:2007 年5月 开本:16开 页码:1166 版次:1-1 内容简介   《mfc windows程序设计(第2版)》是对其极为经典的第1版的全面更新,本书不仅扩展了已被认为是权威的关于microsoft用于windows api的功能强大的c++类库的阐述,还新增了有关com、ole和activex的内容。本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。    本书涵盖了以下专题:    事件驱动程序设计和mpc的基础知识    文档/视图体系结构    位图、调色板和区域    多线程和线程同步    mfc与组件对象模型(com)    activex控件    《mfc windows程序设计(第2版)》见解深刻,并附带有辅助学习的资源——包括在随附的cd-rom中提供了大量代码实例。    要理解如何利用mfc库中提供的成千上万的预编译、预测试的代码的优点,本书——及其作者——将是您独一无二的选择。 作译者 本书提供作译者介绍   Jeff Prosise是一位作者、教员和讲师,他以Windows编程和教授别人如何进行Windows为生。作为一位在Windows程序设计、MFC和COM领域世界知名的权威,他还是《PC Magazinge》和《Microsoft Systems Journal》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windows和mfc基础  第1章 hello,mfc  第2章 在窗口中绘图  第3章 鼠标和键盘  第4章 菜单  第5章 mfc集合数  第6章 文件i/o和串行化  第7章 控件  第8章 对话框和属性表 第ⅱ部分 文档/视图体系结构  第9章 文档、视图和单文档界面  第10章 滚动视图、html视图以及其他视图类型  第11章 多文档和多视图  第12章 工具栏、状态栏和组合栏  第13章 打印和打印预览 第ⅲ部分 高级篇  第14章 计时器和空闲处理  第15章 位图、调色板以及区域 . 第16章 公用控件  第17章 线程和线程同步化 第ⅳ部分 com,ole和activex  第18章 mfc和组件对象模型  第19章 剪贴板和ole拖放  第20章 automation  第21章 activex控件 序言   像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与ProgrammingWindows相媲美的MFC编程书籍,但是却没有结果。于是我决定自己写一本这样的书。它正是您手中所拿到的这本书,也正是当初我在初学MFC时,希望拥有的那本书。.   正如您所知,MFC是用于Windows编程的Microsoft C++类库。本书并不是一本关于C++的书,而是一本关于使用MFC而不是Windows APl,进行32位Windows应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFC的WindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是令人气馁。我认为一旦您认真地学完这本书,然后再站在老练的Windows程序员的角度来回顾学习过程中的甜酸苦辣,您将同意我的观点。   本书分为4个部分。第1部分,介绍了Windows及MFC编程的主要原则,以一个示例程序"Hello,MFC"开始,然后逐一简要讲解菜单、控件、对话框以及其他用于组建应用程序的模块。第2部分,在第1部分的基础之上,对文档视图结构做详细讲解,特别是第9、10、11章,揭示了实现文档视图的神奇之处,不仅介绍了如何编写简单的文档视图程序,而且教您一些高级功能,如打印预览和拆分窗口视图。第3部分涵盖了一些Windows和MFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第4部分,您将了解到MFC如何包容COM、OLE和ActiveX,如何编写支持COM的组件及应用程序。在读完第21章之后,您将更加精通使用MFC进行Windows 32位编程的技术。您也将拥有丰富的源代码用于您的第一   第2版的新特点   读过本书第1版的朋友将会注意到第2版的两个相当明显的变化。首先,本版包括7个新章节,1章用于讲解MFC视图类,1章涵盖MFC集合类;1章介绍MFC文件I/0和串行化机制,4章讨论了MFC和COM的关系。MFC不是类似活动模板库(ATL)的通用COM框架,但是MFC使编写某些COM程序更容易,使编写ActiveX控件的过程更简单,而且它使编写自动化(Automation)服务器程序(使用COM技术来供脚本客户调用的程序)变成了二件轻而易举的事。..   第2版的主要变化是关于向导的知识。在第1版中并没有提到向导。在第2版中1-3章使用手写的示例程序,但到了第4章就使用AppWizard和ClassWizard来生成代码。这样做的原因是,我始终认为代码生成向导会影响MFC的学习,它只应由老练的程序员来使用。但我也逐渐认识到,实际上,有很多MFC程序员在使用MFC向导来做某些工作,如编写ActiveX控件,在此时不用向导是很不明智的。经过深思熟虑之后,我决定加上这些内容。   尽管这些新内容是关于向导的使用,然而它现在不是,以后也不会是一本仅仅介绍如何在向导中单击按钮的书。在介绍了一个像如何用ClassWizard编写消息句柄之类的基本技巧之后,我在给出代码时,将不再赘述这些内容。当然,。向导永远不能超越您的能力去做任何事,因此键人所有手写的代码是完全可行的。   在讲述MFC编程的书中使用向导的缺点是,向导生成的程序不适合发表。本书的第一版印刷了每个程序文件的代码。本版书没有这样做,而只是包括了“相关”的源代码文件,其他的都放在CD-ROM中,为什么?因为印刷这些代码会使本书增加一倍的厚度而没有相应增加内涵。其中一些代码是由Visual C++6.0的MFC向导产生的,甚至没有被编译(详细内容请参见第4章)。我并不为本书中向导生成的代码而得意,因为其中充斥着随意生成的空行、不连贯的注释和无用的函数。对那些以编写清晰易读的示例源代码为骄傲的作者来说,向导生成的东西是一剂苦药。   然而,向导代表了Windows编程的新法则,它们是你、我及所有人都必须习惯的重要事物。但令人遗憾的是,VisualC++开发小组没有给我们一个真正的向导,而只是一个冒充向导的玩具。在他们能够做到以前,我们得习惯现有的向导。   CD.ROM中的内容   本书随附的CD-ROM包括书中全部示例程序的源代码,它们都在Visual C十十6.0和MFC 6.0环境下编写、编译而成,并在Win32平台上测试通过。如果没有特别说明它们都与Windows 98、WindowsNT4.0及Windows 2000兼容,其中大部分也与Windows 95及WindowsNT 3.51兼容。   您可用CD—ROM的根目录下的安装程序来将CD-ROM中,的内容复制到硬盘里,也可只复制其中\Code目录中的代码。我们在此目录中为书中每章各建了一个子目录——Chap01、Chap02,依次类推。在这些子目录中存放示例程序。每个程序的源代码文件都有一个相应的发布版本的EXE文件,以及您可使用Visual C++的Open Workspace命令来打开的workspace(DSW)文件。   JeffProsise   1999年3月12日...   
 Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。   Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。   《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。 目录 第1篇 概述 第1章 Spring概述 1.1 认识Spring 1.2 关于SpringSource 1.3 Spring带给我们什么 1.4 Spring体系结构 1.5 Spring 3.0的新功能 1.5.1 核心API更新到Java 5. 1.5.2 Spring表达式语言 1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇 IoC和AOP 第3章 IoC容器概述 3.1 IoC概述 3.1.1 通过实例理解IoC的概念 3.1.2 IoC的类型 3.1.3 通过容器完成依赖关系的注入 3.2 相关Java基础知识 3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 BeanFactory中Bean的生命周期 3.5.2 ApplicationContext中Bean的生命周期 3.6 小结 第4章 在IoC容器中装配Bean 4.1 Spring配置概述 4.1.1 Spring容器高层视图 4.1.2 基于XML的配置 4.2 Bean基本配置 4.2.1 装配一个Bean 4.2.2 Bean的命名 4.3 依赖注入 4.3.1 属性注入 4.3.2 构造函数注入 4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法注入 4.5.1 lookup方法注入 4.5.2 方法替换 4.6 <bean>之间的关系 4.6.1 继承 4.6.2 依赖 4.6.3 引用 4.7 整合多个配置文件 4.8 Bean作用域 4.8.1 singleton作用域 4.8.2 prototype作用域 4.8.3 Web应用环境相关的Bean作用域 4.8.4 作用域依赖问题 4.9 FactoryBean 4.10 基于注解的配置 4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition 5.1.3 InstantiationStrategy 5.1.4 BeanWrapper 5.2 属性编辑器 5.2.1 JavaBean的编辑器 5.2.2 Spring默认属性编辑器 5.2.3 自定义属性编辑器 5.3 使用外部属性文件 5.3.1 使用外部属性文件 5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章 Spring AOP基础 6.1 AOP概述 6.1.1 AOP到底是什么 6.1.2 AOP术语 6.1.3 AOP的实现者 6.2 基础知识 6.2.1 带有横切逻辑的实例 6.2.2 JDK动态代理 6.2.3 CGLib动态代理 6.2.4 AOP联盟 6.2.5 代理知识小结 6.3 创建增强类 6.3.1 增强类型 6.3.2 前置增强 6.3.3 后置增强 6.3.4 环绕增强 6.3.5 异常抛出增强 6.3.6 引介增强 6.4 创建切面 6.4.1 切点类型 6.4.2 切面类型 6.4.3 静态普通方法名匹配切面 6.4.4 静态正则表达式方法匹配切面 6.4.5 动态切面 6.4.6 流程切面 6.4.7 复合切点切面 6.4.8 引介切面 6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 了解注解 7.2.2 一个简单的注解类 7.2.3 使用注解 7.2.4 访问注解 7.3 着手使用@AspectJ 7.3.1 使用前的准备 7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() 7.5.2 execution() 7.5.3 args()和@args() 7.5.4 within() 7.5.5 @within()和@target() 7.5.6 target()的this() 7.6 @AspectJ进阶 7.6.1 切点复合运算 7.6.2 命名切点 7.6.3 增强织入的顺序 7.6.4 访问连接点信息 7.6.5 绑定连接点方法入参 7.6.6 绑定代理对象 7.6.7 绑定类注解对象 7.6.8 绑定返回值 7.6.9 绑定抛出的异常 7.7 基于Schema配置切面 7.7.1 一个简单切面的配置 7.7.2 配置命名切点 7.7.3 各种增强类型的配置 7.7.4 绑定连接点信息 7.7.5 Advisor配置 7.8 混合切面类型 7.8.1 混合使用各种切面类型 7.8.2 各种切面类型总结 7.9 JVM Class文件字节码转换基础知识 7.9.1 java.lang.instrument包的工作原理 7.9.2 如何向JVM中注册转换器 7.9.3 使用JVM启动参数注册转换器的问题 7.10 使用LTW织入切面 7.10.1 Spring的LoadTimeWeaver 7.10.2 使用LTW织入一个切面 7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问 第8章 Spring对DAO的支持 8.1 Spring的DAO理念 8.2 统一的异常体系 8.2.1 Spring的DAO异常体系 8.2.2 JDBC的异常转换器 8.2.3 其他持久技术的异常转换器 8.3 统一数据访问模板 8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 9.1.2 数据并发的问题 9.1.3 数据库锁机制 9.1.4 事务隔离级别 9.1.5 JDBC对事务支持 9.2 ThreadLocal基础知识 9.2.1 ThreadLocal是什么 9.2.2 ThreadLocal的接口方法 9.2.3 一个TheadLocal实例 9.2.4 与Thread同步机制的比较 9.2.5 Spring使用ThreadLocal解决线程安全问题 9.3 Spring对事务管理的支持 9.3.1 事务管理关键抽象 9.3.2 Spring的事务管理器实现类 9.3.3 事务同步管理器 9.3.4 事务传播行为 9.4 编程式的事务管理 9.5 使用XML配置声明式事务 9.5.1 一个将被实施事务增强的服务接口 9.5.2 使用原始的 TransactionProxyFactoryBean 9.5.3 基于tx/aop命名空间的配置 9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 BEA WebLogic 9.8 小结 第10章 Spring的事务管理难点剖析 10.1 DAO和事务管理的牵绊 10.1.1 JDBC访问数据库 10.1.2 Hibernate访问数据库 10.2 应用分层的迷惑 10.3 事务方法嵌套调用的迷茫 10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC数据连接泄漏 10.7.3 通过DataSourceUtils获取数据连接 10.7.4 通过DataSourceUtils获取数据连接 10.7.5 JdbcTemplate如何做到对连接泄漏的免疫 10.7.6 使用TransactionAwareDataSourceProxy 10.7.7 其他数据访问技术的等价类 10.8 小结 第11章 使用Spring JDBC访问数据库 11.1 使用Spring JDBC 11.1.1 JDBCTemplate小试牛刀 11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 NamedParameterJDBCTemplate 11.5.2 SimpleJDBCTemplate 11.6 以OO方式访问数据库 11.6.1 使用MappingSqlQuery查询数据 11.6.2 使用SqlUpdate更新数据 11.6.3 使用StoredProcedure执行存储过程 11.6.4 SqlFunction类 11.7 小结 第12章 整合其他ORM框架 12.1 Spring整合ORM技术 12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 在Spring配置myBatis 12.3.3 编写myBatis的DAO 12.5 DAO层设计 12.5.1 DAO基类的设计 12.5.2 查询接口方法的设计 12.5.3 分页查询接口设计 12.6 小结 第4篇 业务层及Web层技术 第13章 任务调度和异步执行器 13.1 任务调度概述 13.2 Quartz快速进阶 13.2.1 Quartz基础结构 13.2.2 使用SimpleTrigger 13.2.3 使用CronTrigger 13.2.4 使用Calendar 13.2.5 任务调度信息存储 13.3 在Spring中使用Quartz 13.3.1 创建JobDetail 13.3.2 创建Trigger 13.3.3 创建Scheduler 13.4 Spring中使用JDK Timer 13.4.1 Timer和TimerTask 13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的支持 13.5.1 了解JDK 5.0的Executor 13.5.2 Spring对Executor所提供的抽象 13.6 实际应用中的任务调度 13.6.1 如何产生任务 13.6.2 任务调度对应用程序集群的影响 13.6.3 任务调度云 13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML 14.1.2 XML的处理技术 14.2 XML处理利器:XStream 14.2.1 XStream概述 14.2.2 快速入门 14.2.3 使用XStream别名 14.2.4 XStream转换器 14.2.5 XStream注解 14.2.6 流化对象 14.2.7 持久化API 14.2.8 额外功能:处理JSON 14.3 其他常见O/X Mapping开源项目 14.3.1 JAXB 14.3.2 XMLBeans 14.3.3 Castor 14.3.4 JiBX 14.3.5 总结比较 14.4 与Spring OXM整合 14.4.1 Spring OXM概述 14.4.2 整合OXM实现者 14.4.3 如何在Spring中进行配置 14.4.4 Spring OXM 简单实例 14.5 小结 第15章 Spring MVC 15.1 Spring MVC概述 15.1.1 体系结构 15.1.2 配置DispatcherServlet 15.1.3 一个简单的实例 15.2 注解驱动的控制器 15.2.1 使用@RequestMapping映射请求 15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter<T> 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据绑定流程剖析 15.3.2 数据转换 15.3.3 数据格式化 15.3.4 数据校验 15.4 视图和视图解析器 15.4.1 认识视图 15.4.2 认识视图解析器 15.4.3 JSP和JSTL 15.4.4 模板视图 15.4.5 Excel 15.4.6 PDF 15.4.7 输出XML 15.4.8 输出JSON 15.4.9 使用XmlViewResolver 15.4.10 使用ResourceBundle ViewResolver 15.4.11 混合使用多种视图技术 15.5 本地化解析 15.5.1 本地化概述 15.5.2 使用CookieLocaleResolver 15.5.3 使用SessionLocaleResolver 15.5.4 使用LocaleChangeInterceptor 15.6 文件上传 15.6.1 配置MultipartResolver 15.6.2 编写控制器和文件上传表单页面 15.7 杂项 15.7.1 静态资源处理 15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2 JUnit 4快速进阶 16.2.1 JUnit 4概述 16.2.2 JUnit 4生命周期 16.2.3 使用JUnit 16.3 模拟利器Mockito 16.3.1 模拟测试概述 16.3.2 创建Mock对象 16.3.3 设定Mock对象的期望行为及返回值 16.3.4 验证交互行为 16.4 测试整合之王Unitils 16.4.1 Unitils概述 16.4.2 集成Spring 16.4.3 集成Hibernate 16.4.4 集成Dbunit 16.4.5 自定义扩展模块 16.5 使用Unitils测试DAO层 16.5.1 数据库测试的难点 16.5.2 扩展Dbunit用Excel准备数据 16.5.3 测试实战 16.6 使用unitils测试Service层 16.7 测试Web层 16.7.1 对LoginController进行单元测试 16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要功能流程描述 17.2 系统设计 17.2.1 技术框架选择 17.2.2 Web目录结构及类包结构规划 17.2.3 单元测试类包结构规划 17.2.4 系统的结构图 17.2.5 PO的类设计 17.2.6 持久层设计 17.2.7 服务层设计 17.2.8 Web层设计 17.2.9 数据库设计 17.3 开发前的准备 17.4 持久层开发 17.4.1 PO类 17.4.2 DAO基类 17.4.3 通过扩展基类所定义DAO类 17.4.4 DAO Bean的装配 17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配 17.7 对服务层进行测试 17.7.1 编写Service测试基类 17.7.2 编写ForumService测试用例 17.8 Web层开发 17.8.1 BaseController的基类 17.8.2 用户登录和注销 17.8.3 用户注册 17.8.4 论坛管理 17.8.5 论坛普通功能 17.8.6 分页显示论坛版块的主题帖子 17.8.7 web.xml配置 17.8.8 Spring MVC配置 17.9 对Web层进行测试 17.9.1 编写Web测试基类 17.9.2 编写ForumManageController测试用例 17.10 部署和运行应用 17.11 小结 以下内容详见本书配书光盘: 附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
(5)\\python全栈day41-50\\python全栈s3 day41;目录中文件数:10个 ├─(1) 01 python s3 day41 JS的历史以及引入方式.avi ├─(2) 02 python s3 day41 JS的基础规范.avi ├─(3) 03 python s3 day41 JS的基本数据类型.avi ├─(4) 04 python s3 day41 JS的运算符.avi ├─(5) 05 python s3 day41 JS的控制语句与循环.avi ├─(6) 06 python s3 day41 JS的循环与异常.avi ├─(7) 07 python s3 day41 JS的字符串对象.avi ├─(8) 08 python s3 day41 JS的数组对象.avi ├─(9) 09 python s3 day41 JS的函数对象.avi ├─(10) day41.rar (6)\\python全栈day41-50\\python全栈s3 day42;目录中文件数:6个 ├─(11) 01 python s3 day42 JS的函数作用域.avi ├─(12) 02 python s3 day42 JS的window对象之定时器.avi ├─(13) 03 python s3 day42 JS的history对象和location对象.avi ├─(14) 04 python s3 day42 JS的DOM节点.avi ├─(15) 05 python s3 day42 JS的DOM节点.avi ├─(16) day42.rar (7)\\python全栈day41-50\\python全栈s3 day43;目录中文件数:10个 ├─(17) 01 python s3 day43 上节知识回顾.avi ├─(18) 02 python s3 day43 js之onsubmit事件与组织事件外延.avi ├─(19) 03 python s3 day43 DOM节点的增删改查与属性设值.avi ├─(20) 04 python s3 day43 正反选练习.avi ├─(21) 05 python s3 day43 js练习之二级联动.avi ├─(22) 06 python s3 day43 jquery以及jquery对象介绍.avi ├─(23) 07 python s3 day43 jquery选择器.avi ├─(24) 08 python s3 day43 jquery的查找筛选器.avi ├─(25) 09 python s3 day43 jquery练习之左侧菜单.avi ├─(26) day43课件代码.rar (8)\\python全栈day41-50\\python全栈s3 day44;目录中文件数:10个 ├─(27) 01 python s3 day44 jquery属性操作之html,text,val方法.avi ├─(28) 02 python s3 day44 jquery循环方法和attr,prop方法.avi ├─(29) 03 python s3 day44 jquery模态对话框与clone的应用.avi ├─(30) 04 python s3 day44 jqueryCSS操作之offsets,position以及scrolltop.avi ├─(31) 05 python s3 day44 jquery事件绑定与事件委托.avi ├─(32) 06 python s3 day44 jquery动画效果.avi ├─(33) 07 python s3 day44 jquery扩展与插件.avi ├─(34) 08 python s3 day44 jquery扩展补充.avi ├─(35) 09 python s3 day44 本周作业轮播图以及思路.avi ├─(36) day44课件代码.rar (9)\\python全栈day41-50\\python全栈s3 day45;目录中文件数:3个 ├─(37) day45.rar ├─(38) 轮播图片css部分.avi ├─(39) 轮播图片js部分.avi (10)\\python全栈day41-50\\python全栈s3 day46;目录中文件数:8个 ├─(40) 01 python s3 day46 数据库与dbms的概念.avi ├─(41) 02 python s3 day46 sql规范.avi ├─(42) 03 python s3 day46 数据库操作DDL.avi ├─(43) 04 python s3 day46 mysql的数据类型.a
第1章 串行通信原理与设计 1 1.1 串行通信基本概念 1 1.1.1 串行通信特点 1 1.1.2 串行通信传输方式 2 1.1.3 数据纠错与检错 2 1.1.4 传输速率与距离 3 1.2 串行传输协议 4 1.2.1 异步传输协议 4 1.2.2 面向字符的同步传输协议 5 1.2.3 面向比特的同步传输协议 7 1.3 串行接口标准 9 1.3.1 EIA RS-232C标准 9 1.3.2 RS-423A、RS-422A和RS-485标准 12 1.3.3 USB接口标准 14 1.4 串口硬件设计 15 1.4.1 串口应用设计流程 15 1.4.2 Windows下的串口资源 15 1.4.3 DCE与DTE设备的识别方法 16 1.4.4 握手处理 16 1.4.5 RS-232C与RS-485接口转换 17 1.4.6 接地及隔离技术 17 1.5 小结 20 第2章 使用MSComm控件编程 21 2.1 MSComm控件属性及事件 21 2.1.1 MSComm最常用的属性 21 2.1.2 与输入操作有关的属性 23 2.1.3 与输出操作有关的属性 24 2.1.4 与传输控制有关的属性 25 2.1.5 MSComm控件的事件 26 2.2 对不同类型数据的处理方法 26 2.2.1 使用MSComm控件发送与接收字符串 27 2.2.2 使用MSComm控件发送与接收二进制数据 27 2.3 MSComm错误处理方法 28 2.3.1 关于发送缓冲区 28 2.3.2 关于接收缓冲区 29 2.3.3 接收数据的实际处理方法 29 2.4 控件编程 30 2.4.1 加载及使用控件 31 2.4.2 初始化及打开串口 36 2.4.3 串口事件处理 37 2.4.4 关闭串口 38 2.4.5 关于协议的问题 38 2.5 通信编程实例 38 2.5.1 程序功能 38 2.5.2 界面设计 38 2.5.3 变量声明 40 2.5.4 创建串口 41 2.5.5 设置串口 42 2.5.6 打开串口 43 2.5.7 关闭串口 43 2.5.8 接收数据处理 44 2.5.9 实际传输文件截图 45 2.6 程序发布问题 45 2.7 小结 45 第3章 使用WinAPI串口编程 47 3.1 API串口编程概述 47 3.2 采用同步查询方式的编程方法 47 3.2.1 创建串口 48 3.2.2 关闭串口 53 3.2.3 发送数据 53 3.2.4 接收数据 53 3.2.5 定时接收数据的方法 54 3.3 采用重叠I/O方式的编程方法 55 3.3.1 定义全局变量 55 3.3.2 创建串口 55 3.3.3 发出读写操作 56 3.3.4 读写线程函数的建立 57 3.3.5 关闭串口 61 3.4 采用事件驱动方式的编程方法 61 3.4.1 定义全局变量 61 3.4.2 打开串口及开启事件线程 62 3.4.3 发送数据 64 3.4.4 自定义消息函数读取数据 65 3.4.5 关闭串口及关闭事件线程 67 3.5 编程实例 67 3.5.1 程序功能 67 3.5.2 界面设计 68 3.5.3 变量声明 69 3.5.4 设置串口 70 3.5.5 打开串口 72 3.5.6 关闭串口 73 3.5.7 发送字符 73 3.5.8 命令的有效性处理 74 3.5.9 实际字符传送截图 75 3.6 小结 76 第4章 多线程编程 77 4.1 多线程基本概述 77 4.1.1 线程与进程 77 4.1.2 何时使用多线程 78 4.1.3 多线程串口的应用 78 4.2 线程的操作 78 4.2.1 创建线程 78 4.2.2 终止线程 80 4.2.3 关于内存泄漏 81 4.3 线程间通信 81 4.3.1 使用全局变量 81 4.3.2 使用自定义消息 81 4.4 线程同步 82 4.4.1 使用临界区(Critical Section) 82 4.4.2 使用互斥对象(Mutex) 83 4.4.3 使用信号量(Semaphore) 84 4.4.4 使用事件(Event) 84 4.4.5 各种方法的比较 85 4.5 多线程串口程序设计 85 4.5.1 多线程的应用框架 85 4.5.2 相关的声明 86 4.5.3 创建线程 87 4.5.4 编写线程函数 87 4.5.5 编写消息响应函数 88 4.5.6 线程的结束 88 4.6 小结 89 第5章 TAPI编程 91 5.1 关于TAPI 91 5.1.1 什么是TAPI 91 5.1.2 Windows中的TAPI系统架构 91 5.1.3 Windows中的TAPI电话服务类型 92 5.2 TAPI 2.X介绍 93 5.2.1 基本概念 93 5.2.2 TAPI应用程序结构 93 5.2.3 常用函数介绍 94 5.3 CTapi14类介绍 98 5.3.1 变量/函数声明 98 5.3.2 初始化操作 100 5.3.3 创建函数 100 5.3.4 呼叫函数 101 5.3.5 回调函数处理方式 103 5.3.6 与回调相关的函数 103 5.3.7 处理呼叫状态的函数 105 5.3.8 处理连接状态的函数 108 5.3.9 挂机函数 109 5.3.10 通信状态显示函数 110 5.3.11 延时函数 111 5.4 使用CTapi14类的编程实例 111 5.4.1 程序功能 111 5.4.2 界面设计 111 5.4.3 CTapi14类的使用方法 112 5.4.4 变量/函数声明 113 5.4.5 电话操作函数 114 5.4.6 消息处理函数 115 5.4.7 显示信息函数 117 5.4.8 实际使用截图 117 5.5 小结 118 第6章 计算机与单片机通信 119 6.1 单片机的串口原理 119 6.1.1 串口结构 119 6.1.2 串口寄存器及中断 120 6.2 串行通信硬件设计 121 6.2.1 常用接口芯片介绍 121 6.2.2 接口电路 121 6.3 串行口通信参数设置 122 6.3.1 波特率的设置 122 6.3.2 奇偶校验位的使用方法 123 6.3.3 通信协议约定 123 6.4 单片机的串口编程方法 124 6.4.1 功能描述 124 6.4.2 通信协议 124 6.4.3 初始化串口及寄存器 124 6.4.4 编写中断服务程序 125 6.5 计算机界面设计 128 6.5.1 功能描述 128 6.5.2 界面设计 128 6.6 计算机端程序设计 129 6.6.1 头文件引用及变量声明 129 6.6.2 初始化控件 131 6.6.3 向单片机发出请求 132 6.6.4 在控件事件中接收数据 133 6.6.5 超时定时器的编程 140 6.6.6 关闭串口 141 6.7 小结 142 第7章 计算机与PLC通信 143 7.1 PLC的串口通信 143 7.1.1 PLC的通信方式 143 7.1.2 计算机与PLC通信流程 144 7.1.3 与通信相关的寄存器 144 7.1.4 与通信相关的指令 148 7.1.5 通信中断事件 149 7.1.6 通信中断指令 150 7.1.7 硬件连线及设置 151 7.1.8 PC/PPI电缆切换时间的影响 151 7.2 PLC通信编程 152 7.2.1 功能描述 152 7.2.2 通信协议 152 7.2.3 程序结构及变量说明 153 7.2.4 主程序 154 7.2.5 初始化 154 7.2.6 发送与接收处理 155 7.3 计算机界面设计 158 7.3.1 主界面设计 158 7.3.2 设置对话框设计 159 7.4 计算机程序设计 160 7.4.1 功能描述 160 7.4.2 变量/函数声明 160 7.4.3 初始化代码 161 7.4.4 参数配置 162 7.4.5 读串口操作 166 7.4.6 写串口操作 169 7.4.7 接收数据处理 172 7.4.8 命令有效性处理 178 7.4.9 实际传输数据截图 179 7.5 小结 180 第8章 计算机与Modem的通信 181 8.1 Modem的工作原理 181 8.1.1 Modem的基本工作原理 181 8.1.2 Modem的功能介绍 182 8.1.3 内置Modem与外置Modem 182 8.2 Modem的通信标准 183 8.2.1 调制协议 183 8.2.2 差错控制协议 184 8.2.3 数据压缩协议 184 8.2.4 文件传输协议 184 8.3 Modem的AT命令 185 8.3.1 Modem工作状态切换 185 8.3.2 AT命令串简介 187 8.3.3 常用基本AT命令分类 187 8.3.4 呼叫与应答相关命令 187 8.3.5 状态切换命令 190 8.3.6 握手相关命令 191 8.3.7 基本AT命令的简单测试方法 192 8.3.8 常用寄存器命令及寄存器含义 194 8.3.9 使用PSTN进行串行通信的工作流程 195 8.4 使用Modem远程传输文件程序设计 196 8.4.1 功能描述 196 8.4.2 通信流程 197 8.4.3 XModem通信协议 198 8.4.4 界面设计 199 8.4.5 变量声明 200 8.4.6 初始化 201 8.4.7 串口配置与操作 202 8.4.8 发送文件 204 8.4.9 接收文件 205 8.4.10 OnComm事件函数 206 8.4.11 建立超时定时器 228 8.5 小结 230 第9章 两台计算机间通信 231 9.1 通信方式介绍 231 9.2 通信协议 232 9.2.1 通信流程 233 9.2.2 数据包格式 233 9.3 通信实现思路 234 9.3.1 功能描述 234 9.3.2 通信事件的处理方法 235 9.3.3 各种操作状态的含义 235 9.4 界面设计 237 9.4.1 主界面设计 237 9.4.2 设置对话框设计 238 9.5 程序设计 239 9.5.1 变量/函数声明 239 9.5.2 初始化代码 241 9.5.3 参数配置 242 9.5.4 发送文件 246 9.5.5 事件消息响应函数 248 9.5.6 命令的有效性处理 267 9.5.7 自定义功能函数 269 9.5.8 程序测试 274 9.6 小结 274 第10章 软件传真机 275 10.1 传真的基本知识 275 10.1.1 工作原理 275 10.1.2 传真机的分类 276 10.1.3 传真机通信规程 277 10.2 关于传真精灵SmartFax 278 10.2.1 主要功能 278 10.2.2 发送传真函数 278 10.2.3 接收传真函数 281 10.2.4 其他功能函数 283 10.2.5 如何使用传真精灵 284 10.3 软件传真机程序设计 285 10.3.1 功能介绍 285 10.3.2 界面设计 286 10.3.3 关于头文件的引用 289 10.3.4 变量/函数声明 289 10.3.5 初始化操作 291 10.3.6 程序流程分析 293 10.3.7 关于TAPI操作的函数 296 10.3.8 发送传真相关函数 304 10.3.9 接收传真相关函数 306 10.3.10 传真消息响应函数OnSmartFax() 309 10.3.11 传真参数相关操作函数 317 10.3.12 其他功能函数 322 10.4 小结 324 第11章 计算机与射频卡通信 325 11.1 射频卡简介 325 11.1.1 射频卡工作原理 325 11.1.2 射频卡的分类 326 11.1.3 射频卡的优点 327 11.1.4 射频卡的应用 327 11.2 射频卡的应用框架 327 11.3 MIFARE卡介绍 328 11.3.1 TYPE A 与TYPE B 328 11.3.2 TYPE A 卡的初始化与防冲突 329 11.3.3 MIFARE 1型卡的存储结构 333 11.3.4 MIFARE 1型卡存取控制与数据区的关系 334 11.4 射频卡模块介绍 336 11.4.1 MCM200/MCM500概述 336 11.4.2 MCM200/MCM500接口简介 337 11.4.3 MCM200/MCM500读写操作过程 338 11.4.4 ZLG500A读写模块介绍 339 11.5 射频卡应用的设计 340 11.5.1 读写器成品的设计方法 340 11.5.2 使用射频卡模块的设计方法 340 11.6 小结 340 第12章 组态王的应用 341 12.1 组态王参数设置 341 12.1.1 RS-485板卡的使用方法 341 12.1.2 串口通信方式 342 12.1.3 串口参数设置 346 12.2 组态王通信协议 346 12.2.1 寄存器定义 346 12.2.2 读命令格式 347 12.2.3 写命令格式 347 12.2.4 命令格式中的符号说明 348 12.2.5 命令举例说明 349 12.3 组态王端的程序设计 350 12.3.1 程序功能 350 12.3.2 界面设计 350 12.3.3 KingComClient设备的设置 352 12.3.4 变量定义 352 12.3.5 命令语言 353 12.4 计算机端的程序设计 353 12.4.1 功能描述 353 12.4.2 界面设计 354 12.4.3 变量/函数声明 355 12.4.4 初始化代码 356 12.4.5 串口配置与操作 357 12.4.6 串口事件响应函数 361 12.4.7 自定义功能函数 368 12.4.8 模拟数值的产生 372 12.4.9 实际通信截图 372 12.5 小结 374 第13章 云台及镜头控制系统 375 13.1 云台及镜头的应用概况 375 13.1.1 数字监控系统概述 375 13.1.2 监控系统组成 375 13.2 如何控制云台与镜头 376 13.2.1 云台及镜头的设备简介 376 13.2.2 云台及镜头的控制原理 377 13.2.3 解码器概述 377 13.2.4 常用通信协议 377 13.3 串口控制云台和镜头程序设计 378 13.3.1 硬件接线说明 378 13.3.2 通信协议介绍 379 13.3.3 程序功能 380 13.3.4 界面设计 380 13.3.5 变量/函数声明 383 13.3.6 初始化操作 386 13.3.7 按下与弹起控制的实现方法 388 13.3.8 串口操作 407 13.3.9 发送数据 408 13.3.10 程序测试截图 417 13.4 小结 417 附录 串口调试 419

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值