ssh注释配置

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

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

一:配置struts2。

首先在web.xml文件中配置filterXml代码

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.<?xmlversion="1.0"encoding="UTF-8"?>

2.<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN"

3."http://struts.apache.org/dtds/struts-2.1.dtd">4.<struts>

5.<constantname="struts.devMode"value="true"/>

6.<constantname="struts.convention.default.parent.package"value="default-package"/>

7.<constantname="struts.convention.package.locators"value="action"/>

8.<packagename="default-package"extends="convention-default">9.

10.<default-action-refname="index"/>11.

12.<actionname="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-refname="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.xmlXml代码

1.<?xmlversion="1.0"encoding="UTF-8"?>2.<beans>3.

4.<context:component-scanbase-package="persistence,service,action,aop"/>5.

6.<aop:aspectj-autoproxy/>7.

8.<tx:annotation-driventransaction-manager="transactionManager"/>9.

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

11.<propertyname="sessionFactory"ref="sessionFactory"/>

12.</bean>13.

14.<beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

15.<propertyname="configLocation"value="classpath:hibernate.cfg.xml"/>16.</bean>17.

18.<beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate">

19.<propertyname="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.<?xmlversion="1.0"encoding="UTF-8"?>

2.<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">3.<hibernate-configuration>4.<session-factory>

5.<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

6.<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

7.<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/sshdemo</property>

8.<propertyname="hibernate.connection.username">root</property>

9.<propertyname="hibernate.connection.password">root</property>

10.<propertyname="hibernate.hbm2ddl.auto">update</property>

11.<propertyname="hibernate.show_sql">true</property>12.<propertyname="hibernate.format_sql">true</property>13.<propertyname="hibernate.current_session_context_class">thread</property>14.

15.<!--最大连接数-->

16.<propertyname="hibernate.c3p0.max_size">20</property>

17.<!--最小连接数-->

18.<propertyname="hibernate.c3p0.min_size">5</property>19.<!--获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒-->

20.<propertyname="hibernate.c3p0.timeout">120</property>

21.<!--最大的PreparedStatement的数量-->

22.<propertyname="hibernate.c3p0.max_statements">100</property>

23.<!--每隔120秒检查连接池里的空闲连接,单位是秒-->24.<propertyname="hibernate.c3p0.idle_test_period">120</property>

25.<!--当连接池里面的连接用完的时候,C3P0一下获取的新的连接数-->

26.<propertyname="hibernate.c3p0.acquire_increment">2</property>

27.<!--每次都验证连接是否可用-->

28.<propertyname="hibernate.c3p0.validate">true</property>29.

30.<mappingclass="domain.Task"/>31.</session-factory>

32.</hibernate-configuration>

四:TaskListDemo

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

相关推荐