一、Struts2框架:
Web层框架:1.引入Struts2开发的jar包:
Struts2/apps/struts2-blank.war
* WEB-INF/lib/*.jar
* struts2和spring整合的jar包:
* struts2-spring-plugin-2.3.15.3.jar :整合spring
* struts2-json-plugin-2.3.15.3.jar :整合AJAX
* struts2-convention-plugin-2.3.15.3.jar :使用struts2的注解开发.
2.Struts2开发的配置文件:
web.xml
* 配置核心过滤器:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml
*
3.Struts2开发步骤:
请求---->Action
public class BookAction extends ActionSupport implements ModelDriven<Book>{
// 处理请求:
<span style="white-space:pre"> </span>public String add(){
<span style="white-space:pre"> </span>WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
<span style="white-space:pre"> </span>wac.getBean(“bookService”);
<span style="white-space:pre"> </span>return “addSuccess”
<span style="white-space:pre"> </span>}
}
二、Spring框架:
业务层框架:
Spring3.2 开发最基本jar包
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
AOP开发
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
Spring Jdbc开发
spring-jdbc-3.2.0.RELEASE.jar
spring-tx-3.2.0.RELEASE.jar
Spring事务管理
spring-tx-3.2.0.RELEASE.jar
Spring整合其他ORM框架
spring-orm-3.2.0.RELEASE.jar
Spring在web中使用
spring-web-3.2.0.RELEASE.jar
Spring整合Junit测试
spring-test-3.2.0.RELEASE.jar
* 数据库连接池在Hibernate框架中引入:
web.xml:
<!-- 配置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>
applicationContext.xml
* 引入约束:
log4j.properties:
3.Spring开发步骤:
1.注入Dao
2.事务的管理:(见上一篇)
三、Hibernate框架:
持久层框架:
hibernate3.jar
lib/required/*.jar
jpa/*.jar
Mysql驱动
C3P0连接池
slf4j整合log4j的jar.
hibernate.cfg.xml
映射文件:
3.Hibernate的开发步骤:
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
操作...
tx.commit();
四、Struts2和Spring的整合:
修改struts.xml
<span style="white-space:pre"> </span><package name="default" namespace="/" extends="struts-default">
<action name="book_*" class="cn.itcast.ssh.action.BookAction" method="{1}"></action>
</package>
Struts2整合Spring方式一:
* 通过Struts2常量完成自动装配(按名称)
* 1.在Action中提供一个Service的对象.
* 2.对对象属性提供set方法即可.
Struts2整合Spring方式二:(推荐:)
<span style="white-space:pre"> </span><!-- Action类的配置===========- -->
<bean id="bookAction" class="cn.itcast.ssh.action.BookAction"></bean>
* 在Struts.xml中
<span style="white-space:pre"> </span><action name="book_*" class="bookAction" method="{1}"></action>
* 必须在Spring中手动注入Service:
<span style="white-space:pre"> </span><bean id="bookAction" class="cn.itcast.ssh.action.BookAction">
<property name="bookService" ref="bookService"/>
</bean>
* 千万注意:Struts2框架创建Action的时候是多例的.将Action交给Spring管理了,Spring创建类的时候,创建是单例.scope=”singleton”.单例会有线程安全问题!!!
* scope="prototype"
五、Spring整合Hibernate
使用Hibernate配置,在Spring中直接引入Hibernate的配置文件.1.创建一个BookDao:
2.实体的映射文件:
* Book.hbm.xml
<hibernate-mapping>
<class name="cn.itcast.ssh.vo.Book" table="book">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="price"/>
</class>
</hibernate-mapping>
* 引入映射文件:
3.在Spring的配置文件中直接引入Hibernate的配置文件:
<span style="white-space:pre"> </span><!-- 引入Hibernate的配置文件 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
4.编写DAO中代码完成对数据库插入操作:
* DAO中使用Hiberante. Spring框架提供了HibernateTemplate.
* 在DAO中使用HibernateTemplate.将Hiberante的模板注入到DAO中.
* 在Dao的类上继承HibernateDaoSupport类.
* 只需要在DAO中注入SessionFactory就可以了.
5.把Dao注入给Service:
6.配置事务管理:
<span style="white-space:pre"> </span><!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
7.注解驱动:
<span style="white-space:pre"> </span><tx:annotation-driven transaction-manager="transactionManager"/>
8.使用到事务的类上添加一个注解:
@Transactional
将Hibernate的配置信息交给Spring管理:(不要hibernate的配置文件)
* 数据库连接基本参数:(连接池)
* 可选属性:
* 映射配置:
2.把Hibernate的配置信息交给Spring进行管理:
<span style="white-space:pre"> </span><!-- 配置连接池: -->
<!-- 引入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- c3p0连接池的配置: -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置Hibernate的其他信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的其他属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置引入映射文件 -->
<property name="mappingResources">
<list>
<value>cn/itcast/ssh/vo/Book.hbm.xml</value>
</list>
</property>
</bean>
六、 HibernateTemplate的API的使用:
Serializable save(Object entity) :保存操作
void update(Object entity) :修改操作
void delete(Object entity) :删除操作
<T> T get(Class<T> entityClass, Serializable id) :根据ID查询对象,立即检索
<T> T load(Class<T> entityClass, Serializable id) :根据ID查询对象,延迟检索
List find(String queryString, Object... values) :根据HQL查询
List findByCriteria(DetachedCriteria criteria) :根据离线条件查询
List findByNamedQuery(String queryName, Object... values):命名查询