集成struts2 spring hibernate,使用注解

集成struts,spring,hibernate时,对于初学者来说最大的麻烦就其繁琐的xml配置文件。现在三者都对基于注解的配置提供了良 好的支持。在struts2中,使用convent plugin,得益于annotation和规约,配置过程得以大大减少。在spring2.5也可以使用@Autowired,进行注入,使用 @Controller,@Service,@Repository注解,自动定义bean,还支持annotation风格的声明式事务支持,以及 aspectJ类似的AOP。hibernate也可以使用JPA标准注解定义实体描述,避免使用mapping文件。

当然,对于annotation和xml风格的配置,谁更好,更多依赖个人兴趣。但使用annotation确实减少了很多配置工作量。本文采用 annotation风格的配置,以TaskList为例子讲解struts2 spring hibernate的集成。项目文件见附件。

一:配置struts2。

首先在web.xml文件中配置filter

Xml代码   收藏代码
  1. < filter >   
  2.     < filter-name > struts2 </ filter-name >   
  3.     < filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter-class >   
  4. </ filter >   
  5.   
  6. < filter-mapping >   
  7.     < filter-name > struts2 </ filter-name >   
  8.     < url-pattern > *.action </ url-pattern >   
  9. </ filter-mapping >   

 然后在classpath中创建struts.xml配置文件。

Xml代码   收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  3.         "http://struts.apache.org/dtds/struts-2.1.dtd">   
  4. < struts >   
  5.     < constant   name = "struts.devMode"   value = "true"   />   
  6.     < constant   name = "struts.convention.default.parent.package"   value = "default-package"   />   
  7.     < constant   name = "struts.convention.package.locators"   value = "action"   />   
  8.     < package   name = "default-package"   extends = "convention-default" >   
  9.   
  10.         < default-action-ref   name = "index"   />   
  11.   
  12.         < action   name = "index"    >   
  13.             < result > /WEB-INF/content/index.jsp </ result >   
  14.         </ action >    
  15.   
  16.     </ package >   
  17. </ struts >   

struts.devMode属性,配置启用调试,将有更多的错误信息输出,便于排错。struts.convention.default.parent.package属性,指定使用注解标注的控制器的默认包。可以在这个默认包中配置全局信息。

struts.convention.package.locators属性,为查找控制器包路径的关键字。如 com.mycompany.action,com.mycompany.action.user,都会被struts2扫描。里面有继承至Action 的类,或类名以Action结尾的类,都会做为Action处理。

<default-action-ref name="index" />指定了默认action,如果指定的action不存在则访问该action。

把struts2-spring-plugin-2.1.6.jar添加到classpath中,struts2会自动扫描struts- plugin.xml文件,该文件自动注册了com.opensymphony.xwork2.ObjectFactory,完成和spring的集成。

二:配置spring

在web.xml中加入ContextLoaderListener,用以启动spring容器。用contextConfigLocation指定spring配置文件路径,可以使用*通配符结尾。

Xml代码   收藏代码
  1. < listener >   
  2.     < listener-class > org.springframework.web.context.ContextLoaderListener  
  3.     </ listener-class >   
  4. </ listener >   
  5. < context-param >   
  6.     < param-name > contextConfigLocation </ param-name >   
  7.     < param-value > classpath:/applicationContext.xml </ param-value >   
  8. </ context-param >   

 配置applicationContext.xml

Xml代码   收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < beans >   
  3.   
  4.     < context:component-scan   base-package = "persistence,service,action,aop" />   
  5.       
  6.     < aop:aspectj-autoproxy    />   
  7.   
  8.     < tx:annotation-driven   transaction-manager = "transactionManager"   />   
  9.       
  10.     < bean   id = "transactionManager"   class = "org.springframework.orm.hibernate3.HibernateTransactionManager"   >   
  11.         < property   name = "sessionFactory"   ref = "sessionFactory"   />   
  12.     </ bean >   
  13.   
  14.     < bean   id = "sessionFactory"   class = "org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"   >       
  15.         < property   name = "configLocation"   value = "classpath:hibernate.cfg.xml"   />   
  16.     </ bean >   
  17.   
  18.     < bean   id = "hibernateTemplate"   class = "org.springframework.orm.hibernate3.HibernateTemplate"   >   
  19.         < property   name = "sessionFactory"   ref = "sessionFactory"   />   
  20.     </ bean >   
  21.       
  22. </ beans >   

 <context:component-scan />指定Bean扫描的包,多个包逗号隔开,任何标注了@Component,@Controller,@Service,@Repository的类,都会被自动识别为bean。

<aop:aspectj-autoproxy />声明aspectj动态代理,启用注解驱动的aspectj配置。

<tx:annotation-driven />启用注解驱动的声明事务支持。

然后定义了sessionFactory和transactionManager,hibernateTemplate用来注入到Dao中,取代继承的方式使用spring对hibernate的集成支持。

三:hibernate配置

hibernate配置独立配置,方便修改。

Xml代码   收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
  3. < hibernate-configuration >   
  4.     < session-factory >   
  5.         < property   name = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ property >   
  6.         < property   name = "hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >   
  7.         < property   name = "hibernate.connection.url" > jdbc:mysql://localhost:3306/sshdemo </ property >   
  8.         < property   name = "hibernate.connection.username" > root </ property >   
  9.         < property   name = "hibernate.connection.password" > root </ property >   
  10.         < property   name = "hibernate.hbm2ddl.auto" > update </ property >   
  11.         < property   name = "hibernate.show_sql" > true </ property >   
  12.         < property   name = "hibernate.format_sql" > true </ property >   
  13.         < property   name = "hibernate.current_session_context_class" > thread </ property >         
  14.   
  15.         <!-- 最大连接数 -->   
  16.         < property   name = "hibernate.c3p0.max_size" > 20 </ property >   
  17.         <!-- 最小连接数 -->   
  18.         < property   name = "hibernate.c3p0.min_size" > 5 </ property >   
  19.         <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->   
  20.         < property   name = "hibernate.c3p0.timeout" > 120 </ property >   
  21.         <!-- 最大的PreparedStatement的数量 -->   
  22.         < property   name = "hibernate.c3p0.max_statements" > 100 </ property >   
  23.         <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->   
  24.         < property   name = "hibernate.c3p0.idle_test_period" > 120 </ property >   
  25.         <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->   
  26.         < property   name = "hibernate.c3p0.acquire_increment" > 2 </ property >   
  27.         <!-- 每次都验证连接是否可用 -->   
  28.         < property   name = "hibernate.c3p0.validate" > true </ property >   
  29.   
  30.         < mapping   class = "domain.Task"   />   
  31.     </ session-factory >   
  32. </ hibernate-configuration >   

  四:TaskList Demo

详细代码查看附件,附件一使用maven构建。进入目录,使用mvn jetty:run启动项目,记住创建sshdemo mysql数据库。附件二为Eclipse项目,包含所有依赖包。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值