zoukankan      html  css  js  c++  java
  • SSH系列教材 (一)- 整合Struts+Spring+Hibernate 逐一配置的步骤

    本例演示从0开始逐一整合SSH的步骤,要学习本知识,需要具备SpringStrutsHibernate的基础,如果没有这些基础,请把基础掌握之后再学习,不要跳跃学习,最后坑的是自己 

    本例演示从struts,spring,hibernate逐一配置的步骤,完整的可运行实例可在右边下载 

    必读: 基于框架的程序要成功运行,对于JAR包的版本,配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导致框架程序运行失败。 如果你是第一次学习本框架,务必严格按照教程的指导,完全模仿操作,直到成功看到运行效果。 第一次成功之后,信心,思路都会有较好的铺垫,然后再根据自己的疑惑,在“成功”的代码上做原本想做的改动和调整,这样可以大大节约学习的时间,提高效率,切勿一来就擅自改动,给自己的学习制造障碍

    步骤1:创建数据库
    步骤2:创建表
    步骤3:准备数据
    步骤4:先运行,再学习
    步骤5:新建项目
    步骤6:导入jar
    步骤7:pojo
    步骤8:hbm
    步骤9:DAO
    步骤10:Service
    步骤11:ProductAction
    步骤12:struts.xml
    步骤13:applicationContext.xml
    步骤14:配置web.xml
    步骤15:list.jsp
    步骤16:访问http://127.0.0.1/listProduct
    步骤17:可运行项目
    步骤18:思路图
    步骤19:练习

    步骤 1 : 创建数据库

    首先准备数据库 how2java
    如果没有安装数据库,请参考 安装mysql-server

    注: 新安装的数据库账号密码是root:admin, 后续的配置里,也是用的这个账号密码。如果密码不是这个,本知识点下载区(点击进入)的可运行项目跑不起来,所以尽量修改密码为admin, 修改密码办法:修改root密码

    步骤 2 : 创建表

    准备表product_, 有3个字段,分别是
    主键id(自增长)
    字符串格式的name
    浮点数格式的price

    use how2java;

      

    CREATE TABLE product_ (

      id int(11) NOT NULL AUTO_INCREMENT,

      name varchar(30) ,

      price float ,

      PRIMARY KEY (id)

    ) DEFAULT CHARSET=UTF8;

    步骤 3 : 准备数据

    use how2java;

    delete from product_;

    INSERT INTO product_ VALUES (null,'产品a',88.88);

    INSERT INTO product_ VALUES (null,'产品b',88.88);

    INSERT INTO product_ VALUES (null,'产品c',88.88);

    INSERT INTO product_ VALUES (null,'产品x',88.88);

    INSERT INTO product_ VALUES (null,'产品y',88.88);

    INSERT INTO product_ VALUES (null,'产品z',88.88);

    步骤 4 : 先运行,再学习

    SSH整合需要做不少步骤,任何一步部做漏了,做错了,都有可能失败,这样会影响学习的信心,并且误以为本教程是走不通的。

    所以先下载下载区(点击进入)的可运行项目 ssh.rar,解压后导入到eclipse中,启动Tomcat,观察是否正常运行。确定可以运行,确定教程是可以跑得起来的,再学习下面的内容。

    导入到Eclipse中并运行的办法请参考:导入动态Web项目到Eclipse中

    部署成功自后,测试地址,应该看到如图所示的效果

    http://127.0.0.1:8080/ssh/listProduct

    先运行,再学习

    步骤 5 : 新建项目

    在eclipse中新建项目ssh,使用dynamic web project的方式。 不熟悉这种方式的同学,请参考 使用Dynamic Web Project的方式开发J2EE应用

    新建项目

    步骤 6 : 导入jar

    下载下载区(点击进入)的lib.rar, 解压后复制到 e:/project/ssh/WebContent/WEB-INF/lib目录下

    步骤 7 : pojo

    package com.how2java.pojo;

    public class Product {

        private int id;

        private String name;

        private float price;

        public int getId() {

            return id;

        }

        public void setId(int id) {

            this.id = id;

        }

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public float getPrice() {

            return price;

        }

        public void setPrice(float price) {

            this.price = price;

        }

         

    }

    步骤 8 : hbm

    <?xml version="1.0"?>

    <!DOCTYPE hibernate-mapping PUBLIC

            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

    <hibernate-mapping package="com.how2java.pojo">

        <class name="Product" table="product_">

            <id name="id" column="id">

                <generator class="native">

                </generator>

            </id>

            <property name="name" />

            <property name="price" />

        </class>

         

    </hibernate-mapping>

    步骤 9 : DAO

    DAO部分由接口ProductDAO 和其实现类ProductDAOImpl 构成
    ProductDAO 接口声明了方法list()、add(Product p)。
    ProductDAOImpl 类继承了Hibernatetemplete,并实现接口ProductDAO。

    package com.how2java.dao;

    import java.util.List;

    import com.how2java.pojo.Product;

    public interface ProductDAO {

         

        public List<Product> list();

        public void add(Product p);

    }

    package com.how2java.dao.impl;

    import java.util.List;

    import org.springframework.orm.hibernate3.HibernateTemplate;

    import com.how2java.dao.ProductDAO;

    import com.how2java.pojo.Product;

    public class ProductDAOImpl extends HibernateTemplate implements ProductDAO{

         

        public List<Product> list() {

            return find("from Product");

        }

        @Override

        public void add(Product p) {

            save(p);

        }

         

    }

    步骤 10 : Service

    Service部分由接口ProductService 和其实现类ProductServiceImpl 构成
    ProductService 接口声明了方法list()。
    ProductServiceImpl 实现接口ProductService,并接受productDAO的注入。
    list方法就是业务方法,productDAO查找所有的数据,如果是空的,就往数据库里插入5条数据。

    package com.how2java.service;

    import java.util.List;

    import com.how2java.pojo.Product;

    public interface ProductService {

         

        public List<Product> list();

    }

    package com.how2java.service.impl;

    import java.util.List;

    import org.springframework.orm.hibernate3.HibernateTemplate;

    import com.how2java.dao.ProductDAO;

    import com.how2java.pojo.Product;

    import com.how2java.service.ProductService;

    public class ProductServiceImpl implements ProductService {

        ProductDAO productDAO;

        public List<Product> list() {

            List<Product> products= productDAO.list();

            if(products.isEmpty()){

                for (int i = 0; i < 5; i++) {

                    Product p = new Product();

                    p.setName("product " + i);

                    productDAO.add(p);

                    products.add(p);

                }

            }

            return products;

        }

        public ProductDAO getProductDAO() {

            return productDAO;

        }

        public void setProductDAO(ProductDAO productDAO) {

            this.productDAO = productDAO;

        }

    }

    步骤 11 : ProductAction

    ProductAction提供对ProductService的注入,借助SSH的整合,ProductAction就充当非常单纯的控制层的角色:
    1. 取得数据
    2. 跳转到页面 “listJsp”

    package com.how2java.action;

    import java.util.List;

    import com.how2java.pojo.Product;

    import com.how2java.service.ProductService;

    public class ProductAction {

        ProductService productService;

        List<Product> products;

        public String list() {

            products = productService.list();

            return "listJsp";

        }

        public ProductService getProductService() {

            return productService;

        }

        public void setProductService(ProductService productService) {

            this.productService = productService;

        }

        public List<Product> getProducts() {

            return products;

        }

        public void setProducts(List<Product> products) {

            this.products = products;

        }

    }

    步骤 12 : struts.xml

    指定objectFactory 为spring,把action的生命周期管理交给spring进行

    <?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>

      <constant name="struts.i18n.encoding" value="UTF-8"></constant>

       

      <constant name="struts.objectFactory" value="spring"/>

       

      <package name="basicstruts" extends="struts-default">

       

      <action name="listProduct" class="productActionBean" method="list">

        <result name="listJsp">list.jsp</result>

      </action>

       

    </package>

    </struts>

    步骤 13 : applicationContext.xml

    applicationContext.xml应该放在WEB-INF目录下
    提供action的管理,并且在创建action的时候,注入dao

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns:aop="http://www.springframework.org/schema/aop"

        xmlns:tx="http://www.springframework.org/schema/tx"

        xmlns:context="http://www.springframework.org/schema/context"

        xsi:schemaLocation="

       http://www.springframework.org/schema/beans 

       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

       http://www.springframework.org/schema/aop 

       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

       http://www.springframework.org/schema/tx 

       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

       http://www.springframework.org/schema/context      

       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

      

        <bean name="productActionBean" class="com.how2java.action.ProductAction">

            <property name="productService" ref="productServiceImpl" />

        </bean>

         

        <bean name="productServiceImpl" class="com.how2java.service.impl.ProductServiceImpl">

            <property name="productDAO" ref="productDAOImpl" />

        </bean>

        <bean name="productDAOImpl" class="com.how2java.dao.impl.ProductDAOImpl">

            <property name="sessionFactory" ref="sf" />

        </bean>

        <bean name="sf"

            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

            <property name="dataSource" ref="ds" />

            <property name="mappingResources">

                <list>

                    <value>com/how2java/pojo/Product.hbm.xml</value>

                </list>

            </property>

      

            <property name="schemaUpdate">  

                <value>true</value>  

            </property>  

                     

            <property name="hibernateProperties">

                <value>

                    hibernate.dialect=org.hibernate.dialect.MySQLDialect

                    hibernate.show_sql=true

                    hbm2ddl.auto=update

                </value>

            </property>

        </bean>    

             

        <bean name="ds"

            class="org.springframework.jdbc.datasource.DriverManagerDataSource">

            <property name="driverClassName" value="com.mysql.jdbc.Driver" />

            <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>

            <property name="username" value="root" />

            <property name="password" value="admin" />

        </bean>       

    </beans>

    步骤 14 : 配置web.xml

    web.xml 增加Context监听器

    <web-app>

        <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>

            <dispatcher>FORWARD</dispatcher>

            <dispatcher>REQUEST</dispatcher>        

            <url-pattern>/*</url-pattern>

        </filter-mapping>

        <listener>

            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

        </listener>

         

    </web-app>

    步骤 15 : list.jsp

    用于显示products的jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"

     pageEncoding="UTF-8" isELIgnored="false"%>

    <%@ taglib prefix="s" uri="/struts-tags" %>

    <%@page isELIgnored="false"%>

    <table>

        <tr>

            <td>id</td>

            <td>name</td>

        </tr>

                     

    <s:iterator value="products" var="p">

        <tr>

            <td>${p.id}</td>

            <td>${p.name}</td>

        </tr>

    </s:iterator>

    </table>

    步骤 16 : 访问http://127.0.0.1/listProduct

    部署在Tomcat中,重启tomcat,然后访问地址,观察效果

    http://127.0.0.1:8080/ssh/listProduct



    部署办法请参考 通过Eclipse启动Tomcat-Run On Server

    访问http://127.0.0.1/listProduct

    步骤 17 : 可运行项目

    下载区(点击进入)有本知识点对应的可运行项目下载 ,实在自己搞不出来,就下载解压出来比较一下

    步骤 18 : 思路图

    1. 访问路径/listProduct
    2. web.xml中的过滤器会将请求交由struts进行处理
    3. struts根据listProduct创建对应的productActionBean
    此时productActionBean不再由Struts自己创建,而是由Spring创建
    4. spring根据applicationContext.xml创建productActionBean对应的对象ProductAction
    5. Spring 创建ProductAction的时候 注入Service
    6. 创建Service的时候注入DAO
    7. Struts 调用ProductAction的list方法
    8. 在list方法中调用注入好的dao,访问数据库,查询结果
    9. 跳转到list.jsp显示数据

    思路图

    步骤 19 : 练习

    基于这个例子,使用 SSH做一套产品的 增 删 改 查


    更多内容,点击了解: https://how2j.cn/k/ssh/ssh-integrationtest/100.html

  • 相关阅读:
    Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩
    文档API生成神器SandCastle使用心得
    Stimulsoft报表操作笔记(一):统计
    在线office文档编辑NTKO使用心得
    oracle与sqlserver利用函数生成年月日加流水号
    解决同一页面中两个iframe互相调用jquery,js函数
    jquery配合.NET实现点击指定绑定数据并且能够一键下载
    页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
    关于datagrid中控件利用js调用后台方法事件的问题
    关于datagrid中数据条件颜色问题
  • 原文地址:https://www.cnblogs.com/Lanht/p/12789352.html
Copyright © 2011-2022 走看看