首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

集成struts2 spring hibernate,施用注解

2012-08-21 
集成struts2 spring hibernate,使用注解!DOCTYPE struts PUBLIC -//Apache Software Foundation//DTD St

集成struts2 spring hibernate,使用注解
<!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>
<?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配置文件路径,可以使用*通配符结尾。

Xml代码
<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>
<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代码
<?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" >
??????? <property name="sessionFactory" ref="sessionFactory" />
??? </bean>

??? <bean id="sessionFactory" value="classpath:hibernate.cfg.xml" />
??? </bean>

??? <bean id="hibernateTemplate" >
??????? <property name="sessionFactory" ref="sessionFactory" />
??? </bean>
??????
</beans>
<?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" >
?? <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="sessionFactory" >
?? <property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>

<bean id="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代码
<?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 />
??? </session-factory>
</hibernate-configuration>
<?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 />
</session-factory>
</hibernate-configuration>

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

目,包含所有依赖包。

热点排行