• ssh三大框架整合


    名词解释 jar,war,ear

    jar :java archive(封装类)
    包含:class、properties文件,是文件封装的最小单元;
    部署文件:application-client.xml
    war :Web Archive(封装web站点)
    包含: Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件,如图片、音频文件等;
    部署文件: web.xml
    ear :Enterprise Archive(封装ejb)
    包含:除了包含JAR、WAR以外,还包括EJB组件
    部署文件:application.xml


    jar包:通常是开发时要引用通用类,打成包便于存放管理。
    war包:是做好一个web应用后,通常是网站,打成包部署到容器中。
    ear包:企业级应用,通常是EJB打成ear包。
    所有的包都是用jar打的,只不过目标文件的扩展名不一样
    ------------------------------------------------------------------名词解释完------------------------------------------------------------------------------------------

    分析
    struts2
        基本jar: apps / struts2-blank.war
        查看Action加载信息:struts2-config-browser-plugin.jar   插件,
        注解开发:struts2-convention-plugin.jar       
        json(ajax):struts2-json-plugin.jar  
        整合Spring:struts2-spring-plugin.jar      
    web.xml(struct2是一个过滤器)
          <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>/*</url-pattern>
          </filter-mapping>
    在src下创建 struts.xml

    Spring
        基本jar : beans、core、 context、expression  、 common-logging 、log4j
        AOP开发 : aop、aspecj
        web开发 : web
        测试junit : test
        jdbc开发 : jdbc 、tx
        整合 hibernate : orm

    在src编写 log4j.properties 、 applicationContext.xml
    web.xml
          <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          <!-- 加载配置文件默认 WEB-INF/applicationContext.xml -->
          <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
          </context-param>

    Hibernate
        最基本jar: hibernate3.jar 、 lib/required/*.jar 、
        日志: slf4j-log4j.jar 、log4j.jar、
        注解:lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar
        c3p0连接池jar包
        数据库驱动
        二级缓存: ehcache-1.5.0.jar、backport-util-concurrent.jar、common-logging
    在src 配置hibernate.cfg.xml


    结论: 在lib导入42个jar, web.xml配置struts2核心控制器,Spring监听器、 在src下
    log4j.properties(日志)、struts.xml applicationContext.xml 、 hibernate.cfg.xml

    ------------------------------------------------------------------ 分析完 ------------------------------------------------------------------------------------------

     Struts2 与 Spring 框架的整合
    方式一: Action由Spring创建管理
        步骤一(导入整合包): 导入 struts2-spring-plugin.jar
        步骤二(添加使用声明): 在struts.xml 添加 <constant name="struts.objectFactory" value="spring"></constant>
        步骤三(添加使用配置): 将Action的 配置到Spring容器,在struts.xml 通过 class通过伪类名 指向spring容器bean id  
        demo:    struts.xml
                <action name="addbook" class="addBookAction"></action>
            application.xml
                <bean id="addBookAction" class="cn.itcast.web.action.AddBookAction">
                    <property name="bookService" ref="bookService"></property>
                </bean>

    好处: Action作为Spring中一个Bean ,对Action很方便进行AOP 切面编程
    注意问题 : Spring中Bean的默认scope 是 singleton ,需要手动将Action的Bean 配置scope="prototype"

    方式二 : Action自动装配Service (Action由Struts2 框架自己管理 )
        步骤一(导入整合包): 导入 struts2-spring-plugin-2.3.7.jar
        步骤二(添加使用声明): 在struts.xml 添加 <constant name="struts.objectFactory" value="spring"></constant>
        步骤三(添加使用配置,struct版的): struts.xml 配置Action 完整类名(Action由Struts2自己管理) ,在Spring配置Service, service对象会根据名称自动装配到 Action中
        *  struts.objectFactory.spring.autoWire = name 默认Service安装名字对Action进行自动装配
            demo:public class AddBookAction extends ActionSupport implements ModelDriven<Book> {
                // 注入Service
                private BookService bookService;
                public void setBookService(BookService bookService) {
                    this.bookService = bookService;
                }
        }
        
        applicationContext.xml
        <bean id="bookService" class="cn.itcast.service.impl.BookServiceImpl">
            <property name="bookDAO" ref="bookDAO"></property>
        </bean>
        
        * bean的id(bookService) 匹配 AddBookAction的 setBookService方法

    注意问题: 自动装配,确保action中set方法名与 spring bean的id 匹配 (大小写问题)

     Spring和Hibernate
    方式一: 零障碍整合 (直接在Spring中引入 hibernate的配置文件 )
        步骤一: BookDAO 继承 HibernateDaoSupport
        步骤二: 使用 LocalSessionFactoryBean 直接引用hibernate 配置文件
            <!-- 配置DAO  -->
            <bean id="bookDAO" class="cn.itcast.dao.impl.BookDAOImpl">
                <!-- 注入SessionFactory到 DAO -->
                <!-- HibernateDaoSupport 根据 SessionFactory 创建 HibernateTemplate 对象 -->
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            <!-- spring整合hibernate第一种方式 -->
            <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
            </bean>
        步骤三: Spring 事务管理
            <!-- 事务管理器 -->
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            
            <tx:annotation-driven transaction-manager="transactionManager"/>
            
            @Transactional
            public class BookServiceImpl implements BookService {
            }
        
    方式二 :将hibernate所有配置 都写入Spring 配置文件,不需要单独hibernate配置文件了
        步骤一: 在applicationContext.xml 配置数据库连接池 c3p0
            <context:property-placeholder location="classpath:jdbc.properties"/>
            <!-- 配置c3p0 连接池 -->
            <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property name="driverClass" value="${jdbc.driver}"></property>
                <property name="jdbcUrl" value="${jdbc.url}"></property>
                <property name="user" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </bean>
        * 需要在src 编写单独 jdbc.properties
     
        步骤二: 在Spring配置sessionFactory
            <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <!-- 引用数据库连接池 -->
                <property name="dataSource" ref="dataSource"></property>
                <!-- 配置hibernate其它属性 -->
                <property name="hibernateProperties">
                    <props>
                        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                        <prop key="hibernate.show_sql">true</prop>
                        <prop key="hibernate.format_sql">true</prop>
                        <prop key="hibernate.hbm2ddl.auto">update</prop>
                        <prop key="hibernate.current_session_context_class">thread</prop>
                    </props>
                </property>
                <!-- 引用hbm 映射文件 -->
                    <property name="mappingDirectoryLocations">
                    <list>
        <!--                 引用目录,加载目录下所有 hbm 文件 -->
                        <value>classpath:cn/itcast/domain</value>
                    </list>
                </property>
            </bean>
        
        步骤三 : <!-- 事务管理器 -->
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            
            <tx:annotation-driven transaction-manager="transactionManager"/>
            
            @Transactional
            public class BookServiceImpl implements BookService {
            }

    -------------------------------------------------------------------------------ssh整合结束-----------------------------------------------------------------

  • 相关阅读:
    关于源码编译每次提示有错误 要make update-api
    如何在Android中添加系统服务
    git查看每个版本间的差异
    achartengine画出动态折线图
    java中基本数据类型和C语言中基本数据类型转换
    获取图片的真实宽高
    hdu-2066-一个人的旅行
    Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读
    Android平台Camera实时滤镜实现方法探讨(十一)--实时美颜滤镜
    ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方式
  • 原文地址:https://www.cnblogs.com/liuCy/p/3202838.html
Copyright © 2020-2023  润新知