跟着汤阳光同志做一个OA系统(二):OA系统整体设计及约定、搭建环境

OA系统整体设计及约定

一、分层

         3层((View+Action)+(Service+Dao)),每一层相对独立,达到解耦和的目的,可以轻松地替换掉某一层。

跟着汤阳光同志做一个OA系统(二):OA系统整体设计及约定、搭建环境_第1张图片

       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

5jBPM +审批流转

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"/>

    <!--主题配置成simplestruts在输出的时候直接输出

    最简单的标签,样式上不管,由程序员自己写 -->

    <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>

       

        <!--自己的管理信息 -->

        <!--初始化时获取三个连接,取值应在minPoolSizemaxPoolSize之间。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数量。如果maxStatementsmaxStatementsPerConnection均为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

StrutsAction

cn.itcast.oa.util

一些工具类

cn.itcast.oa.cfg

 

cn.itcast.oa.filter

 

 

         5,配置日志

                  slf4j

                            JDK logging      --> logging.properties

                            Log4j        -->log4j.properties

 

最终准备完成的环境如下

跟着汤阳光同志做一个OA系统(二):OA系统整体设计及约定、搭建环境_第2张图片

你可能感兴趣的:(跟着汤阳光同志做一个OA系统(二):OA系统整体设计及约定、搭建环境)