Java编程风格及基础类库使用培训清华大学计算中心培训安排•一、Java的编程规范•1.Java语言的编写规范•2.JSP的编程规范•3.Java的设计模式•二、基础类库的使用•1.信息发布基础类•2.权限管理基础类•3.数据库访问基础类•4.数据库数据导入导出基础类库•1)Dbf文件的导入导出•2)Excel文件的导入导出•3)PDF文件的导出Java的编程规范•Java语言的编程规范•命名的规范•Java的样式文件•代码的编写风格•程序的编写规范•JSP的编程规范•JavaWeb程序的结构•Jsp/Servlet的编程规范•Java的设计模式•基础的设计模式•J2EE的设计模式•Java程序的开发框架(FrameWork)Java语言的编写规范•命名的规范•Package的命名•应该都是由一个小写单词组成。•Class的命名•必须由大写字母开头而其他字母都小写的单词组成•Class变量的命名•变量的名字必须用一个小写字母开头。后面的单词用大写字母开头•StaticFinal变量的命名•StaticFinal变量的名字应该都大写,并且指出完整含义•参数的命名•参数的名字必须和变量的命名规范一致•数组的命名•数组应该总是用下面的方式来命名:byte[]buffer•方法的参数•使用有意义的参数命名•如果可能的话,使用和要赋值的字段一样的名字Java语言的编写规范•Java文件样式•版权信息•Package/Imports•Class•ClassFields•构造函数•存取方法•克隆方法•类方法•toString方法•main方法Java语言的编写规范•代码编写格式•代码样式•代码应该注意回车换行的格式•在一个项目中不要混用unix和windows两种不同的回车换行格式•文档化•是用Javadoc来为类生成文档•它是标准,也被各种java编译器都认可的方法•缩进•缩进应该是每行2个空格•不要在源文件中保存Tab字符.•Tab字符会因为用户设置的不同而扩展为不同的宽度.•页宽•页宽应该设置为80字符•超长的语句应该在一个逗号或者一个操作符后折行•一条语句折行后,应该比原来的语句再缩进2个字符Java语言的编写规范•{}对•{}中的语句应该单独作为一行•括号•左括号和后一个字符之间不应该出现空格•右括号和前一个字符之间也不应该出现空格•不要在语句中使用无意义的括号Java语言的编写规范•程序编写规范•exit•exit除了在main中可以被调用外,其他的地方不应该调用•后台服务地程序不应该因为某个库模块决定要退出就退出•异常•申明的错误应该抛出一个RuntimeException或者派生的异常•垃圾收集•需要调用close的对象一定要及时调用close•打开的流对象•数据库连接•Clone•final类•绝对不要因为性能的原因将类定义为final•一个类还没有准备好被继承,最好在类文档中注明•访问类的成员变量•大部分的类成员变量应该定义为private的来防止继承类使用他们JSP的编写规范•JavaWeb程序的架构•表示层•负责HTML页面的生成•使用Jsp或Servlet•逻辑层•负责业务逻辑的处理•使用JavaBean或普通Java类•持久层•负责数据库数据的获取•使用DAO(DataAccessObject)获取数据库数据•使用VO(ValueObject)传输数据JSP的编写规范表现层Servlet/JSPJavaBean/标准Java类DAO/VO关系表逻辑层持久层数据层JSP的编写规范•JSP/Servlet的编程规范•适用场合•JSP用于显示页面•Servlet可以完成更强大的功•Filter对所有页面统一做处理•startupservlet启动的时候初始化•errorPage•每一个JSP都应该包含ErrorPage页面•%@pageerrorPage=”/error.jsp”%•contentType•每一个页面都应该指定contentType•如果要指定中文编码,适用GBK而不是GBK2312•多使用已有的taglib•Tag是JSP的一个重要扩展•基础类库中定义的应用的tag,要求尽量使用•提取公用部分•对于JSP中大量使用的公有部分,必须写成单独的JSP供其他页面includeJSP的编写规范•不直接被WEB访问的文件放到WEB-INF目录下•WEB-INF目录是j2ee规范中不被WEB访问的目录•不能被用户直接访问的文件可以放到这个目录下•可以将JSP文件放到这个目录下,然后使用Forward的方式访问•大括号•由于JSP比较容易混乱,在控制语句的代码块中,后面的}语句后面尽量加上注释以便于阅读•特别是中间混杂了HTML代码的更是需要加上注释。{}的缩进量应保持一致JSP的编写规范•Java程序的设计模式•面向对象开发中程序员更重视代码的重用性和可维护性•一个好的,对某个问题空间的通用的解决方案可以称之为设计模式•设计模式通常描述了一组相互紧密作用的类与对象•设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握•设计模式为软件重构提供了目标•设计模式使人们可以更加简单方便地重复使用成功的设计和体系结构JSP的编写规范•基础的设计模式•基础模式•委托模式•接口模式•代理模式•创建型模式•抽象工厂模式•生成器模式•工厂方法模式•原型模式•单例模式•结构型模式•适配器模式•桥接模式•组合模式•容器模式•修饰模式•扩展性模式•外观模式•享元模式•管道与过滤器模式•代理模式JSP的编写规范•J2EE的设计模式•在基础的设计模式之上,针对Web方式的程序开发提出的设计模式•表示层设计模式•逻辑层设计模式•持久层设计模式JSP的编写规范•Java程序的开发框架•Framework即架构•某个问题空间抽象的、可复用的解决方式•软件的架构方式•一组设计模式的集合•形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤•多利用现有的程序开发架构和工具•Struts•Tiles•Hibernate•…….基础类库的使用•基础类库•信息发布•权限管理•数据库访问•数据库数据的导出导入•其他•正在整理•正在开发中•待研究信息发布基础类•信息发布基础类功能说明:•信息发布基础类库提供了信息发布中需要用到的数据库数据操作的基本功能•显示•修改•插入•删除•数据合法性检查•出错信息提示•信息发布基础类的使用要求•信息发布基础类库通过数据库访问基础类访问Oracle数据库•信息发布基础类需要业务数据库中建立特定的数据表•信息发布基础类以JspTaglib的形式提供信息发布基础类•信息发布基础类的数据库结构•信息发布基础类要求对所操作的数据表和数据字段在信息发布基础类的自建表中进行定义和说明•信息发布基础类库需要在业务库中建立如下表•xxfb_bmb•信息发布数据定义表•存储信息发布中所需访问的业务系统数据表的相关信息•t_sjzdb•信息发布数据字典表•存储信息发布中所需访问到的业务系统的数据字段信息的描述•xxfb_dxxxb•信息发布单项选择表:•用于存储信息发布中用到的单向选择列•Sequence的命名规范为•“seq_”+数据数据表名权限管理基础类•权限管理基础类功能说明•用户的身份认证•用户权限的存储结构•用户权限的检查•权限管理的使用要求•信息发布基础类库通过数据库访问基础类访问Oracle数据库•信息发布基础类需要业务数据库中建立特定的数据表•信息发布基础类以JspTaglib的形式提供权限管理基础类•权限管理的基本概念•权限组成的四大基本要素•用户•指应用系统的用户,是系统的直接面对者。•角色•是为了对权限进行组织和管理而建立的“用户组”实体•在某些应用系统中可能是一个职位的体现;•权限•是指为了完成某个系统功能而必须具有的权力•对应于应用系统的最小功能单位;•模块•是系统功能的具体实现,•一般情况下,每个系统功能必须由一个至多个模块来共同完成•这里的模块一般以一个WEB页面为单位权限管理基础类•权限系统四大要素的对应关系•用户到角色的对应•指明了每个用户所拥有的角色•指明了每个角色所对应的所有用户•是多对多的关系•角色到权限的对应•指明了每个角色所拥有的权限•每个权限也可以被多个角色所拥有•是多对多的关系•权限到模块的对应•指明为了完成某个权限赋予的功能所需要的模块•每个模块也可能支持多个权限•是多对多的关系权限管理基础类•权限管理基础类的数据库结构•用户信息表:•其重要字段是“用户ID”这是varchar2类型的数据,最长可达64位•详细的用户信息表由应用系统自行决定•基础类提供一个参考表org_thcic_userinfo•org_thcic_roles•角色说明表•存放角色的信息和说明•角色ID类型是number(9),数值可以自由分配;•org_thcic_perms•权限说明表•存放权限的信息和说明•权限ID类型是number(9),数值可以自由分配;权限管理基础类•org_thcic_modules•模块说明表•存档模块的信息和说明•模块ID类型是varchar2(256)•取值规则是”应用名称:模块URL全路径:子模块号“•其中子模块号可以为空,但最后的”:“不能省略•子模块号的作用是,当同一个页面可以完成若干功能时,可能对应于不同的权限,那么就需要子模块号来做更细的区分•org_thcic_user_role•用户、角色对应表•存放用户、角色的对应关系•org_thcic_role_perm•角色、权限对应表•存放角色、权限的对应关系•org_thcic_module_perm•模块、权限对应表•存放模块、权限的对应关系权限管理基础类•org.thcic.sysconf•系统配置表•与授权系统相关的配置信息有:•EnableAuthority指明是否启动授权系统•DefaultAuthorityClassName指明管理授权系统的类名字,默认是org.thcic.authority.AuthorityDB数据库访问基础类•功能说明•提供了对Jdbc的封装•实现了对数据库数据的访问•数据库访问基础类的使用要求•使用数据库连接池•不自带数据库连接池,需使用第三方提供的数据库连接池•Resin•Weblogic•其他•默认的数据连接池名是OracleDB数据库访问基础类DBConnectionSingleResultSetDBSource接口DataSetInterfaceDBCacheSource接口ResultSetCacheResultSet接口Blob1-使用*数据类型CacheBlob****1-使用*数据库数据导入导出基础类库•数据库数据导入导出基础类库实现了•将Oracle数据库中的数据导出到不同格式的数据文件中•将不同格式的数据文件中的数据导入到数据库中•数据库数据导入导出基础类包括•Dbf数据的导入导出•Excel数据的导入导出•Oracle数据库中的数据导出到PDF文件中数据库数据导入导出基础类库•Dbf数据的导入导出•功能说明•将Oracle数据库中的数据导出到Dbf文件中•将Dbf文件中的数据导入到Java的数据对象或Oracle数据库中•使用要求•目前只支持DBASEIII标准的Dbf文件,不支持其他标准(例如DBASEIV)的Dbf文件•基础类只支持对文件系统中的Dbf文件进行导入导出的功能。不支持从数据流中导出Dbf数据,或将Dbf数据导出到数据流中•Dbf文件导入导出基础类通过数据库访问基础类访问Oracle数据库•调用类•org.thcic.datafile.dbf.*数据库数据导入导出基础类库•Excel数据的导入导出•功能说明•将Oracle数据库中的数据导出到Excel文件中•将Excel文件中的数据导入到Java的数据对象中•使用要求•Excel导入导出基础类使用了第三方的Java库,因此需要使用库文件jxt.jar•调用类•org.thcic.datafile.exc