精华帖 (0) :: 良好帖 (1) :: 新手帖 (2) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-01
最后修改:2010-03-14
集成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 <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>*.action</url-pattern> </filter-mapping> 然后在classpath中创建struts.xml配置文件。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.convention.default.parent.package" value="default-package" /> <constant name="struts.convention.package.locators" value="action" /> <package name="default-package" extends="convention-default"> <default-action-ref name="index" /> <action name="index" > <result>/WEB-INF/content/index.jsp</result> </action> </package> </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配置文件路径,可以使用*通配符结尾。 <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 <?xml version="1.0" encoding="UTF-8"?> <beans> <context:component-scan base-package="persistence,service,action,aop"/> <aop:aspectj-autoproxy /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" > <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" > <property name="configLocation" value="classpath:hibernate.cfg.xml" /> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" > <property name="sessionFactory" ref="sessionFactory" /> </bean> </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 version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sshdemo</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.current_session_context_class">thread</property> <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 最小连接数 --> <property name="hibernate.c3p0.min_size">5</property> <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --> <property name="hibernate.c3p0.timeout">120</property> <!-- 最大的PreparedStatement的数量 --> <property name="hibernate.c3p0.max_statements">100</property> <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒--> <property name="hibernate.c3p0.idle_test_period">120</property> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="hibernate.c3p0.acquire_increment">2</property> <!-- 每次都验证连接是否可用 --> <property name="hibernate.c3p0.validate">true</property> <mapping class="domain.Task" /> </session-factory> </hibernate-configuration> 四:TaskList Demo详细代码查看附件,附件一使用maven构建。进入目录,使用mvn jetty:run启动项目,记住创建sshdemo mysql数据库。附件二为Eclipse项目,包含所有依赖包。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-08
怎么没看到创建数据库的sql脚本
|
|
返回顶楼 | |
发表时间:2009-04-09
<property name="hibernate.hbm2ddl.auto">update</property>
Hibernate自动生成 |
|
返回顶楼 | |
发表时间:2009-04-13
我挂你这后面的程序出现如下问题:
严重: Exception starting filter struts2 java.lang.NullPointerException at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading |
|
返回顶楼 | |
发表时间:2009-04-13
xinlingdeqihang 写道 我挂你这后面的程序出现如下问题: 严重: Exception starting filter struts2 java.lang.NullPointerException at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading 是不是没有加足够的jar包?堆栈信息不够,无法判断,推荐是用maven版本的使用mvn jetty:run运行 |
|
返回顶楼 | |
发表时间:2009-05-11
xinlingdeqihang 写道 我挂你这后面的程序出现如下问题: 严重: Exception starting filter struts2 java.lang.NullPointerException at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading tomcat的路径中是不是包含了空格? |
|
返回顶楼 | |
发表时间:2009-05-11
江南白衣的springside集成的很好,建议楼主参考。
|
|
返回顶楼 | |
发表时间:2009-05-12
去struts2 官方方看看吧,都给你弄好了!!
|
|
返回顶楼 | |
发表时间:2009-05-13
kaki 写道 江南白衣的springside集成的很好,建议楼主参考。
参考过,做的不错。前不久个springside做了个课程设计。 |
|
返回顶楼 | |
发表时间:2010-01-09
我觉得你弄的环境没有配置Hibernate的annotation方式啊
|
|
返回顶楼 | |
浏览 24560 次