zoukankan      html  css  js  c++  java
  • SSH整合(一)

    一、ssh原始整合方式

        不需要任何整合包,就是简单的将三个框架集合到一起


        hibernate
            导入jar包:
                hibernate-release-5.0.7.Finallib equired*.jar
                日志:slf4j+log4j
                驱动:mysql-connector.jar
                数据源:hibernate-release-5.0.7.Finalliboptionalc3p0*.jar
            配置文件:
                hibernate.cfg.xml
                XXX.hbm.xml
        
        struts2
            导入jar包:
                struts-2.3.24appsstruts2-blankWEB-INFlib*.jar
            配置文件:
                web.xml
                struts.xml
     
        spring
            导入jar包:
                4个基本:beans、context、core、expression
                2个日志:logging、log4j
                4个aop:aop、aspects、aop联盟、aspectj织入
                2个事务相关:jdbc、tx
            配置文件:
                applicationContext.xml
                
        其他
            导入jar包:
                jstl
            配置文件:
                log4j.properties
                jdbc.properties
                
        注意
            删除冲突jar:avassist-3.11.0.GA.jar
               
        分析原始整合方式的缺点:
            1、dao层的操作实体的代码繁琐:使用Spring提供HibernateTemplate(spring集成hibernate)

      dao中的代码

    1 ... ...
    2 Session session = HibernateUtils.getSession();
    3         Transaction transaction = session.beginTransaction();
    4         Query query = session.createQuery("from Customer");
    5         List<Customer> customerList = query.list();
    6         transaction.commit();
    7         session.close();
    8 ... ...

            2、事务应该业务层控制:声明式事务控制
            3、web层 spring的配置文件加载多次 spring对象创建多次:spring集成web

      Action中的代码

    1 ... ....
    2 ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");3 ... ...

            4、web层中的service的获取方式 像service使用dao的方式一样(注入):struts2集成spring
    1 ... ...

    2 CustomerService customerService = (CustomerService) app.getBean("customerService");

    3 ... ....  
        
    二、ssh的xml整合方式
        1、spring集成hibernate
            导入spring集成hibernate的整合包:spring-orm.jar
            
            <!-- 加载jdbc.properties文件 -->
            <context:property-placeholder location="classpath:jdbc.properties"/>

            <!-- 配置数据源对象 -->
            <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>


            <!-- spring集成hibernate的方式1:保留hibernate.cfg.xml文件
                    配置sessionFactory
                    加载hibernate的配置文件 创建sessionFactory对象
                    
                    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
                        <property name="configLocations">
                            <list>
                                <value>classpath:hibernate.cfg.xml</value>
                            </list>
                        </property>
                    </bean>
            -->
            
            
            <!-- spring集成hibernate的方式2:摒弃hibernate.cfg.xml文件
                    配置sessionFactory
            -->
            <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
                <!-- 1、数据源信息
                        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                        <property name="hibernate.connection.url">jdbc:mysql:///ssh324</property>
                        <property name="hibernate.connection.username">root</property>
                        <property name="hibernate.connection.password">root</property>
                        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
                -->
                <property name="dataSource" ref="dataSource"></property>
                
                <!-- 2、hibernate其他属性
                        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
                        <property name="hibernate.show_sql">true</property>
                        <property name="hibernate.format_sql">true</property>
                        <property name="hibernate.hbm2ddl.auto">update</property>
                -->
                <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>
                    </props>
                </property>
                
                
                <!-- 3、加载映射
                        <mapping resource="com/itheima/domain/Customer.hbm.xml"/>
                -->
                <property name="mappingResources">
                    <list>
                        <value>com/itheima/domain/Customer.hbm.xml</value>
                    </list>
                </property>
                
            </bean>

            
        2、声明式事务控制
            <!-- 声明式事务控制 -->
            <!-- 平台事务管理器 -->
            <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            <!-- 配置增强 -->
            <tx:advice id="txAdvice" transaction-manager="transactionManager">
                <tx:attributes>
                    <tx:method name="*"/>
                </tx:attributes>
            </tx:advice>
            <!-- 事务的aop织入 -->
            <aop:config>
                <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.service.impl.*.*(..))"/>
            </aop:config>
            
        3、spring集成web
            spring集成web的整合包:spring-web.jar
            
            在web.xml配置监听器和spring配置文件的地址
            <!-- 配置全局的初始化参数 -->
              <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>
              
              
              使用spring-web.jar提供一个工具类获得spring容器对象的引用
                ServletContext servletContext = ServletActionContext.getServletContext();
                ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
                CustomerService customerService = (CustomerService)app.getBean("customerService");
                customerList = customerService.findAll();
                
        4、struts2集成spring
            导入struts2集成spring的整合包:struts2-spring-plugin.jar
            
            在Action为要注入的service提供set方法:
                private CustomerService customerService;
                public void setCustomerService(CustomerService customerService) {
                    this.customerService = customerService;
                }
                
                public String list(){
                    customerList = customerService.findAll();
                    return "list";
                }
                
            原因:
                struts2默认配置文件  default.properties
                    struts对象工厂spring自动注入=按照名称
                    struts.objectFactory.spring.autoWire = name
                    
                    struts2找spring容器按照名称对象自动注入
                    
            struts2集成spring两种方式:
                方式一:Action的创建权仍然是Struts2
                方式二:Action的创建权交由spring
                    在spring的配置文件中配置Action的Bean
                    <bean id="customerAction" class="com.itheima.action.CustomerAction" scope="prototype">
                        <property name="customerService" ref="customerService"></property>
                    </bean>
                    
                    过程:请求---->struts2框架----->从spring容器中找匹配Action----->找到Action 返回给Struts2使用
                                                                              ----->找不到Action Struts2框架会按照class的全包名 自己在创建Action对象
                为什么Struts2框架主动找spring容器要对象???
                    在struts2-spring-plugin.jar中有struts-plugin.xml
                    
                    struts的对象工厂指定为spring
                    <constant name="struts.objectFactory" value="spring" />


    三、ssh的注解整合方式
        半注解半配置文件方式
        一般情况下 自定义的bean使用注解  非自定义的bean使用配置文件
        
       
        
        
        applicationContext.xml代码

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xsi:schemaLocation="http://www.springframework.org/schema/beans
     8         http://www.springframework.org/schema/beans/spring-beans.xsd
     9         http://www.springframework.org/schema/aop
    10         http://www.springframework.org/schema/aop/spring-aop.xsd
    11         http://www.springframework.org/schema/context
    12         http://www.springframework.org/schema/context/spring-context.xsd
    13         http://www.springframework.org/schema/tx
    14         http://www.springframework.org/schema/tx/spring-tx.xsd">
    15         
    16         <!-- 配置HibernateTemplate模板 -->
    17         <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
    18             <property name="sessionFactory" ref="sessionFactory"></property>
    19         </bean>
    20         
    21         <!--开启注解扫描  -->
    22         <context:component-scan base-package="com.jjy"></context:component-scan>
    23         
    24         <!-- 配置SessionFactory -->
    25         <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    26             <!-- 注入c3p0 -->
    27             <property name="dataSource" ref="dataSource"></property>
    28             <!--注入hibernate的其他配置  -->
    29             <property name="hibernateProperties">
    30                 <props>
    31                     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    32                     <!-- 是否显示hibernate生成的SQL语句 -->
    33                     <prop key="hibernate.show_sql">true</prop>
    34                     <!-- 是否使用格式化输出sql语句到控制台 -->
    35                     <prop key="hibernate.format_sql">false</prop>
    36                     <!-- 配置hibernate采用何种方式生成DDL语句 -->
    37                     <prop key="hibernate.hbm2ddl.auto">update</prop>
    38                     <!-- 把session和线程绑定,从而实现一个线程只有一个Session -->
    39                     <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
    40                 </props>
    41             </property>
    42             <!-- 加载映射 -->
    43             <property name="packagesToScan">
    44                 <array>
    45                     <value>com.jjy.domain</value>
    46                 </array>
    47             </property>
    48         </bean>
    49         
    50         <!--声明式事务控制  -->
    51        
    52         <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    53             <!--注入sessionFactory-->
    54             <property name="sessionFactory" ref="sessionFactory"></property>
    55         </bean>
    56         <tx:annotation-driven transaction-manager="transactionManager"/>
    57         
    58         <!-- 配置数据源信息 -->
    59         <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    60             <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    61             <property name="jdbcUrl" value="jdbc:mysql:///2018-8-19"></property>
    62             <property name="user" value="root"></property>
    63             <property name="password" value="root"></property>
    64         </bean>
    65 </beans>


        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
       

  • 相关阅读:
    线程
    i/o流
    编码
    File类
    How to put an object on the request in a servlet
    How to forward from a Java servlet to a JSP
    Window.scrollTo()
    JavaScript code to let users double-click to move back to the top of the page
    How to create zebra stripes in JSP tables
    How to set the default input focus on a field in an HTML web form
  • 原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9507012.html
Copyright © 2011-2022 走看看