本文包含主要内容:简单介绍SSH,以及SSH结合应用,在结合时要注意的问题
写本文的目的:刚则把SSH学完,最近在学习把SSH三个框架结合起来用,老是遇到一些问题,根据我对这些问题的分析,发觉出现这些问题的主要原因是:
——混淆SSH配置文件,
——混淆各个目录下的文件应该解决什么样的问题
因此写本文的最主要的目录是:梳理SSH结合结构,总结易错
文章分类:学习总结
读者类型:Spring刚学完的,
主要参考:百度
一, 简介SSH
1, Struts
1 采用的是MVC模式(Model, View, Controller)其实STRUTS主要管的是M这一层。它以ActionServlet为核心控制器,负责拦截来自用户的请求。然后把所有的请求分发给用户自己提供的ACTION, 用户可以根据自己的需要来写控制逻辑处理JSP负面的请求,并返回结果给JSP。
2,Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2, Hibernate:它对JDBC进行了非常轻量级的对象封装
二,SSH结合
A—— JAVA文件
SRC下的
1 com.demo.domain 存放与数据库对象有关的JAVABEAN 以及数据描述文档,
如User.java User.hbm.xml
2 com.demo.service 存放管理数据库USER表的接口定义 如UserInterface.java
3 com.demo.service.impl 存放UserInterface接口的实现类,主要方法有添加,修改,删除用户
下面只写出一个方法,添加用户
继承了HibernateDaoSupport,就很容易提到getHibernateTemplate这个实例,容易实现数据库的操作,他的实现还依赖于SPRING配置文件
public class UserManagerImpl extends HibernateDaoSupport implements
UserInterface{
public void addUser(User user) {
getHibernateTemplate().save(user);
}
}
我们如何调用此方法来添加一个用户呢?
执行下面的TEST就可以在数据库中添加一个用户
public class TestUser extends TestCase{
public void test(){
ApplicationContext ctx = ClassPathXmlApplicationContext("a*.xml");
UserInterface manager =( UserInterface)ctx.getBean("userManagerImpl");
User user = new User();
manager.addUser(user, 13);
}
只有HIBERNATE的情况下,我们在添加一个用户的操作
// Configuration配置并启动HIBERNATE,创建SessionFactory对象,在HIBERNATE启动过程中,Configuration类的实例先定位映射文档位置,读取配置,然后创建SessionFactory
Configuration config = new Configuration().configure();
//SSessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。
SessionFactory factory = config.buildSessionFactory();
//Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。) Session对象是非线程安全的。 Session session = factory.openSession();
//Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
Query q = session.createQuery("from User");
//Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
Transaction tx = session.beginTransaction();
User user = new User();
session.save(user);
tx.commit();
比较在加入了Spring 之后与之前
A没有加入SPRING 时,对数据库操作主要靠BIBERNATE的五大接口来实现,加入SPRING 后,通过读取配置文件 ,得到操作数据库的实现类来完成数据库操作
B加入SPRING后,操作数据库的实现类继承了HibernateDaoSupport,就很容易提到getHibernateTemplate实例。getHibernateTemplate实例完会有SPRING配置文件注入,因此当getHibernateTemplate出现空指针异常时,请检票配置文件。
4 com.demo..service.web 存放 UserAction.java, UserForm.JAVA用来管理控制页面。
B ——配置文件
SRC下的
applicationContext-action.xml 配置与STRUTS有关的 与STRUTS.CFG.XML相配,并为UserAction传递参数userManager(userManagerImpl对象)
<bean name="/userAction" class="com.dome.web.UserAction">
<property name="userManager">
<ref bean="userManagerImpl"/>
</property>
</bean>
applicationContext-common.xml 配置与HIBERNATE有关的
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocations">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- 配置事务特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置那些类的方法进行事务管理 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution (* com.demo.serivce.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
</aop:config>
管理数据库的类,并反射sessionFactory ,
<bean id="userManagerImpl" class="com.dome.serivce.impl.UserManagerImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
hibernate.cfg.xml HIBERNATE数据库的配置
/WebRoot/web-INF 下的
Struts-config.xml
<action path="/UserAction"
name="userForm"
type="org.springframework.web.struts.DelegatingActionProxy"
scope="request"
parameter="method">
</action>
以前我们在TYPE中配置的是ACTION的地址,直接传给ACTION处理,这里我们配置SPRING的代理处理器,交给SPRING处理
Web.xml
C ——JSP 页面展示文件
WebRoot/user下的
User.jsp
三,总结
1, bean.java(bean.hbm.xml)是要写入数据库中的对象 form.java 是JSP页面的封装。我们从数据库中得到的是BEAN.JAVA, 从页面上得到的是FORM.JAVA
2, getHibernateTemplate由SPRING配置文件注入,如果要调用有getHibernateTemplate的方法,首先要赢取SPRING的配置文件。得到相关的实现类