Java_SSH三大框架整合

Java

三大框架整合(HSS)Hibernate&Struts&Spring

Struts显示页面,做显示用的,Hibernate用来连接数据库,Spring用来连接StrutsHibernate

Hibernate框架,通过映射,和数据库表之间建立对应关系,映射文件在

这是Hibernate框架的机制,例如,数据库中有表为User_Tb,这个文件里的User.java中的属性则只是一些getset方法,如下图

设置完这些属性后,只需在配置文件(hibernate.cfg.xml)中把er.hbm.xml关联进去,就已经建立了和数据库的表的一一对应关系,如下图:

配置struts,首先配置struts.xmlstruts.properties

struts.properties配置如下:

struts.action.extension=do(配置扩展名,如果你在*.xml中配置的actionname属性为register,那么就只有register.do才能激发其对应的action方法)

struts.multipart.parset=jakarta

struts.multipart.saveDir=/temp

struts.objectFactory=spring

struts.objectFactory.spring.autoWire=name

每次执行操作,都要按照这个部署;Structs框架,利用其配置文件(struts.xml,struts.propoties)及其所对应的action,则可以简化以上的部署,struts内部的一些封装的类,已经将这些与数据库的互动做了封装,其配置文件如下(为了便于管理,可以将*.xml配置文件单独写出来,最后直接利用import标签将其加载到struts.xml,useroper.xml为例)

Struts的作用就是显示作用,当其与web页面结合时,*.xml中配置好后,可以在其对应的action方法中直接利用get,set方法取得页面中表单项的属性值,在这个三大框架整合中,最后就是利用这个方法获得表单中的username,;也可以说,struts负责的就是页面跳转时的动作,因为页面跳转时需要动态的获得一些值,struts由于其内部封装的方法,可以很便捷的实现这些功能,如果要手写一些硬代码而不利用struts框架,则必须使用setAttributesession来取得值

Actionclass属性,对应的应该是action的类名(com.softeem.action.RegisterAction)这里利用了Spring框架的一些动作,在此写上useroperaction(它代表了com.softeem.action.RegisterAction)即可.

经由spring框架自动生成的配置文件(applicationContext.xml),struts.xml一样,对于applicationContext.xml的配置,同样也是写在其他的*.xml,然后导入applicationContext.xml,

applicationContex_action.xml为例.

在此bean,可以看到已经把class=”com.softeem.action.RegisterAction”配置到bean,因此在以上的useroper.xml配置中,可以直接将class的属性写为此beanid,引进此bean,

Spring的用法大致如此,在三大框架整合的这个例子中,还有其他地方用到Spring框架的东西.

struts.xml,只需加入一行代码即可,如下图:

当在浏览器输入*.do(这里由于前面所配置,应该是register.do),即可激发此动作(执行此类中的execute()方法,当然,如果在*.xml中配置了方法名,则会执行你指定的方法,不指定的话,才会执行此默认的execute()方法

本例子是一个模板,有分层思想,如果不分层直接在后面加上this.getHibernateTemplate.save()就可以完成数据的插入了,在这里分层思想就是:struts模板只是负责页面,在此也就是负责了取得页面表单中的值,而具体与数据库交互,则交给Hibernate框架.

执行.addUser()这个方法是必须获得UserOperService对象才行,在此,此方法体中没有new实例的代码,这里利用了spring框架,spring框架中配置bean,替代了new的方法,在之前的applicationContex_action.xml视图中,可以清晰的看见,其配置的bean,已经将com.softeem.action.RegisterAction中的属性userOperService关联到id=”userservice

“的bean,而此bean如下:applicationContex_service.xml

可以看到,bean的配置,直接指向了com.softeem.dao.UserOperDaoImp,spring的框架利用这种模式再加上其自身封装的类,实现了这种方式来代替new实例,

因此,action方法体中的useroperservice就是UserOperDaoImp的对象;

同样,在此bean,他还为自己的一个属性(userOperDaoImp)用相同的形式将其实例化为UserOperDaoImp的一个对象,同样是利用的导入外部bean的形式,这种一层套一层的导入形式,是一种思想

然后,利用对象调用其自身方法,经过这一层,再次调用到以下的类中

publicclassUserOperDaoImpextendsHibernateDaoSupportimplementsIUserOperDao{

//Transactiontran=null;

//Sessionsession=null;

publicvoidaddUser(Useruser){

//TODOAuto-generatedmethodstub

//System.out.println("��service����!");

//session=HibernateSessionFactory.getSession();

//

//

//tran=session.beginTransaction();

//session.save(user);

//tran.commit();

////System.out.println("��ݲ���ɹ�!");

//if(session!=null){

//session.close();

//}

this.getHibernateTemplate().save(user);

System.out.println("service调用!数据成功插入!");

}

在被调用的方法体只有一句代码,实现了数据的插入,也是利用了hibernate框架,被注释的是不用框架时插入数据的方式

在这个层次中,struts,hibernate,spring各司其职,,简要流程大概为:页面提交表单后,激发action动作,然后struts框架负责将其内容提取,提取后交给service(服务器)处理,service最终将其交给dao(hibernate框架中的dao),而在这些类之间相互跳转调用其方法时,spring在期间负责实例化类,获得对象,hibernatestruts间起衔接作用

以下方法,是可以实现建表的功能,当配置好hibernate映射文件时,可以用此方法在数据库中建立表,可以将其看为hibernate反转的逆方法

publicclassExportDB{

publicstaticvoidmain(String[]args){

Configurationconfig=newConfiguration().configure();

SchemaExportexport=newSchemaExport(config);

export.create(true,true);

}

}

下面的配置文件是配置spring的事务,也就是在执行方法之前的一些另外执行的方法来提醒用户

这些网址声明就相当于java类中的导包,需要使用哪个标签,就必须把那个标签的地址给导进来

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd

">

<beanid="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<propertyname="configLocation"value="classpath:hibernate.cfg.xml">

</property>

</bean>

<!--

配置事务管理器

-->

<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<!--sessionFactoryHibernateTransactionManager类的属性名,必须这么写-->

<propertyname="sessionFactory">

<!--指定需要管理事务的SessionFactory,即上面配置的-->

<refbean="sessionFactory"/>

</property>

</bean>

<!--

配置事务传播特性

配置自己的异常

-->

<tx:adviceid="txAdvice"transaction-manager="transactionManager">

<tx:attributes>

<tx:methodname="add*"propagation="REQUIRED"/>

<tx:methodname="del*"propagation="REQUIRED"/>

<tx:methodname="update*"propagation="REQUIRED"/>

<tx:methodname="*"read-only="true"/>

</tx:attributes>

</tx:advice>

<!--配置AOP,即使用AOP的方式将事务进行配置起来-->

<aop:config>

<aop:pointcutid="allManagerMethod"

expression="execution(*com.manager.*.*(..))"/>

<!--

定义通知者(即advisor,它与aspect一样,它是由PointcutAdvice组成的),一般用于事务的配置

*pointcut-ref:指定要使用的Pointcut,这里指定id即可

*advice-ref:指定Advice,这里指定id即可

*<aop:advisor>的含义就是将哪个Advice应用到约定的范围(即Pointcut指定的)上去

-->

<aop:advisorid="daoAdvice"pointcut-ref="allManagerMethod"

advice-ref="txAdvice"/>

</aop:config>

</beans>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值