DRP培训日志

2008年12月24日(第一天),DRP业务流程

1. Web项目开发的一般流程

a) 需求确定 b) 需求分析 i. 架构分析和设计 ii. 业务逻辑分析和设计 iii. 界面设计 c) 开发环境搭建 d) 开发和测试 e) 文档编写 2. 项目简介

a) 项目名称:DRP(分销资源计划)

b) 项目简介:本系统为一家跨国医药企业开发,从需求调研、需求分析、系统设计、

编码、单元测试、集成测试和子系统测试7人开发了半年多,本系统主要包括如下模块,分销商库存管理、分消费管理、结帐管理、付款结算管理、统计报表管理、基础数据管理和系统管理,本系统主要对企业的物流和资金流进行全面的管理和控制,从而缩短企业的供应链,为企业节省成本,为管理层提供全面的信息流。 c) 职 务:java软件工程师

d) 职 责:负责分销库存管理的系统设计、编码和单元测试,分销库存管理主要是

物流的管理,主要功能是对物料的调拨和纯销情况进行审核和监控,实时了解物料的出入库情况和库存结余情况 并在每个会计期间内对物料进行盘盈和盘亏处理,来调整库存达到帐实相符,从而更精确的监控分销商的库存情况,提供真实准确的决策信息。

e) 使用技术:jsp/struts/spring/hibernate/如意报表/oracle/linux 3. 分销库存管理业务流程

a) 本模块主要是物流方面的问题处理。在整个系统中,它归结为库存管理。每个分销

商都有一个期初库存。整个系统启用后,主要就是物料(药品)的出入库、库存调整过程。后者的操作步骤为:商务主管收集流向单(含出库、入库),数据录入员录入流向单数据,商务主管审核(如有数量差异,可以修改调整项数据),商务经理审核确认(如果有问题,驳回,正确的话就直接冲减库存)。 b) 另一条线是项目会计抽查流向单和系统中的数据是否吻合,对抽查过的单据添加抽

查标记(如果有问题,会通过其他手段(如电话、邮件等)通知商务经理)。 c) 对分销商定期报上的库存数量(该数量应该是商务代表核实过的)与系统中数据对

比,如果有差异,作调库处理(盘盈和盘亏)。目的是使账面数量和分销商的实际库存一致(帐实相符)。该调整由商务主管确认,只能调整当前库存。

4. VAT(发票),TT(电子转帐)

5. CRUD(Create、Read、Update、Delete)

6. 了解报表工具:如意报表、用友华表,Jasper Report

7. 搭建开发环境

a) 启动Oracle进入sqlplus,以system用户登录,执行如下命令 i. @ D:\share\01-DRP\sql\drp_oracle.sql b) Oracle常用命令 i. select table_name from user_tables; ii. select view_name from user_views; iii. select trigger_name from user_triggers; iv. select sequence_name from user_sequences; v. run、/、r执行当前缓存区中的命令 vi. L(list)显示当前缓冲区中的命令 vii. show user 显示当前连接用户 viii. select name from v$database; ix. set linesize 400 输出一行字符串的个数(缺省为80)\ x. alter user xxxxx account unlock c) 采用MyEclipse建立drp项目

d) 将demo下的所有文件拷贝到webroot下 e) 将Oracle的jdbc驱动拷贝到WEB-INF/lib下

2008年12月25日(第二天),用户维护

1. 实体类通常来源于现实世界中概念(通常是名词),实体类通常和关系型数据库中的表

对应,实体类中的实例通常对应表中的一条记录,实体类中的属性对应表中的字段,实体类是有OID,通常对应表中的主键

2. 了解类的职责划分(解耦合),高内聚、低耦合 3. 单例模式的上要素(GoF)

a) 私有的静态的成员变量 b) 私有的构造方法

c) 公共的静态的入口点方法

4. 单例模式的适用场景:类中没有可以修改的成员变量(这个类没有状态)如果存在可

以修改的成员变量会产线程安全问题,不建议使用 5. PreparedStatement

a) 会尽可能的提高性能

b) 提高安全性(防止SQL Injection,后期会讲到) 6. 了解js文件如何引入

7. 了解javascript的基本验证 8. 了解javascript中with的使用

9. 注意:jsp中字符集的处理,采用request.setCharacterEncoding(

采用filter技术解决

10. 一个完善的系统需要详细的日志记录

11. 建议类似User这样的类覆写toString方法,便于输出 12. 了解Ajax

a) 了解异步通信和同步通信的概念

b) 注意,如果需要提起多个请求,需要创建多个XMLHttpRequest对象 c) 了解XMLHttpRequest对象的创建过程

d) 了解XMLHttpRequest对象中open、onreadystatechange、readystate、responseText、

status属性和方法的含义

e) 使用Ajax技术需要清除缓存,否则容易产生莫名其妙的错误,具体有两种方法: i. 第一种,采用URL后跟上时间戳来防止浏览器缓存,如:

user_validate.jsp?userId=

13. 用户代码是否重复采用Ajax验证流程

a) 创建Ajax引擎对象XMLHttpReqest

b) 调用open方法与Ajax引擎建立连接,并告诉Ajax引擎我们的请求方式为get,请

求url及采用异步方式

c) 告诉Ajax引擎处理完成后,如何把结果反馈给我们,我们通常指定一个方法句柄,

那么Ajax就会调用我们指定的方法,从而就可以得到Ajax引擎返回的数据(这种方式一般称为回调机制)

d) 最后调用send方法把我们步骤b和c设置的参数发送给Ajax引擎(也就是真正的

交给Ajax引擎去处理)

15. 作业,完成会计核算期间的维护,主要要求:

a) 界面约束 i. 添加界面

1. 核算年,核算月必须为数字; 2. 核算年,核算月必须保持唯一(添加时必须判断数据库中是否存在重复的

核算年+核算月,采用Ajax技术实现(建议采用servlet技术进行判断); 3. 开始日期必须小于等于结束日期; ii. 修改界面

1. 核算年,核算月不允许修改; 2. 开始日期必须小于等于结束日期;

iii. 查询界面

1. 点击会计核算期间维护全部查询出来,可以通过分页进行每页的查询;

b) 其他 i. 以上开发顺序为:先开发

查询

1. Basedata\fiscal_year_period_maint.html 主维护界面

2. Basedata\ fiscal_year_period_add.html 添加会计核算期间界面 3. Basedata\ fiscal_year_period_modify.html 修改会计核算期间界面

iii. Javabean放到com.bjsxt.drp.basedata包下(这个包需要大家新建) iv. 采用

2008年12月26日(第三天),用户维护

1. 2. 3. 4.

掌握PageModel的封装

html元素中name或id属性值,不能与javascript中的函数名称一致 掌握request.getParameterValues()的用法 filter基本原理

5. Filter技术在servlet2.3规范中加入的,大部分web server都支持 6. Filter和AOP(Aspect Oriented Programming)面向切面编程

7. 实现Filter需要,需要实现javax.servlet.Filter接口,还要在web.xml文件中进行配置,

8. 异常

a) 编程式异常(手动处理的异常) b) 声明式异常(自动处理的异常)

9.

了解运行时异常(RuntimeException)和一般异常(Exception)的区别,运行时异常也

叫非受控异常(unchecked)而一般异常也叫受控异常(checked) 10. 转发和重定向的区别

a) 转发(只能在同一个web应用中使用,可以共享request范围内的数据),如图:

b) 重定向(可以重定向到任意URL,不能共享request范围内的数据),如图:

11. Session默认超时时间为30分钟,见TOMCAT_HOME/conf/web.xml文件

12. 手动在我们的项目中修改session的超时时间,在webroot/web-inf/web.xml中,单位为:

14. 怎样配置web项目目录中的文件是否显示,参见TOMCAT_HOME/conf/web.xml中的配

置,如:

15. 了解Sql Injection

作业:完成修改密码功能,为了使用户具有更好的体验,判断原密码和系统登录密码采用Ajax技术实现(建议采用servlet进行判断)

2008年12月27日(第四天),分销商维护

1. 树的几种设计方式

a) 不带冗余字段,id,pid

b) 带冗余字段,id,pid,isleaf,childrencount c) 采用固定的字符串,[1**********] i. 00,所有分销商 ii. 01,华北区 iii. 001,北京市 iv. 0001,北京医药股份有限公司

2. 掌握分销商树的读取,参见:ClientTreeReader.java 3. 了解

生成树的基本原理

4. 为什么建立ClientLevel这个类,主要是为了实现对象模型的细粒度划分,便于复用,

便于理解对象的概念,通常对象模型是细粒度的,关系模型是粗粒度的(提高存储和检索的效率) 5. 需要思考的问题

a) 分销商根节点不能删除,考虑将删除按钮隐藏 b) 通过一条sql语句将区域和分销商按id查询上来 6. 了解内连接,左连接和右连接 7. 作业

a) 完成分销商修改页面中下拉列表的填充和定位 b) 完成分销商详细信息页面

2008年12月29日(第五天),分销商维护

1. 掌握分销商修改页面中下拉列表的填充和定位

2. 注意事务的概念,事务可以保证多个操作的原子性,要么全部成功,要么全部失败,事

务有四个特征ACID(简要了解即可) a) 原子性(Atomicity),事务中包括的操作要么做,要么都不做 b) 一致性(Consistency),指数据必须从一个状态变成另一个状态,不允许产生不一

c) 隔离性(Isolation),指一个事务执行不能其他事务干扰 d) 持续性(Durability),指一个事务一旦提交,它对数据的修改将变成永久性的 3. Servlet是单实例多线程的,注意线程安全问题

如果标签中的值大于等于0,表示Tomcat启动的时候初始化Servlet(值越小执行的优先级越高),如果小于0,只有在第一次访问的时候才初始化Servlet(这也是它的默认配置)

5. 了解树的递归删除

6. 作业:为流向单开发做准备

a) 完成供方分销商选择框的开发,实现ClientManager类中的findAllClient()方法 b) 完成需方客户选择框的开发,实现ClientManager类中的findAllAimClient()方法

2008年12月30日(第六天),物料维护

1. 接口和抽象类的区别?

a) 接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强

大的可接插性

b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公

共的代码移植到抽象类中

c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程) 2. 类之间的关系

a) 一般化关系 i. 类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系 b) 关联关系 i. 类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中

使用实例变量体现

c) 聚合关系 i. 是关联关系的一种,是较强的关联关系,是整体和部分的关系,如:汽车和轮

3. 4.

5.

6.

胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在java语言中使用实例变量体现

d) 合成关系 i. 是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分

对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在java语言中使用实例变量体现

e) 依赖关系 i. 依赖关系是比关联关系弱的关系,在java语言中体现为返回值,参数,局部

变量和静态方法调用

is-a、is-like-a、has-a 什么是设计模式?

a) 设计模式可以重复利用的解决方案。 b) 1995年,Gof(“四人帮”)提出 设计模式的分类 a) 创建型模式 b) 结构型模式 c) 行为型模式

标准的工厂方法模式,属于创建型模式(重点理解),示意图:

优点:实现了OCP(开闭原则)

缺点:只能创建单一产品系列(应用场景) 适用场景:单系列产品的创建

7. 工厂模式隐藏了产品的创建细节,对于上层类的调用是透明的 8. 软件的设计原则

a) 开闭原则(OCP) i. 对扩展开放,对修改关闭 b) 里氏代换原则(LSP) i. 任何类出现的地方,子类一定可以出现(is-a) c) 依赖倒转原则(DIP) i. 尽量依赖与抽象,而不要依赖与具体 d) 接口隔离原则(ISP) i. 尽量小的单独的接口,而不要提供大的接口,是通信尽可能窄 e) 合成复用原则(CARP)

i. 尽量采用合成和聚合的方式达到复用,而不要使用继承达到复用 f) 迪米特法则 i. 一个软件实体尽可能少的与其他实体发生作用

9. 原则一般都是起指导性作用的,具体要结合实际情况使用,在OO设计中一般都会有一定的折中,最终应该取得一个平衡点

10. Dao(Data Access Object)数据访问对象,属于J2EE设计模式。属于GoF中策略模式

的特例,用一个Dao接口隐藏了持久化操作的细节,这样使用这个模式的业务对象,无需了解底层的数据库持久化知识了。区分“业务逻辑”和“持久化逻辑”通常是有好处的,业务逻辑通常关心的是应用程序的核心流程和业务规则,持久化逻辑关注的是如何访问和操作持久化数据。换句话说:把业务逻辑和规则放在一边,与持久化相关的问题放在一边。

11. Dao模式的主要意图:隐藏数据访问细节

12. 物料维护使用的工厂方法模式(重点理解),示意图

13. ItemManager与ItemDao工厂的关系

14. 添加物料时序图

15. 了解Properties文件的读取

16. 了解Class.forName()用法

17. 了解我们可以通过反射机制可以灵活的更换实现类,可以弱化对象之间的依赖关系(解

偶),前提条件必须遵循面向抽象编程,而不要面向具体编程,在开发过程中区分出哪些是变化的(封装变化),哪些是不变的,不变的我们抽取成框架,变化的可以推迟到配置文件中来适应变化 18. 类的加载过程

19. 如何生成Class对象

20. Java类加载器原理(双亲委派机制)

21.

Tomcat类加载器

23. 异常的几种处理方式

a) 根据每种业务语义创建不同的异常,如:UserNotFoundException,… b) 每层抛出相应的异常,如:DaoException,SerivceException,….. c) 每个模块抛出一种异常,如:SysMgrException,….. d) 只抛出一种异常,如:AppException

e) 错误码可以做到异常细粒度划分,采用错误码可以减少异常类的建立 i. 参见:java.sql.SQLException

24. 了解声明式异常的配置方式,参见web.xml配置文件

25. 了解通用错误处理页面的声明方式,注意此页中必须加入:

isErrorPage=

26. 了解可以把业务逻辑对象放到ServletContext中来解决web层和业务逻辑层之间的耦

合,可以使用Servlet技术在web server启动的时候完成,通过这种方式,可以使我们的Manager类的职责更加清晰,Manager类只负责CRUD的操作,对Dao对象的创建将不关心,而整个Manager与Dao对象的组装过程,我们放到了Servlet中,使整体的类职责更加分明

27. 作业:根据id查询物料sql的写法

2008年12月31(第七天),物料维护

1. 了解sql的嵌套

2. Tomcat解决get提交乱码问题,需要在TOMCAT_HOEM/conf/server.xml文件中进行配

3. http协议:

1. http协议是基于请求响应模式的协议,客户端发送一个请求,服务器端返回该请求

的响应。http协议是建立在tcp/ip为基础的高层协议,http协议第一个版本是0.9,后来到了1.0,现在广泛使用的是http1.1 2. http请求(request)

a) 请求方法/URI/版本 b) 请求头 c) 请求正文,(请求头和请求正文之间是一个空行(回车换行)),这个非常重要,

它表示请求头已经结束,接下来是请求正文

3. http响应 (response)

a) 协议/状态码/描述

b) 响应头

c) 响应正文(响应头和响应正文之间是一个空行(回车换行))

放到了消息头中,Tomcat5.x对post和get提交处理方式不同,所以get提交需要配置Tomcat字符集

7. 了解sesisonid的生成过程,sessionid是由服务器端生成的唯一标识,在第一次生成后

会返回给浏览器,以后每次请求必须携带sesisonid,这样客户端可以正确的找到相应的

session(http协议是无状态的) 8. 代理模式

代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。 代理分类 a) 静态代理

b) 动态代理,JDK动态代理只能对实现了接口的类进行代理,采用JDK动态代理必

须实现InvocationHandler接口,采用Proxy类创建相应的代理类,参见LogHandler.java,采用JDK动态代理可以对目标类(如:UserDaoImpl)方法进行增强

了解html中和web.xml中的”/”的含义 a) Html中指向

b) Web.xml中指向

注意,上传需要在html表单中设置为method=”post”,需要在中加入属性ENCTYPE=”multipart/form-data”, multipart/form-data是多段数据提交格式,也就是说提交的数据不完全是字符文本数据,还包括其他的文件数据,使用这个属性后将不能使用request.getParameter()来取得表单数据,必须以其他的方式来取得表单数据 了解上传组件apache commons fileupload

9.

10.

11.

12. 15. 作业

a) 物料维护中的删除和修改 b) 查看详细信息

2009年01月04日(第八天),流向单维护

1. 了解主从表或主细表 2. 流向单DAO层设计:

3. 抽象工厂模式示意图:

优点:对产品的增加支持OCP原则

缺点:对产品系列的增加不支持OCP原则 适用场景:多个系列产品的创建

4. DRP系统中抽象工厂模式示意图

6. 流向单添加流程

7. 注意货币计算或要求比较精确的情况下,那么通常采用java.math.BigDecimal来声明数

据类型,float和double都会存在精度上的问题 8. 理解业务逻辑层和持久层的含义

9. 从设计原则上来看,DAO的设计类度相对比较细,业务逻辑层的设计粒度相对比较粗,

而DAO中最好不要包含业务逻辑(这些都可以根据实际情况来决定粒度的粗细的)

10. 了解ThreadLocal对Connection的封装,ThreadLocal是线程的本地变量,可以防止线

程安全问题,因为它隔离了相关的资源(它只是一种手段,我们可以采用同步机制解决线程安全问题),并在同一个线程中可以共享这个资源

11. 了解sql的批量更新(在跨网络访问时一般要求是粗粒度的,这样可以提高性能) 12. Dao层异常最好不要直接抛给用户,最好由业务层转换成用户理解的异常再抛出 13. 对含有业务语义的字段维护的方法

据,悲观锁是采用数据库机制实现的,数据一直被锁定,其他客户端无法查看,直到锁超时。只有在提交事务或回滚事务时才会释放锁。 14. 了解html中table元素动态增加和删除

15. 了解javascript中window.open和window.opener的用法

2008年01月05日(第九天),流向单维护、Listener

1. 了解采用动态代理处理事务,采用动态代理可以提供声明式事务的能力 2. 了解sql中between … and … 3. 了解日期比较

5. 对于java在开发中公共的部分最好封装到相应的类中,便于复用;对于javasciprt也同

样最好把公共的部分封装到js文件中(如果jsp页面中存在大量的javascript脚本,最好把它放到js文件中);对于jsp文件如果需要采用公共的页面或jsp头中经常引用相同的内容(例如:每个页面都需要import大量相同的类库)可以把这些内容放到单独的jsp页面中,在每个页面中可以采用include指令将公共的jsp

页面引入

6. 了解Listener的机制,Listener可以监听服务器端相关的状态变化,当服务器端状态发

生改变,将调用相应的Listener,这种机制可以成为回调机制,ServletContextListener7. 在默认情况下,访问动态页面会创建session,访问静态页面不会创建session 8. DRP的分层(自上而下的依赖)

9. 目前系统存在的一些缺点

a) 大量的Singleton和Factory(泛滥) b) 缺乏声明式事务

c) 形形色色的配置

d) 缺乏整体性带来的高可维护性

10. 采用动态代理计算service所有方法的执行时间

2009年01月06日(第十天),Jfreechart、验证码、filter实现web Cache、filter处理session为空和Ajax下拉联动

1. 了解html中iframe标签

a) 可以实现局部刷新

b) 可以实现页面的滚动,方便查看数据 2. 了解JfreeChart的基本用法

3. 掌握sql中的group by,count用法,注意使用group by时聚合函数前的所有字段必须参

与分组

4. 了解右连接的用法 5. 掌握Map的遍历方法

6. 对JfreeChart不同图形的封装,我们可以采用策略模式:

a) 概念:针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使得他们

可以相互替换。每一时刻只能使用一个策略对象。 b) 优点:支持OPC原则,可以灵活的替换不同的算法 c) 缺点:会产生大量的子类 d) 典型的应用场景: i. 需要灵活的互换实现 ii. 大量条件分支语句时可以采用策略模式

采用策略模式实现示例:

8. 验证码是什么?

a) 就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防

止OCR),由用户肉眼识别。

9. 验证码的作用?

b) 验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴

力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。

10. 了解request.getSession(true)和request.getSession(false)的区别?

c) request.getSession()默认是true,即当前的request的session不可用时,那么他就会

创建一个新的会话。

d) request.getSession(false),当前会话不存在的时候,它会返回一个null值

11. URI(统一资源标识),URL(统一资源定位),URN(统一资源名称)

e) URI标识网络上的资源

f) URL与URN的区别,前者不仅标识资源,而且还指出了访问资源的方式,如:用

何种协议(http,ftp…..),URN则没有

12. 了解Filter实现Web Cache,可以采用第三方的产品, 如:OSCache

13. 了解Filter对权限的控制(可以防止URL跳转)和Session的控制

14.

15.

2009年01月08日(第十一天),Taglib、tomcat连接池的配置、Web Services、SCM

1. 标签的配置和使用

a) 配置

i. 将涉及到的jar或class拷贝到web项目中

ii. 将tld(标签库描述文件)文件拷贝到WEB-INF或WEB-INF下的任意目录中 b) 使用

i. 采用taglib指令引入标签库

ii. 通过前缀访问taglib相应的属性

2. 连接池的简单原理,将数据库连接对象储存到集合中,例如:vector对象中,一但数据库建立连接后,不同的数据库访问请求就可以共享这些连接,这样通过复用这些连接,可以避免每次创建数据库连接带来的系统开销。

3. tomcat管理界面的配置

a) 将apache-tomcat-5.5.23-admin.zip解压,将解压后的目录拷贝到tomcat相应的目录下

4. Tomcat连接池的配置

c) 将Oracle的jdbc驱动程序拷贝到TOMCAT-HOME/common/lib下 d) 访问登录到管理界面

e) 选择Resources----》datasource--create new Datasouce

f) 具体的参数说明

i. JNDI Name:注册到JNDI树上的名称

ii. Data Source URL:连接数据库的URL

iii. JDBC Driver Class:jdbc数据库驱动的名称

iv. User Name:访问数据库的用户名称

v. Password: 访问数据库的用户密码

vi. Max. Active Connections:最大活跃连接数,指同时可以有多少个连接,设置0,没有限制

vii. Max. Idle Connections:最大空闲连接数,表示没有数据库连接时,连接池也

必须保持最大空闲连接数,设置为0没有限制

viii. Max. Wait for Connection:建立连接等待时间,单位:毫秒,设置为-1无限制 ix. Validation Query:此参数是用来查询池中的空闲连接(可以不用配置) g) 点击保存,再点击提交

h) 找到TOMCAT-HOME/conf/server.xml文件,将生成的连接池部分的xml剪切到TOMCAT-HOME/conf/context.xml文件中。

i) 将TOMCAT-HOME/conf/context.xml文件剪切到drp的webroot/META-INF下

5. 了解JNDI(java名称和目录接口),JNDI采用树形结构管理我们的对象,采用JNDI可以使我们的应用和实际实现解藕,如:我们不用关心我们到底使用的是那个连接池实

现,连接池的实现对我们是透明的,但是也存在一个缺点那么必须依赖JNDI服务,JNDI服务没有启动将无法使用。

6.

7. loadRunner、Jmap、JProbe

8. JVM内存配置

a) 如果不存在内存泄露,java.lang.OutOfMemory解决方案是加大JVM内存,默认JVM

最大内存为64M

b) 独立的Java应用程序,可以采用java Server -Xms512m -Xmx1024m,加大JVM内

c) Tomcat中如何设置JVM内存,找到TOMCAT_HOME/bin/ catalina.bat,在最前面加

入:set CATALINA_OPTS=-Xms512m -Xmx1024m

9. java中的包类型

a) jar

b) war

c) ear

10. jar、war、ear都是标准的zip格式,完全可以采用winzip,winrar来打包

11. 分布式通信的基本原理

12. SOAP(简单对象访问协议http+xml)

13. UDDI(发现和整合服务)

14. WSDL(Web Services描述语言)

15. web服务=WSDL+SOAP

16. Web Services特征

a) 通过标准的soap通信,一般走http协议

b) 能跨平台调用

c) 通信格式是xml(文本),而不是二进制(EJB,CORBA)

17. 目前主流的分布式技术

d) CORBA、EJB、DCOM、Web services、rest等

18. CVS(Concurrent Version System)

19. SVN是CVS的修订版本

20. 版本控制工具主要有:CVS,SVN,VSS,ClearCase等

21. 需求管理工具,doors

22. 缺陷管理管理工具,bugzilla、Clear Request

23. CMM(能力成熟度模型),CMM共有5级,从2级开始过

24. 了解ant

2009年01月09日(第十二天),CVS、XML/XSL/DTD/Schema,项目总结

1. 了解CVS的基本使用(采用版本控制软件需要注意:一定要在本地编译通过了再提交,

通常是每天下班前提交)

2. 需要注意:每次修改最好先获取最新版本,在最新版本上修改

3. WML(无限标记语言)

4. XML和XSL的区别,XML是描述数据本身的,XSL是装饰XML的

5. DOM(Document Object Model)和SAX(Simple API for XML)的区别

a) DOM是面向模型的,一次性把xml文件读到内存中,形成DOM树,适合小型的

xml文件解析

b) SAX是面向事件的,会读一部分解析一部分,适合大型的xml文件解析

6. 了解JDOM对XML文件的读写

2008年12月24日(第一天),DRP业务流程

1. Web项目开发的一般流程

a) 需求确定 b) 需求分析 i. 架构分析和设计 ii. 业务逻辑分析和设计 iii. 界面设计 c) 开发环境搭建 d) 开发和测试 e) 文档编写 2. 项目简介

a) 项目名称:DRP(分销资源计划)

b) 项目简介:本系统为一家跨国医药企业开发,从需求调研、需求分析、系统设计、

编码、单元测试、集成测试和子系统测试7人开发了半年多,本系统主要包括如下模块,分销商库存管理、分消费管理、结帐管理、付款结算管理、统计报表管理、基础数据管理和系统管理,本系统主要对企业的物流和资金流进行全面的管理和控制,从而缩短企业的供应链,为企业节省成本,为管理层提供全面的信息流。 c) 职 务:java软件工程师

d) 职 责:负责分销库存管理的系统设计、编码和单元测试,分销库存管理主要是

物流的管理,主要功能是对物料的调拨和纯销情况进行审核和监控,实时了解物料的出入库情况和库存结余情况 并在每个会计期间内对物料进行盘盈和盘亏处理,来调整库存达到帐实相符,从而更精确的监控分销商的库存情况,提供真实准确的决策信息。

e) 使用技术:jsp/struts/spring/hibernate/如意报表/oracle/linux 3. 分销库存管理业务流程

a) 本模块主要是物流方面的问题处理。在整个系统中,它归结为库存管理。每个分销

商都有一个期初库存。整个系统启用后,主要就是物料(药品)的出入库、库存调整过程。后者的操作步骤为:商务主管收集流向单(含出库、入库),数据录入员录入流向单数据,商务主管审核(如有数量差异,可以修改调整项数据),商务经理审核确认(如果有问题,驳回,正确的话就直接冲减库存)。 b) 另一条线是项目会计抽查流向单和系统中的数据是否吻合,对抽查过的单据添加抽

查标记(如果有问题,会通过其他手段(如电话、邮件等)通知商务经理)。 c) 对分销商定期报上的库存数量(该数量应该是商务代表核实过的)与系统中数据对

比,如果有差异,作调库处理(盘盈和盘亏)。目的是使账面数量和分销商的实际库存一致(帐实相符)。该调整由商务主管确认,只能调整当前库存。

4. VAT(发票),TT(电子转帐)

5. CRUD(Create、Read、Update、Delete)

6. 了解报表工具:如意报表、用友华表,Jasper Report

7. 搭建开发环境

a) 启动Oracle进入sqlplus,以system用户登录,执行如下命令 i. @ D:\share\01-DRP\sql\drp_oracle.sql b) Oracle常用命令 i. select table_name from user_tables; ii. select view_name from user_views; iii. select trigger_name from user_triggers; iv. select sequence_name from user_sequences; v. run、/、r执行当前缓存区中的命令 vi. L(list)显示当前缓冲区中的命令 vii. show user 显示当前连接用户 viii. select name from v$database; ix. set linesize 400 输出一行字符串的个数(缺省为80)\ x. alter user xxxxx account unlock c) 采用MyEclipse建立drp项目

d) 将demo下的所有文件拷贝到webroot下 e) 将Oracle的jdbc驱动拷贝到WEB-INF/lib下

2008年12月25日(第二天),用户维护

1. 实体类通常来源于现实世界中概念(通常是名词),实体类通常和关系型数据库中的表

对应,实体类中的实例通常对应表中的一条记录,实体类中的属性对应表中的字段,实体类是有OID,通常对应表中的主键

2. 了解类的职责划分(解耦合),高内聚、低耦合 3. 单例模式的上要素(GoF)

a) 私有的静态的成员变量 b) 私有的构造方法

c) 公共的静态的入口点方法

4. 单例模式的适用场景:类中没有可以修改的成员变量(这个类没有状态)如果存在可

以修改的成员变量会产线程安全问题,不建议使用 5. PreparedStatement

a) 会尽可能的提高性能

b) 提高安全性(防止SQL Injection,后期会讲到) 6. 了解js文件如何引入

7. 了解javascript的基本验证 8. 了解javascript中with的使用

9. 注意:jsp中字符集的处理,采用request.setCharacterEncoding(

采用filter技术解决

10. 一个完善的系统需要详细的日志记录

11. 建议类似User这样的类覆写toString方法,便于输出 12. 了解Ajax

a) 了解异步通信和同步通信的概念

b) 注意,如果需要提起多个请求,需要创建多个XMLHttpRequest对象 c) 了解XMLHttpRequest对象的创建过程

d) 了解XMLHttpRequest对象中open、onreadystatechange、readystate、responseText、

status属性和方法的含义

e) 使用Ajax技术需要清除缓存,否则容易产生莫名其妙的错误,具体有两种方法: i. 第一种,采用URL后跟上时间戳来防止浏览器缓存,如:

user_validate.jsp?userId=

13. 用户代码是否重复采用Ajax验证流程

a) 创建Ajax引擎对象XMLHttpReqest

b) 调用open方法与Ajax引擎建立连接,并告诉Ajax引擎我们的请求方式为get,请

求url及采用异步方式

c) 告诉Ajax引擎处理完成后,如何把结果反馈给我们,我们通常指定一个方法句柄,

那么Ajax就会调用我们指定的方法,从而就可以得到Ajax引擎返回的数据(这种方式一般称为回调机制)

d) 最后调用send方法把我们步骤b和c设置的参数发送给Ajax引擎(也就是真正的

交给Ajax引擎去处理)

15. 作业,完成会计核算期间的维护,主要要求:

a) 界面约束 i. 添加界面

1. 核算年,核算月必须为数字; 2. 核算年,核算月必须保持唯一(添加时必须判断数据库中是否存在重复的

核算年+核算月,采用Ajax技术实现(建议采用servlet技术进行判断); 3. 开始日期必须小于等于结束日期; ii. 修改界面

1. 核算年,核算月不允许修改; 2. 开始日期必须小于等于结束日期;

iii. 查询界面

1. 点击会计核算期间维护全部查询出来,可以通过分页进行每页的查询;

b) 其他 i. 以上开发顺序为:先开发

查询

1. Basedata\fiscal_year_period_maint.html 主维护界面

2. Basedata\ fiscal_year_period_add.html 添加会计核算期间界面 3. Basedata\ fiscal_year_period_modify.html 修改会计核算期间界面

iii. Javabean放到com.bjsxt.drp.basedata包下(这个包需要大家新建) iv. 采用

2008年12月26日(第三天),用户维护

1. 2. 3. 4.

掌握PageModel的封装

html元素中name或id属性值,不能与javascript中的函数名称一致 掌握request.getParameterValues()的用法 filter基本原理

5. Filter技术在servlet2.3规范中加入的,大部分web server都支持 6. Filter和AOP(Aspect Oriented Programming)面向切面编程

7. 实现Filter需要,需要实现javax.servlet.Filter接口,还要在web.xml文件中进行配置,

8. 异常

a) 编程式异常(手动处理的异常) b) 声明式异常(自动处理的异常)

9.

了解运行时异常(RuntimeException)和一般异常(Exception)的区别,运行时异常也

叫非受控异常(unchecked)而一般异常也叫受控异常(checked) 10. 转发和重定向的区别

a) 转发(只能在同一个web应用中使用,可以共享request范围内的数据),如图:

b) 重定向(可以重定向到任意URL,不能共享request范围内的数据),如图:

11. Session默认超时时间为30分钟,见TOMCAT_HOME/conf/web.xml文件

12. 手动在我们的项目中修改session的超时时间,在webroot/web-inf/web.xml中,单位为:

14. 怎样配置web项目目录中的文件是否显示,参见TOMCAT_HOME/conf/web.xml中的配

置,如:

15. 了解Sql Injection

作业:完成修改密码功能,为了使用户具有更好的体验,判断原密码和系统登录密码采用Ajax技术实现(建议采用servlet进行判断)

2008年12月27日(第四天),分销商维护

1. 树的几种设计方式

a) 不带冗余字段,id,pid

b) 带冗余字段,id,pid,isleaf,childrencount c) 采用固定的字符串,[1**********] i. 00,所有分销商 ii. 01,华北区 iii. 001,北京市 iv. 0001,北京医药股份有限公司

2. 掌握分销商树的读取,参见:ClientTreeReader.java 3. 了解

生成树的基本原理

4. 为什么建立ClientLevel这个类,主要是为了实现对象模型的细粒度划分,便于复用,

便于理解对象的概念,通常对象模型是细粒度的,关系模型是粗粒度的(提高存储和检索的效率) 5. 需要思考的问题

a) 分销商根节点不能删除,考虑将删除按钮隐藏 b) 通过一条sql语句将区域和分销商按id查询上来 6. 了解内连接,左连接和右连接 7. 作业

a) 完成分销商修改页面中下拉列表的填充和定位 b) 完成分销商详细信息页面

2008年12月29日(第五天),分销商维护

1. 掌握分销商修改页面中下拉列表的填充和定位

2. 注意事务的概念,事务可以保证多个操作的原子性,要么全部成功,要么全部失败,事

务有四个特征ACID(简要了解即可) a) 原子性(Atomicity),事务中包括的操作要么做,要么都不做 b) 一致性(Consistency),指数据必须从一个状态变成另一个状态,不允许产生不一

c) 隔离性(Isolation),指一个事务执行不能其他事务干扰 d) 持续性(Durability),指一个事务一旦提交,它对数据的修改将变成永久性的 3. Servlet是单实例多线程的,注意线程安全问题

如果标签中的值大于等于0,表示Tomcat启动的时候初始化Servlet(值越小执行的优先级越高),如果小于0,只有在第一次访问的时候才初始化Servlet(这也是它的默认配置)

5. 了解树的递归删除

6. 作业:为流向单开发做准备

a) 完成供方分销商选择框的开发,实现ClientManager类中的findAllClient()方法 b) 完成需方客户选择框的开发,实现ClientManager类中的findAllAimClient()方法

2008年12月30日(第六天),物料维护

1. 接口和抽象类的区别?

a) 接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强

大的可接插性

b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公

共的代码移植到抽象类中

c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程) 2. 类之间的关系

a) 一般化关系 i. 类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系 b) 关联关系 i. 类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中

使用实例变量体现

c) 聚合关系 i. 是关联关系的一种,是较强的关联关系,是整体和部分的关系,如:汽车和轮

3. 4.

5.

6.

胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在java语言中使用实例变量体现

d) 合成关系 i. 是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分

对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在java语言中使用实例变量体现

e) 依赖关系 i. 依赖关系是比关联关系弱的关系,在java语言中体现为返回值,参数,局部

变量和静态方法调用

is-a、is-like-a、has-a 什么是设计模式?

a) 设计模式可以重复利用的解决方案。 b) 1995年,Gof(“四人帮”)提出 设计模式的分类 a) 创建型模式 b) 结构型模式 c) 行为型模式

标准的工厂方法模式,属于创建型模式(重点理解),示意图:

优点:实现了OCP(开闭原则)

缺点:只能创建单一产品系列(应用场景) 适用场景:单系列产品的创建

7. 工厂模式隐藏了产品的创建细节,对于上层类的调用是透明的 8. 软件的设计原则

a) 开闭原则(OCP) i. 对扩展开放,对修改关闭 b) 里氏代换原则(LSP) i. 任何类出现的地方,子类一定可以出现(is-a) c) 依赖倒转原则(DIP) i. 尽量依赖与抽象,而不要依赖与具体 d) 接口隔离原则(ISP) i. 尽量小的单独的接口,而不要提供大的接口,是通信尽可能窄 e) 合成复用原则(CARP)

i. 尽量采用合成和聚合的方式达到复用,而不要使用继承达到复用 f) 迪米特法则 i. 一个软件实体尽可能少的与其他实体发生作用

9. 原则一般都是起指导性作用的,具体要结合实际情况使用,在OO设计中一般都会有一定的折中,最终应该取得一个平衡点

10. Dao(Data Access Object)数据访问对象,属于J2EE设计模式。属于GoF中策略模式

的特例,用一个Dao接口隐藏了持久化操作的细节,这样使用这个模式的业务对象,无需了解底层的数据库持久化知识了。区分“业务逻辑”和“持久化逻辑”通常是有好处的,业务逻辑通常关心的是应用程序的核心流程和业务规则,持久化逻辑关注的是如何访问和操作持久化数据。换句话说:把业务逻辑和规则放在一边,与持久化相关的问题放在一边。

11. Dao模式的主要意图:隐藏数据访问细节

12. 物料维护使用的工厂方法模式(重点理解),示意图

13. ItemManager与ItemDao工厂的关系

14. 添加物料时序图

15. 了解Properties文件的读取

16. 了解Class.forName()用法

17. 了解我们可以通过反射机制可以灵活的更换实现类,可以弱化对象之间的依赖关系(解

偶),前提条件必须遵循面向抽象编程,而不要面向具体编程,在开发过程中区分出哪些是变化的(封装变化),哪些是不变的,不变的我们抽取成框架,变化的可以推迟到配置文件中来适应变化 18. 类的加载过程

19. 如何生成Class对象

20. Java类加载器原理(双亲委派机制)

21.

Tomcat类加载器

23. 异常的几种处理方式

a) 根据每种业务语义创建不同的异常,如:UserNotFoundException,… b) 每层抛出相应的异常,如:DaoException,SerivceException,….. c) 每个模块抛出一种异常,如:SysMgrException,….. d) 只抛出一种异常,如:AppException

e) 错误码可以做到异常细粒度划分,采用错误码可以减少异常类的建立 i. 参见:java.sql.SQLException

24. 了解声明式异常的配置方式,参见web.xml配置文件

25. 了解通用错误处理页面的声明方式,注意此页中必须加入:

isErrorPage=

26. 了解可以把业务逻辑对象放到ServletContext中来解决web层和业务逻辑层之间的耦

合,可以使用Servlet技术在web server启动的时候完成,通过这种方式,可以使我们的Manager类的职责更加清晰,Manager类只负责CRUD的操作,对Dao对象的创建将不关心,而整个Manager与Dao对象的组装过程,我们放到了Servlet中,使整体的类职责更加分明

27. 作业:根据id查询物料sql的写法

2008年12月31(第七天),物料维护

1. 了解sql的嵌套

2. Tomcat解决get提交乱码问题,需要在TOMCAT_HOEM/conf/server.xml文件中进行配

3. http协议:

1. http协议是基于请求响应模式的协议,客户端发送一个请求,服务器端返回该请求

的响应。http协议是建立在tcp/ip为基础的高层协议,http协议第一个版本是0.9,后来到了1.0,现在广泛使用的是http1.1 2. http请求(request)

a) 请求方法/URI/版本 b) 请求头 c) 请求正文,(请求头和请求正文之间是一个空行(回车换行)),这个非常重要,

它表示请求头已经结束,接下来是请求正文

3. http响应 (response)

a) 协议/状态码/描述

b) 响应头

c) 响应正文(响应头和响应正文之间是一个空行(回车换行))

放到了消息头中,Tomcat5.x对post和get提交处理方式不同,所以get提交需要配置Tomcat字符集

7. 了解sesisonid的生成过程,sessionid是由服务器端生成的唯一标识,在第一次生成后

会返回给浏览器,以后每次请求必须携带sesisonid,这样客户端可以正确的找到相应的

session(http协议是无状态的) 8. 代理模式

代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。 代理分类 a) 静态代理

b) 动态代理,JDK动态代理只能对实现了接口的类进行代理,采用JDK动态代理必

须实现InvocationHandler接口,采用Proxy类创建相应的代理类,参见LogHandler.java,采用JDK动态代理可以对目标类(如:UserDaoImpl)方法进行增强

了解html中和web.xml中的”/”的含义 a) Html中指向

b) Web.xml中指向

注意,上传需要在html表单中设置为method=”post”,需要在中加入属性ENCTYPE=”multipart/form-data”, multipart/form-data是多段数据提交格式,也就是说提交的数据不完全是字符文本数据,还包括其他的文件数据,使用这个属性后将不能使用request.getParameter()来取得表单数据,必须以其他的方式来取得表单数据 了解上传组件apache commons fileupload

9.

10.

11.

12. 15. 作业

a) 物料维护中的删除和修改 b) 查看详细信息

2009年01月04日(第八天),流向单维护

1. 了解主从表或主细表 2. 流向单DAO层设计:

3. 抽象工厂模式示意图:

优点:对产品的增加支持OCP原则

缺点:对产品系列的增加不支持OCP原则 适用场景:多个系列产品的创建

4. DRP系统中抽象工厂模式示意图

6. 流向单添加流程

7. 注意货币计算或要求比较精确的情况下,那么通常采用java.math.BigDecimal来声明数

据类型,float和double都会存在精度上的问题 8. 理解业务逻辑层和持久层的含义

9. 从设计原则上来看,DAO的设计类度相对比较细,业务逻辑层的设计粒度相对比较粗,

而DAO中最好不要包含业务逻辑(这些都可以根据实际情况来决定粒度的粗细的)

10. 了解ThreadLocal对Connection的封装,ThreadLocal是线程的本地变量,可以防止线

程安全问题,因为它隔离了相关的资源(它只是一种手段,我们可以采用同步机制解决线程安全问题),并在同一个线程中可以共享这个资源

11. 了解sql的批量更新(在跨网络访问时一般要求是粗粒度的,这样可以提高性能) 12. Dao层异常最好不要直接抛给用户,最好由业务层转换成用户理解的异常再抛出 13. 对含有业务语义的字段维护的方法

据,悲观锁是采用数据库机制实现的,数据一直被锁定,其他客户端无法查看,直到锁超时。只有在提交事务或回滚事务时才会释放锁。 14. 了解html中table元素动态增加和删除

15. 了解javascript中window.open和window.opener的用法

2008年01月05日(第九天),流向单维护、Listener

1. 了解采用动态代理处理事务,采用动态代理可以提供声明式事务的能力 2. 了解sql中between … and … 3. 了解日期比较

5. 对于java在开发中公共的部分最好封装到相应的类中,便于复用;对于javasciprt也同

样最好把公共的部分封装到js文件中(如果jsp页面中存在大量的javascript脚本,最好把它放到js文件中);对于jsp文件如果需要采用公共的页面或jsp头中经常引用相同的内容(例如:每个页面都需要import大量相同的类库)可以把这些内容放到单独的jsp页面中,在每个页面中可以采用include指令将公共的jsp

页面引入

6. 了解Listener的机制,Listener可以监听服务器端相关的状态变化,当服务器端状态发

生改变,将调用相应的Listener,这种机制可以成为回调机制,ServletContextListener7. 在默认情况下,访问动态页面会创建session,访问静态页面不会创建session 8. DRP的分层(自上而下的依赖)

9. 目前系统存在的一些缺点

a) 大量的Singleton和Factory(泛滥) b) 缺乏声明式事务

c) 形形色色的配置

d) 缺乏整体性带来的高可维护性

10. 采用动态代理计算service所有方法的执行时间

2009年01月06日(第十天),Jfreechart、验证码、filter实现web Cache、filter处理session为空和Ajax下拉联动

1. 了解html中iframe标签

a) 可以实现局部刷新

b) 可以实现页面的滚动,方便查看数据 2. 了解JfreeChart的基本用法

3. 掌握sql中的group by,count用法,注意使用group by时聚合函数前的所有字段必须参

与分组

4. 了解右连接的用法 5. 掌握Map的遍历方法

6. 对JfreeChart不同图形的封装,我们可以采用策略模式:

a) 概念:针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使得他们

可以相互替换。每一时刻只能使用一个策略对象。 b) 优点:支持OPC原则,可以灵活的替换不同的算法 c) 缺点:会产生大量的子类 d) 典型的应用场景: i. 需要灵活的互换实现 ii. 大量条件分支语句时可以采用策略模式

采用策略模式实现示例:

8. 验证码是什么?

a) 就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防

止OCR),由用户肉眼识别。

9. 验证码的作用?

b) 验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴

力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。

10. 了解request.getSession(true)和request.getSession(false)的区别?

c) request.getSession()默认是true,即当前的request的session不可用时,那么他就会

创建一个新的会话。

d) request.getSession(false),当前会话不存在的时候,它会返回一个null值

11. URI(统一资源标识),URL(统一资源定位),URN(统一资源名称)

e) URI标识网络上的资源

f) URL与URN的区别,前者不仅标识资源,而且还指出了访问资源的方式,如:用

何种协议(http,ftp…..),URN则没有

12. 了解Filter实现Web Cache,可以采用第三方的产品, 如:OSCache

13. 了解Filter对权限的控制(可以防止URL跳转)和Session的控制

14.

15.

2009年01月08日(第十一天),Taglib、tomcat连接池的配置、Web Services、SCM

1. 标签的配置和使用

a) 配置

i. 将涉及到的jar或class拷贝到web项目中

ii. 将tld(标签库描述文件)文件拷贝到WEB-INF或WEB-INF下的任意目录中 b) 使用

i. 采用taglib指令引入标签库

ii. 通过前缀访问taglib相应的属性

2. 连接池的简单原理,将数据库连接对象储存到集合中,例如:vector对象中,一但数据库建立连接后,不同的数据库访问请求就可以共享这些连接,这样通过复用这些连接,可以避免每次创建数据库连接带来的系统开销。

3. tomcat管理界面的配置

a) 将apache-tomcat-5.5.23-admin.zip解压,将解压后的目录拷贝到tomcat相应的目录下

4. Tomcat连接池的配置

c) 将Oracle的jdbc驱动程序拷贝到TOMCAT-HOME/common/lib下 d) 访问登录到管理界面

e) 选择Resources----》datasource--create new Datasouce

f) 具体的参数说明

i. JNDI Name:注册到JNDI树上的名称

ii. Data Source URL:连接数据库的URL

iii. JDBC Driver Class:jdbc数据库驱动的名称

iv. User Name:访问数据库的用户名称

v. Password: 访问数据库的用户密码

vi. Max. Active Connections:最大活跃连接数,指同时可以有多少个连接,设置0,没有限制

vii. Max. Idle Connections:最大空闲连接数,表示没有数据库连接时,连接池也

必须保持最大空闲连接数,设置为0没有限制

viii. Max. Wait for Connection:建立连接等待时间,单位:毫秒,设置为-1无限制 ix. Validation Query:此参数是用来查询池中的空闲连接(可以不用配置) g) 点击保存,再点击提交

h) 找到TOMCAT-HOME/conf/server.xml文件,将生成的连接池部分的xml剪切到TOMCAT-HOME/conf/context.xml文件中。

i) 将TOMCAT-HOME/conf/context.xml文件剪切到drp的webroot/META-INF下

5. 了解JNDI(java名称和目录接口),JNDI采用树形结构管理我们的对象,采用JNDI可以使我们的应用和实际实现解藕,如:我们不用关心我们到底使用的是那个连接池实

现,连接池的实现对我们是透明的,但是也存在一个缺点那么必须依赖JNDI服务,JNDI服务没有启动将无法使用。

6.

7. loadRunner、Jmap、JProbe

8. JVM内存配置

a) 如果不存在内存泄露,java.lang.OutOfMemory解决方案是加大JVM内存,默认JVM

最大内存为64M

b) 独立的Java应用程序,可以采用java Server -Xms512m -Xmx1024m,加大JVM内

c) Tomcat中如何设置JVM内存,找到TOMCAT_HOME/bin/ catalina.bat,在最前面加

入:set CATALINA_OPTS=-Xms512m -Xmx1024m

9. java中的包类型

a) jar

b) war

c) ear

10. jar、war、ear都是标准的zip格式,完全可以采用winzip,winrar来打包

11. 分布式通信的基本原理

12. SOAP(简单对象访问协议http+xml)

13. UDDI(发现和整合服务)

14. WSDL(Web Services描述语言)

15. web服务=WSDL+SOAP

16. Web Services特征

a) 通过标准的soap通信,一般走http协议

b) 能跨平台调用

c) 通信格式是xml(文本),而不是二进制(EJB,CORBA)

17. 目前主流的分布式技术

d) CORBA、EJB、DCOM、Web services、rest等

18. CVS(Concurrent Version System)

19. SVN是CVS的修订版本

20. 版本控制工具主要有:CVS,SVN,VSS,ClearCase等

21. 需求管理工具,doors

22. 缺陷管理管理工具,bugzilla、Clear Request

23. CMM(能力成熟度模型),CMM共有5级,从2级开始过

24. 了解ant

2009年01月09日(第十二天),CVS、XML/XSL/DTD/Schema,项目总结

1. 了解CVS的基本使用(采用版本控制软件需要注意:一定要在本地编译通过了再提交,

通常是每天下班前提交)

2. 需要注意:每次修改最好先获取最新版本,在最新版本上修改

3. WML(无限标记语言)

4. XML和XSL的区别,XML是描述数据本身的,XSL是装饰XML的

5. DOM(Document Object Model)和SAX(Simple API for XML)的区别

a) DOM是面向模型的,一次性把xml文件读到内存中,形成DOM树,适合小型的

xml文件解析

b) SAX是面向事件的,会读一部分解析一部分,适合大型的xml文件解析

6. 了解JDOM对XML文件的读写


相关文章

  • 现代物流与配送
  • 现代物流与配送 --全国高校物流管理专业与课程建设培训班 XXX 教授 XXX副会长 XX大学XXXX系系主任,博导XX大学XXXX研究中心主任 1 物流的基本概念 物流是指商品在空间上和时间上的位移,它分 为社会物流和企业物流两大类  ...查看


  • 分销需求计划在存货管理中的运用
  • 专版 建筑时报/2003年/07月/17日/第006版/ 分销需求计划在存货管理中的运用 仲莉虹作者单位上海市建设工程安全质量监督总站 长期以来, 在企业生产过程中人们一直从产品本身的角度考虑降低成本, 实际上成本也产生于产品(或服务) 生 ...查看


  • 第三方物流操作管理流程
  • 南京 第三方物流操作管理流程 ( 第 一 稿 ) 目录 第一部分 第三方物流运作方案简介---------------------------------------------------------------1 第二部分 第三方物流管 ...查看


  • OracleERP系统和分销资源计划DRP系统的接口方法
  • 第14卷第5期2002年5月 计算机辅助设计与图形学学报 JO U RN A L OF COM P U T ER -A IDED D ESIGN &CO M P U T ER G RA PHICS Vo l. 14, N o. 5M ...查看


  • 物流资源计划_LRP_的原理及其应用
  • 第27卷第6期 华 中 理 工 大 学 学 报 V ol. 27 N o. 61999年 6月 J. Huazhong U niv. of Sci. &T ech. Jun. 1999 物流资源计划(LRP ) 的原理及其应用 王槐 ...查看


  • 生产与运作管理 1
  • 生产与运作管理 第一章 一. 填空 1. 与社会组织生产经营活动直接相关的基本职能有三项: 2. 生产运作管理人员必须具备两方面的技能:3. 从管理的角度,可以将生产运作分为两大类:产品生产和服务运作 4. 按工艺过程的特点,可以把产品生产 ...查看


  • 第六章灾难恢复与业务连续性计划
  • 第六章:灾难恢复与业务连续性计划 C6-1 During an audit, an IS auditor notes that an organization's business continuity plan (BCP) does no ...查看


  • 供应链计划体系
  • 供应链计划体系 王少春 2009.05 供应链运作参考模型(SCOR) 供应链计划体系目标 企业内部供应链计划体系 S&OP 销售与运作规划 MRP 物料需求计划 MPS 主生产计划 DRP 分销需求计划 DM 需求管理 需 求 R ...查看


  • [精益供应链]解决服装行业供应链的利器
  • 服装行业的库存一直是行业内的难题,如何用精益的思想去解决一这难题,这是我们益友发挥精益功力的机会.让我们一起去实践. 中国的服装业从2008年的北京奥运会开始得到了飞速的发展,5年中有安踏和鸿星尔克和361和特步等一些运动服装类企业借助奥运 ...查看


热门内容