集成SSH框架详细过程

这两天在myeclipse中搭建了SSH的框架,现把详细的搭建整合过程记录如下

为了验证整合后的正确性,我在这里实现了一个小功能,即通过index.jsp页面提交请求,查询数据库中存有多少件商品,如果查询成功,则在控制台打印商品的件数,并返回到成功页面success.jsp,反之,返回到error.jsp。数据库中只有一个表goods。

 

1. 建立web project

    在src目录下新建包com.action,com.service,com.service.impl,com.dao,com.dao.impl,com.po

    各个包要存放的类相信通过包名可以明白,在com.po包中新建po类Goods.java

    在WebRoot下新建文件夹pages,用以存放success.jsp和error.jsp,index.jsp直接在WebRoot目录下

    index.jsp:

    <s:form action="goodsAction" namespace="/lhc">
         <s:submit method="insertGood" value="查询" cssStyle="width:100px;"></s:submit>
    </s:form>



2. 引入struts2

    首先需要导入struts2的几个必须包,它们在struts2的发行包lib目录下都可以找到

     xwork-core-2.1.6.jar

     struts2-core-2.1.8.1.jar

     freemarker-2.3.15.jar

     commons-fileupload-1.2.1.jar


     修改web.xml文件,增加struts2配置

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- struts2配置  -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
</web-app>

 

    在src目录下新建struts.xml,内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="myAction" extends="struts-default" namespace="/lhc">
        <action name="goodsAction " class="goodsActionSpring ">
            <result name="success">/pages/success.jsp</result>
            <result name="error">/pages/err.jsp</result>
        </action>
    </package>
</struts>

 

在struts.xml中配置好action后,接着就在com.action包中新建类GoodsAction,代码清单如下:

package com.action;

public class GoodsAction {
    private GoodsInsertService goodsInsertActionService ;//见srping配置
    public String selectGood(){
        String result=goodsInsertActionService.selectGoods();
        return result;
    }
    public void setGoodsInsertActionService(
            GoodsInsertService goodsInsertActionService) {
        this.goodsInsertActionService = goodsInsertActionService;
    }
}

3.引入spring

   这里struts2集成spring需要用到一个插件struts2-spring-plugin-2.1.8.1.jar ,可以在struts2发行包lib目录下找到,将之导入到工程中,然后将包spring.jar 导入工程

 

在spring框架中,IOC容器是整个框架工作的基础,为了web应用环境与之很好结合,spring提供了spring容器WebApplicationContext,所以,在每个web应用中都需要初始化这个容器,初始化方法是在web应用中web.xml声明一个ContextLoaderListener,并且增加名称为contextConfigLocation的上下文参数来指定容器的配置文件applicationContext.xml

修改web.xml文件,增加如下内容:

<!-- 集成spring -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/classes/applicationContext.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

 

现在配置spring的配置文件applicationContext.xml,将该文件保存在src目录下,在本例中,所有action,service,dao都在该文件中配置,在实际开发中,为了管理方便,可以分开配置,只需做一些简单的变通,具体可以查阅相关资料

     <!-- action,配置action -->
    <bean id="goodsActionSpring" class="com.action.GoodsAction">
        <property name="goodsInsertActionService" ref="goodsInsertService"></property>
    </bean>

    <!-- service,配置service -->
    <bean id="goodsInsertService" class="com.service.impl.GoodsInsertServiceImpl">
        <property name="goodsServiceDao" ref="goodsDao"></property>
    </bean>

    <!-- dao,配置dao -->

    <bean id="goodsDao" class="com.dao.impl.GoodsDaoImpl">
        <!-- DAO实现类通过继承JdbcDaoSupport获取JdbcTemplate时,可直接引用配置的数据源,下面的name属性必须为"dataSource" -->
        <!-- <property name="dataSource" ref="myDataSource"></property> -->
        <!-- DAO实现类直接引用JdbcTemplate -->
        <!-- <property name="myTemplate" ref="jdbcTemplate"></property> -->

        <!-- 利用spring对hibernate的支持访问数据库,如果DAO实现类是继承spring的HibernateDaoSupport类,这里的name属性必须为'sessionFactory',如果不继承该类,使用hibernate原生API操作数据库,则name属性可随意设置,只需要在DAO实现类中声明SessionFactory的实例作为属性,并使其属性名和name的值相同就可以了,本例中采取了第一种方式实现DAO -->
        <property name="sessionFactory" ref="mySessionFactory"></property>
    </bean>

    <!-- 这个bean是在DAO实现类采取JdbcTemplate方式操作数据库时需要用到的,因为本例是继承HibernateDaoSupport ,因此可以忽略这个设置-->

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg><ref bean="myDataSource"/></constructor-arg>
    </bean>
    <!-- datasource,配置数据源 -->
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
        <property name="url" value="jdbc:jtds:sqlserver://localhost:1433/shopping" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>

 

注意:本例中使用的是SQL SERVER数据库,配置数据源时需要用到jtds-1.2.jar包,将它导入工程,如果是其他数据库可以导入相应的支持包;

下面是service的实现,定义了service接口和实现类

package com.service;

public interface GoodsInsertService {
    String selectGoods();
}

package com.service.impl;

public class GoodsInsertServiceImpl implements GoodsInsertService {
    private GoodsDao goodsServiceDao;
    public String selectGoods() {
        String result=goodsServiceDao.select();
        if("success".equals(result))
            return "success";
        else
            return "error";
    }
    public void setGoodsServiceDao(GoodsDao goodsServiceDao) {
        this.goodsServiceDao = goodsServiceDao;
    }
}

4.引入hibernate

首先导入hibernate3.jar 包,利用spring的ioc容器创建SessionFactory,在spring的配置文件中增加以下内容

<!-- sessionFactory -->
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource">
        </property>
        <property name="mappingResources">
            <list>
                <value>Goods.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">none</prop>
            </props>
        </property>
    </bean>

在初始化LocalSessionFactoryBean时,需要用到dom4j-1.6.1.jar、jta.jar、commons-collections.jar、cglib-nodep-2.1_3.jar 这几个包,导入到工程中,它们在spring发行包的lib目录下都可以找到

hibernate的映射文件Goods.hbm.xml:

<hibernate-mapping package="com.po">
    <class name="Goods" table="goods">
        <id name="id" column="Gid" type="integer">
            <generator class="native"></generator>
        </id>
        <property name="name" column="Gname" type="string"></property>
        <property name="price" column="Gprice" type="integer"></property>
        <property name="unit" column="Gunit" type="string"></property>
    </class>
</hibernate-mapping>

下面就是dao的实现,定义了dao接口和实现类:

package com.dao;

public interface GoodsDao {
    String select();
}

 

package com.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dao.GoodsDao;

public class GoodsDaoImpl extends HibernateDaoSupport implements GoodsDao {

    public String select() {
        //1、 ================================================================================
//        List list=super.getJdbcTemplate().query("select * from goods",new GoodsMapper());
//        if(list.size()!=0){
//        System.out.println("查询到的数据有: "+list.size()+" 条");
//        return "success";
//        }
        //2、 =================================================================================
//        int result=0;
//        try{
//            result=myTemplate.queryForInt("select COUNT(*) from goods");
//        }catch(Exception e){
//            e.printStackTrace();
//        }
//        if(result!=0){
//            System.out.println("查询到的数据有: "+result+" 条");
//            return "success";
//        }
        //3、 =================================================================================
//        List<com.po.Goods> list=null;
//        try{
//            Session session=sessionFactory.openSession();
//            list=session.createQuery("from Goods").list();
//            session.close();
//            query=sessionFactory.getCurrentSession().createQuery("from Goods").list();
//        }catch(Exception e){
//            e.printStackTrace();
//        }
//        if(list!=null && list.size()!=0){
//            System.out.println("查询到的数据有: "+list.size()+" 条");
//            return "success";
//        }
       
        //4、 ==================================================================================
        List<com.po.Goods> list=this.getHibernateTemplate().find("from Goods");
        if(list!=null && list.size()!=0){
            System.out.println("查询到的数据有: "+list.size()+" 条");
            return "success";
        }
        return "error";
    }
}

说明:上面代码的12部分是没有集成hibernate时对数据库的操作,34部分是集成hibernate时对数据库的操作,3是使用hibernate原生API操作数据库,这时还需要引入antlr-2.7.6.jar 包,4是通过继承HibernateDaoSupport操作数据库,集成hibernate后操作数据库是使用hibernate API还是继承HibernateDaoSupport,可以说各有利弊,需要根据实际情况进行选择

 

到此,整个SSH的集成框架搭建完毕,除了上面提到的需要引入的开发包,实际开发中还可能使用到其他的包,可根据情况选择导入

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值