`
kevin-qingzhan
  • 浏览: 84078 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

struts,spring,hibernate,convent plugin

阅读更多
集成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代码
<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>
<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代码
<?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>
<?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" 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>
<?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代码
<?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>
<?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项

目,包含所有依赖包。
分享到:
评论

相关推荐

    Convent:用于生成随机常规提交消息的项目

    描述了解有关Convent套件的信息。什么是修道院? Convent是用于生成遵循提交消息的一组应用程序和库。动机有时您可能会发现自己需要生成遵循常规提交规范的随机提交消息。 您可能需要试用分支和版本控制策略,或使用...

    convertToRinex-v2.25.0.rar

    convertToRinex-v2.25.0.rar

    Convert To RINEX 3.07

    包括天宝的数据解码软件Convert To RINEX 3.07版本和TrimbleCFGUpdate程序。安装时首先安装TrimbleCFGUpdate,再安装Convert To RINEX。

    sfaf:适用于MCEB Pub 7或SFAF的工具

    SFAF 该SFAF存储库是用于处理MCEB Pub 7或... 类似于基于Configuration over Code的Spring Configuration over Code方法,该方法侧重于外部化代码之外的所有配置,以仅使用配置来重用/重新部署。 此外,与“ Convent

    pdf转换阅读器破解中文版

    最新中文破解版,支持pdf编辑,转换格式为word,安装时选中convent。

    数据库技术sql数据类型转换

    sql数据类型转换(cast() and convent())函数),举例说明具体使用方法

    rbitmap:roaringbitmap的位图工具

    rbitmapThis is a command line tool wrapper around .这是一个基于 的命令行工具。...将文件转换为bitmap./sbin/fileToBitmap test/uid.txt test/uid.bitmap#convent to file;将二进制bitmap转化为可

    蔡氏电路matlab仿真代码-u-convert:在越南的Unicode,VNI,TCVN3...之间转换

    matlab仿真代码转换 介绍 UConvert当前允许您在越南语编码之间进行转换。 目前支持4种编码: 统一码 VNI TCVN3 VIQR 将来将支持其余的编码。...UConvert中用于转换的数据来自以下地址: ...UConvert在和上可用,因此您可以...

    Radixjs是一个JavaScript开发用于数字进制转换的库

    Radix.js is a simple javascript module to convent number to 2-64 radix, decimal supported. 一个用于数字进制转换的 JavaScript 模块,默认支持 2-64 进制(可自定义),支持小数的进制转化。

    天宝GPS数据转换.zip

    天宝Gps数据转换工具DatToRinex是一款天宝Gps数据转软件Convent to RINEX,可将GPS静态观测数据DAT格式文件转换为RINEX格式的数据文件,需要先安装TrimbleCFGUpdate数据库支持文件,然后打开DatToRinex软件。

    DES、3DES加解密含MAC加密

    包含DES、3DES加解密,MAC加密、ISO9797算法的mac计算(DES.java、ISO9797.java、MAC.java)。也有md5加密、sha-1加密、sha-256...同时convent.java是对字符串或者byte数组进行处理的类,可以单独在其他项目中使用。

    Efficient adiabatic silicon-on-insulator waveguide taper

    A silicon-on-insulator-based adiabatic waveguide taper with a high coupling efficiency and small footprint is presented.... Previously, this transmission level could only be achieved using a convent

    org.eclipse.angularjs.category-0.9.0.zip

    打开我们的eclipse,点击导航栏中的help,...安装完成后,会提示重启eclipse,重启;重启eclipse后,选中你要使用angularjs插件的项目,右键--Configure--Convent to Angularjs project....这样js代码就可以自动提示了。

    .js_convention:子模块测试

    GS SHOP IT创新中心JavaScript编码样式指南 这是GS SHOP IT Innovation Center开发JavaScript约定。 GS SHOP中的所有开发人员都可以提供它。... git submodule add git@github.com/imazine/js_convent

    project-3m-database

    选择Belly Convent,之所以选择项目名称,是因为用户进入页面后将在一段时间内转换为世界各地的高级美食世界。 有时会是高级美食,而有时会是非常有名的食谱,代表了非常好的一种美食,而且味道也非常好,因此在肚皮...

    PDF Toolkit-crx插件

    语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,English (UK),English (United States),Filipino,Français,Kiswahili,Nederlands,Norsk,Tiếng Việt,Türkçe,...PDF essential tools: Merge, Convent, Dow

    uCOSII [繁體版]

    convent ions used. Before getting into the description of the examples, I describe the code used to access some of the services provided on a PC. Chapter 2, Real-Time Systems Concepts Here, I ...

    数据库数据转换工具!

    mysql数据转换为oracle中的数据

Global site tag (gtag.js) - Google Analytics