创建web项目
1,先搞定spring开发包
2,引入spring开发包
3,编写applicationContext.xml文件,先放在src目录下
4,测试spring是否ok
5,加入hibernate开发包
6,因为我们是ssh,所以我们hibernate的核心,就被spring接管了hibernate.cfg.xml文件对象映射文件,SessionFactory在spring文件中配置即可。
7,配置数据源
<!--配置数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close()">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=HiberateProgram"/>
<property name="username" value="sa"/>
<property name="password" value="258005"/>
<!--连接池启动时的初始值
<property name="initialSize" value="3"/>
<!--连接池的最大值
<property name="maxActive" value="500"/>
<!--最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,,一直减少到maxidel为止
<property name="maxIdle" value="2"/>
<!--最小空闲值,当空闲的连接数少于阈值时,连接池就会预申请一些连接,以免洪峰是来不及申请
<property name="minIdle" value="1"/>
</bean>
8,配置SessionFactory对象,后边还有优化
<!--配置会话工厂
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--设置数据源 -->
<property name="dataSource" ref="dataSource"/>规定好的
<!--接管了hibernate对象映射文件
<property name="mappingResources">
<list>
<!--对象关系映射文件存放在这里
<value>com/hanqing/domain/Employee.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.hbm 2ddl.auto=update
hibernate.show_sql=false
hibernate.format_sql=false
</value>
</property>
</bean>
9,编写domain对象(Employee)和我们的映射文件(Employee.hbm.xml)
public class Employee {
private Integer id;
private String name;
private String email;
private java.util.Date hiredate;
private float salary;
set/get方法。。。。。。。。。。
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hanqing.domain">
<class name="Employee">name表示的是类名
<id name="id" type="java.lang.Integer">
<!--会根据你底层的数据库,自动的帮你选择identity,hilo,sqeuence其中的一种数据库适配器中的定义
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="64"/>
</property>
<property name="email" type="java.lang.String">
<column name="email"/>
</property>
<property name="hiredate" type="java.util.Date">
<column name="hiredate"/>
</property>
<property name="salary" type="java.lang.Float">
<column name="salary"/>
</property>
</class>
</hibernate-mapping>
10,测试spring和hibernate是否可以结合使用
11,考虑分层开发
我们编写一个EmployeeServiceInter接口,里边实现各种方法
然后我们写一个EmployeeService实现该接口,并在我们的EmployeeService这个类中定义一个SessionFactory对象
之后,我们在我们的applicationContext.xml当中配置一个bean,含有SessionFactory对象,然后我们在EmployeeService当中就可以自动的进行操作了
12,不合理的地方
13,使用事务管理器来统一管理
配置我们的事务管理器,统一管理SessionFactory的事务
首先配置我们的事务管理器,并启用它
<!--配置我们的事务管理器,name是规定好的,统一管理sessionFactory的事务 ,我们把SessionFactory交给一下的部分来处理 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionMana
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--启用事务注解,如何让事务管理器来管理我们的事务-->
<tx:annotation-driven transaction-manager="txManager"/>
还需要在我们事务管理的类或者方法前边加上注解
此时,我们在方法当中就可以这样使用了
14,整合Struts
1,引入开发包
2,创建struts.xml一般放在我们的src目录下
该文件的标头部分如下
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
3,配置我们的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
15,
配置完这句话之后,启动tomcat之后,就会将spring当中的对象加入内存当中
实例化。在我们还没有调用的时候,就已经有了。
这样我们直接取出来就行了,而不用再调用
以前没有配置之前的获取方式
ApplicationContext ac=new ClassPathXmlApplicationC
EmployeeServiceInter esi=(EmployeeServiceInter)ac.getBean("employeeServiceImp");
现在配置完之后的获取方式(可以直接获取spring容器)
下一步,让spring接管我们的struts
Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
这是因为没有加入struts2-spring-plugin-2.1.6.jar包
1,在struts.xml文件当中,添加如下的代码配置
class指向的是spring容器当中的一个Bean,id
只要我们导入了struts2-spring-plugin-2.1.6.jar就自动的到这里边去找
scope="prototype"request也行表示请求一次实例化一次
这样保证了线程安全
singlton
request
session
gobal session
通过这种方式,我们在loginAction当中的属性就可以直接通过set方法来获取了。
解决Struts中文乱码的问题
1,自己配置过滤器
首先建一个com.hanqing.web.filter的包
新建一个servlet
import javax.servlet.Filter;
在我们的web.xml当中添加如下配置
<!--配置中文乱码的过滤器
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.hanqing.web.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2,使用spring提供的包来完成过滤器的操作啊