新建工程:
一、基本的包、类
1. application,控制层,编写Action类。
2. domain,业务层,编写接口和接口实现类。
3. respository,持久层,存放Hibernate反响生成的类。
4. util公共包,存放公共类。
5. webRoot下面是视图层。
6. 分类的文件夹有css 、images 、js 、error页面、
7. 把37个jar文件拷贝到lib目录下面。
二、设计过程:
1.需求分析,画出用例图。
2.画出逻辑关系图。
3. OOP,设计数据库。
配置文件:
Spring的:applicationContext.xml
1.定义C3P0数据源:
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- 指定连接数据库的驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!-- 指定连接数据库的URL -->
<property name="jdbcUrl" value="jdbc:mysql://localhost/exam?characterEncoding=utf-8"/>
<!-- 指定连接数据库的用户名 -->
<property name="user" value="root"/>
<!-- 指定连接数据库的密码 -->
<property name="password" value="root"/>
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="50"/>
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="5"/>
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="25"/>
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdleTime" value="20"/>
</bean>
2.定义Hibernate的SessionFactory。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>exam/ssh/repository/book/Book.hbm.xml</value>
<!-- 当新增加了一个DAO时,需要手动配置 -->
<value>exam/ssh/repository/bookcontent/Bookcontent.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
3.定义事务。
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<!--服务类的对象放到这里给spring管理 -->
<value>bookContentService</value>
<value>bookService</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
8. 自定义层。
<!-- 业务层 -->
<bean id="bookService" class="exam.ssh.domain.book.impl.BookServiceImpl">
<property name="bookDAO" ref="bookDAO"></property>
<property name="bookQuery" ref="bookQuery"></property>
<property name="pageUtil" ref="pageUtil"></property>
</bean>
<!-- 书本内容开始 手动 bookContentService要跟定义的对象名一致-->
<bean id="bookContentService" class="exam.ssh.domain.bookcontent.impl.BookcontentImpl">
<property name="bookcontentDAO" ref="bookcontentDAO"></property>
</bean>
<!-- 书本内容结束 -->
<!-- 持久层 -->
<bean id="bookDAO" class="exam.ssh.repository.book.BookDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 当新增加一个DAO时,自动生成 -->
<bean id="bookcontentDAO"
class="exam.ssh.repository.bookcontent.BookcontentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="bookQuery" class="exam.ssh.repository.book.BookQuery">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="commonQuerySingleTable" ref="CommonQuerySingleTable" />
</bean>
<bean id="CommonQuerySingleTable" class="exam.ssh.repository.common.CommonQuerySingleTable">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 基础层 -->
<bean id="pageUtil" class="exam.ssh.util.PageUtil"/>
Struts2的struts2.xml
1. 设置编码问题:
<!-- 编码设置 -->
<!-- 如果不能提交中文,则注释掉这个编码设置 -->
<constant name="struts.custom.i18n.resources" value="messageResource" />
<constant name="struts.i18n.encoding" value="gb2312" />
2. 接下来定义action。
<package name="exam" extends="struts-default">
<!-- 单选题模块 开始-->
<!-- 查找全部 -->
<action name="singlelist" class="exam.action.SingleAction"
method="execute">
<result name="success">/testSingle/singlelist.jsp
</result>
</action>
</package>
Web.xml
1.让web.xml关联到applicationContext.xml的配置。
<!-- 这个是让web.xml关联到applicationContext.xml的配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
2用于初始化Spring的IOC容器的配置Listener。
<!-- 用于初始化Spring的IOC容器的配置Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3. 定义Struts2的FilterDispathcer的Filterr。
<!-- 定义Struts2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>