SSH六部曲

<strong>
一共有6步(文章底部附有源码下载地址,刚学完ssh的可以借鉴)</strong>

1 写一个Hibernate应用,完成用户的增加
    1) User实体
    2)UserDao接口
        save(User u)
    3)UserDaoImpl实现UserDao
        save(User u){
            //用hibernate api
        }

2 让spring注入SessionFactory

    1)在上一个应用中导入Spring的jar包
        除了基础的6个包,还得导入2个jar包
        org.springframework.jdbc-3.0.5.RELEASE.jar
        org.springframework.orm-3.0.5.RELEASE.jar
        org.springframework.transaction-3.0.5.RELEASE.jar

    2) 增加配置文件beans.xml
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="configLocation"  value="classpath:hibernate.cfg.xml"/>
        </bean>

        <bean id="userDao" class="包名.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory">
        </bean>

    3) 在测试方法中,获得userDao,然后测试save()

            UserDao userDao= (UserDao)cxt.getBean("userDao");

3 添加数据源,并注入到SessionFactory    

    1) 需要导入2个包
            commons-dbcp.jar
            commons-pool.jar

        注:数据源的第3方实现有非常多,现我们用其中一种,commons-dbcp

    2) 配置Datasource
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    3)在SessionFactory Bean中注入dataSource

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- 注入DataSource Bean-->
        <property name="dataSource" ref="myDataSource"/>

        <property name="mappingResources">
            <list>
                <value>com/toceansoft/entity/User.hbm.xml</value>
            </list>
        </property>

        <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect
                hibernate.hbm2ddl.auto=update
                hibernate.show_sql=true
            </value>
        </property>
    </bean>

    4) 测试结果

4 使用spring提供的HibernateTemplate

    1) 在Dao中添加
    private HibernateTemplate hibernateTemplate;
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    2)修改方法,改成使用hibernateTemplate
        save(o)
            hibernateTemplate.save(o);

5 使用spring在业务层切入事务

    1)在业务层写一个接口UserService
        public void add(User u);
    2) 写一个实现类UserServiceImpl实现接口UserService
        public void add(User u){}
    3)实现类UserServiceImpl提供userDao的get/set方法

    4)在beans.xml中配置UserServiceImpl 的Bean,并注入userDao

    5)配置事务管理器Bean
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    6) 配置事务通知
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <!-- 包括隔离级别,事务传播属性。。。 -->
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    7)配置aop切面
    <aop:config>
        <aop:pointcut id="serviceMethods"
            expression="execution(* com.toceansoft.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
    </aop:config>
    8)测试结果
    9)在add方法内抛出异常,再测试观察结果
        throw new RuntimeException();

6 整合Spring与Struts
    1)在把上面的java 应用变成web应用
            --把上面应用Src下的所有东东复制到web应用的src

    2)导入struts2开发的基础jar包,还需要一个特殊包
        struts-spring-plugin.jar

        导入与struts2整合的spring相应的包
        org.springframework.web.struts-3.0.5.RELEASE.jar
        org.springframework.web-3.0.5.RELEASE.jar

    3) 把beans.xml 复制到WEB-INF,并且改名为applicationContext.xml(可选的)

    4) 在web.xml中配置spring启动的监听器
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml,classpath*:applicationContext2.xml</param-value>
    </context-param>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    5)在web.xml配置Struts2的启动
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <!--  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>-->
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    6)在Web包下写UserAction,并且提供业务层UserSerivce的set方法

    7)在appplicationContext.xml中配置UserAction bean
    <bean id="userAction" class="com.toceansoft.web.action.UserAction" scope="prototype">
        <property name="userService" ref="userService" />
    </bean>
    注:scope="prototype"

    8) 在struts.xml中配置UserAction
    <!-- 跳转到添加产品页面 -->
        <action name="User_toAdd" >
            <result>/User_add.jsp</result>
        </action>

        <!-- 添加产品 -->
        <!-- 关键点:这里的class设置action bean在spring配置文件中bean的id -->
        <action name="User_add" class="userAction" method="add">
            <result name="success">/grobal_message.jsp</result>
        </action>

    9) 写2个页面
    User_add.jsp
    grobal_message.jsp

    10)部署测试
时间: 2025-01-04 15:38:10

SSH六部曲的相关文章

排序六部曲之(三)堆排序

堆排序的要点在于构建一个最大推或者最小堆.那么什么是最大堆.最小堆呢? 一.概念介绍 二叉堆:二叉堆是一棵完全二叉树 二叉堆的性质: 1.二叉堆的父节点的值总是大于或者等于(小于或者等于)子节点的值 2.当父节点的值大于或者等于子节点的值时为最大堆,当父节点的值小于或者等于子节点时最小堆 3.通常对于给定的结点i可以根据在数组中的位置求出其父节点的位置.左右子节点的位置,对于下标从0开始的数组,位置为i的结点的父节点的位置为(i-1)/2,左子节点的位置为2*i+1,右子节点的位置为2*i+2

程序设计入门学习六步曲

初学者遇到最多的困惑是:上课也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的流程,如果你没有深刻地理解C语言的语句的执行过程(或流程),你怎么会编写程序解决这些实际问题呢? 二.用C语言编程解决实际问题,所需要的不仅仅是C语言的编程知识,还需要相关的专业知识.例如,如果你不知道长方形的面积公式,即使C语言学得再好你也编不出求长方形的面积的程

计划在CSDN学院推出系列视频课程《源码分析教程5部曲》

?? 计划在CSDN学院推出系列视频课程<源码分析教程5部曲> 源码分析教程5部曲之1--漫游C语言 源码分析教程5部曲之2--C标准库概览 源码分析教程5部曲之3--libevent源码分析 源码分析教程5部曲之4--memcached源码分析 源码分析教程5部曲之5--redis源码分析

c# ado 连接数据库 六步曲

建立连接分为六步:1.定义连接字符串,oracle 的连接字符串为: private static string connString = "Data Source=192.168.1.130:1521/mydata;Persist Security Info=True;User ID=em_test;Password=test123;Unicode=True"; 2.根据连接字符串成连接3.打开连接4.实例命令对象5.操作6.关闭连接 看一个例子: using System; usi

Python基础知识两部曲:二

如果没有看基础部分第一章,请前往Python基础知识两部曲:一 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是--greet_user ()是必须带上的,这里可以可以传递一些参数,也可以不传 以:结尾,且与后面所有的缩进构成了函数体 调用函数直接写上函数名,如果有参数记得带上参数 1. 无参数的函数: def greet_user(): """显示简单的函数体""" print(&qu

python --- Socketserver N部曲(1)

曲一 socketserver 是为了简化服务器端开发而产生的,是一个高级的标准库.(背景介绍完毕,开始干) 一些概念 来自源码的一张图片,简洁又FengSao +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +---

Struts2.3.15+Hibernate 4.x+Spring4.x 整合二部曲之上部曲

1 导入jar包 可以复制jar包或maven导入,本文最后会给出github地址 2 导入log4j.properties文件 og4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.Co

教父3部曲--回首旧时光

最近,忙中带空的开完了教父3部,每部电影持续时间有3个小时.我以为自己会没有耐心的去全部看完这些,不料故事情节.发展没有丝毫的冗余感,也不像其他故事(电影)一样,带有蓄意的去营造一个环境.它缓缓道来,描述了柯里昂家族两代的变化,没有刻意,留给我们很大的思想空间. 作为这么一部豆瓣高分的电影,相比一个作为程序员,大部分时间与电脑的二元打交道的我来说.想要来评价这部电影,自然看的也不够深入.我也不了解美国的历史,也缺乏生活的基本常识.但我就想通过自己少有的阅历,来记录下这部电影带给我的启发. 首先,

php面向对象4部曲(二)继承详解

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫“基类”,子类也叫“派生类” 单继承:一个类只能从一个上级类继承其特性信息.PH