OA系统整体设计及约定
一、分层
3层((View+Action)+(Service+Dao)),每一层相对独立,达到解耦和的目的,可以轻松地替换掉某一层。
View JSP/serlvet/action
↓
Service 接口/实现类
↓
Dao 接口/实现类
1,上面层调用下面层,层与层之间使用接口。
2,每一层中除了下一层的接口外,不能调用其他层特有的类或接口。
3,层与层之间传递数据可以使用Domain。
二、所用技术
Struts2(2.1.8.1) + Hibernate(3.6.0 ) + Spring(2.5 ) + JBPM(4.4) + Junit (4)+ jQuery(1.4) + CKEditor...
三、开发环境
Windows+ Tomcat + Eclipse/MyEclipse + MySQL + IE/FireFox
四、代码规范
代码格式:Ctrl +Shift + F
命名规范:驼峰命名法,遵循java规范
五、一些约定
utf-8
id: Long
六、项目计划
功能 |
知识点 |
1,搭建环境+基础功能 a) Dao设计 |
1. Struts基础 2. Hibernate基础 |
2,组织用户管理 a) 岗位管理 b) 部门管理 c) 用户管理 |
1. 一般的实体设计 2. 实体映射(映射文件) 3. 增删改查功能 4. 树状显示 5. 使用jQuery.validate进行表单验证 |
3,系统权限 a) 创建权限 b) 分配权限 c) 使用权限 |
1. jQuery的一般使用 2. 权限控制方案 |
4,论坛 a) 论坛管理 b) 论坛基本功能 c) 文章管理 |
1. 分页 2. 在线编辑器FCKeditor |
5,jBPM +审批流转 a) 工作流框架jBPM b) 审批流转功能 |
1. 工作流框架jBPM 2. 工作流的一般应用 |
搭建环境
一、数据库
mysql>create database xsyoa default character set utf8;
【在my.ini文件中修改默认的编码,status命令查看】
QueryOK, 1 row affected (0.03 sec)
mysql>show create database xsyoa;
二、MyEclipse工程
1,新Web工程,并把编码设为utf-8【工程properties】
2,添加框架环境
Junit
直接添加,增加库就行了junit4.4.jar
Struts2
jar包,从blank.war中拷贝过来
1,添加${Struts2_Home}/apps/struts2-blank-2.1.8.1.war/WEB-INF/lib/*.jar
2,添加struts2-spring整合插件的jar:${Struts2_Home}/lib/struts2-spring-plugin-2.1.8.1.jar
struts.xml, web.xml
【<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.
ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>】
【<!-- 配置开发模式,以后修改了不用重新发布 -->
<constantname="struts.devMode"value="true"/>
<!--主题配置成simple,struts在输出的时候直接输出
最简单的标签,样式上不管,由程序员自己写 -->
<constantname="struts.ui.theme"value="simple"/>
<!--严格规定.action才由struts处理 -->
<constantname="struts.action.extension"value="action"/>
<!-- 定义全局的国际化资源文件 -->
<constant name="struts.custom.i18n.resources"value="MessageResources"></constant>】
Hibernate
jar包:核心包hibernate3.jar,required, jpa, c3p0, jdbc驱动
1,添加${HIBERNATE_HOME}/hibernate3.jar
2,添加${HIBERNATE_HOME}/lib/required/*.jar
${HIBERNATE_HOME}/lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar
3,添加 JDBC 驱动包,mysql-connector-java-5.1.5-bin.jar
4,添加slf4j-log4j12-1.5.8.jar、log4j-1.2.15.jar,
5,添加c3p0-0.9.1.2.jar
hibernate.cfg.xml, *.hbm.xml【根据设计实体】
Spring
jar包,spring2.5很稳定【带了其他很多相关的包】:核心包,aspectj包(AOP)、cglib,logging
1,添加${SPRING_HOME}/dist/spring.jar
2,添加${SPRING_HOME}/lib/aspectj/*.jar(共2个)
3,添加${SPRING_HOME}/lib/cglib/cglib-nodep-2.1_3.jar
5,添加${SPRING_HOME}/lib/jakarta-commons/commons-logging.jar(1.1.1版)
6,添加工具jar包:commons-codec.jar,commons-lang.jar
appicationContext.xml/beans.xml
【<!-- 配置自动扫描和装配,这样可以使用注解 -->
<!-- 会扫描该包和其子包,多个包用逗号隔开 -->
<context:component-scanbase-package="com.xsy.oa"/>】
声明一个bean,不加名就是类名第一个字母小写
@Component("beanName")
@Controller
@Service
@Repository
配置bean的scope
@Scope("prototype")
注入bean
@Resource
3,整合SSH
Struts2与Spring整合【action交由spring管理,方面注入属性,像service,sessionFactory】
Syst打印当前方法名
1,在web.xml中配置Spring的监听器【Spring在web环境中的通用,从文档中拷贝过来】【<!-- spring的初始化容器的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>】
2,加一个jar包:struts2的插件struts2-spring-plugin-2.1.8.1.jar
整合成功后【<!-- 与spring整合后,class可以写名称,当然也可以写全名-->
<actionname="test"class="testAction">】
Hibernate与Spring整合【管理SessionFactory实例(单例),声明式事务管理】
配置sessionFactory
【<!-- 导入外部的properties文件 -->
<context:property-placeholderlocation="classpath:jdbc.properties"/>
<!-- 配置sessionFactory -->
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--指定hibernate配置文件路径 -->
<propertyname="configLocation"value="classpath:hibernate.cfg.xml"/>
<!--配置C3P0数据库连接池 -->
<propertyname="dataSource">
<!--因为这个数据源就他自己用,所以配置成匿名对象 -->
<beanclass="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--数据库连接信息 -->
<propertyname="driverClass"value="${driverClass}"></property>
<propertyname="jdbcUrl"value="${jdbcUrl}"></property>
<propertyname="password"value="${password}"></property>
<propertyname="user"value="${user}"></property>
<!--自己的管理信息 -->
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<propertyname="initialPoolSize"value="3"></property>
<!--连接池中保留的最小连接数。Default: 3 -->
<propertyname="minPoolSize"value="3"></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<propertyname="maxPoolSize"value="5"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<propertyname="acquireIncrement"value="3"></property>
<!--控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
<propertyname="maxStatements"value="8"></property>
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<propertyname="maxStatementsPerConnection"value="5"></property>
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<propertyname="maxIdleTime"value="1800"></property>
</bean>
</property>
</bean>】
【<!-- 配置声明式事务管理 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<propertyname="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driventransaction-manager="txManager"/>】
【使用SessionFactory.getCurrentSession执行hibernate操作时,hibernate的操作默认必须包含在一个transaction中,也就是开始要用session.begionTransaction得到一个transaction 实例(譬如tx),操作结束时在这个实例上进行事务的提交tx.commit或回滚tx.rollback.如果这些CRUD操作不被包括在一个具体的transaction中,hibernate就会抛出{org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here}异常。
在实际的SSH web应用开发中,我们通常用spring来进行事务的管理。我们一般不会在dao层使用transaction,事务被配置在service层上更为合理,因为业务层方法表示逻辑上的一个原子操作。在这种环境下,如果你遇到上述异常,请考虑一下service层上没有配置transaction,transaction有没有打开!
】
4,资源分类
源码文件夹
• src 项目源代码
• config 配置文件
• test 单元测试
WebRoot文件夹
• script JavaScript脚本文件
• style CSS样式文件
• WEB-INF/jsp jsp页面(再创建子文件夹分类存放)
包名 |
说明 |
cn.itcast.oa.domain |
实体(Domain) |
cn.itcast.oa.dao |
Dao接口 |
cn.itcast.oa.dao.impl |
Dao的实现类 |
cn.itcast.oa.service |
Service接口 |
cn.itcast.oa.service.impl |
Service的实现类 |
cn.itcast.oa.view.action |
Struts的Action |
cn.itcast.oa.util |
一些工具类 |
cn.itcast.oa.cfg |
|
cn.itcast.oa.filter |
5,配置日志
slf4j
JDK logging --> logging.properties
Log4j -->log4j.properties
最终准备完成的环境如下