SSH整合

这两天利用那个bookstone工程进行了Struts2.1Spring3.05Hibernate3.3整合。

首先利用Myeclipse自带的工具进行整合

 

首先是在建立的工程中添加Spring框架

 

因为要利用Spring作为中间桥梁。链接StrutsHibernate所以需要添加jdbc包。然后下一步

在对话框中添加配置文件。因为在web.xml中配置Spring。所以将配置文件放到WEB-INF中。

添加Struts2.1

注意要添加struts spring libraries

添加Hibernate

因为要把Hibernate加到Spring中所以需要选择将配置文件放入Spring文件

选择Spring配置文件

选择连接数据的数据源

我是基于原来已经存在的项目进行修改。所以直接用Myeclipse中已经建立好的数据源

添加数据源可以在DataBase界面中添加数据源

 

选择不生成sessionFactory

自动过程结束。下面首先需要手工配置项目。

  <context-param> 

  <param-name>contextConfigLocation</param-name> 

  <param-value>/WEB-INF/applicationContext.xml</param-value> 

</context-param> 

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

  </listener>


 

首先是在web.xml添加监听器。让Spring自动打开

struts.xml

添加

<constant name="struts.objectFactory" value = "org.apache.struts2.spring.StrutsSpringObjectFactory" /> 


 

让spring接管ObjectFactory  

由于applicationContext.xml没有生成hibernate的对象关系映射所以需要添加配置文件。

<property name="mappingResources">

<list>

  <value>bookstone/book.hbm.xml</value>

</list>

</property>


 

这个配置文件是配置book数据库与对象的映射。

现在环境已经搭建完成。需要的就是添加程序。

首先建立一个action 

public class QueryAction extends ActionSupport {

    private String book_id;

    static private QBookDao qBookDao;

    public String execute() throws Exception{

        ActionContext ac = ActionContext.getContext();  

        List<Book> books=qBookDao.getBook(book_id);

        Book book=(Book)books.get(0);

        ac.put("books", books);      

      return "SUCCESS";

    }

    public String getBook_id() {

        return book_id;

    }

    public void setBook_id(String book_id) {

        this.book_id = book_id;

    }

    public QBookDao getqBookDao() {

        return qBookDao;

}

    public void setqBookDao(QBookDao qbd) {

       qBookDao =qbd;

    }

}


 

由于现在使用Spring是在开启服务器时候加载的bean所以需要设置为静态变变量设置

这样所有的时候都是一个对象。因为没有scope="prototype"的时候只是在开启服务器时候入时注射。而在每次调用时不注射。通过查询得知实现方式是单例。但是不调用set方法。因为是单例在最开始的时候保存的变量已经注射。所以以后都引用次变量不用在注射。在设置scope="prototype" 后每次为动态产生.每次都注射。

可以在applicationContext.xml中设置scope="prototype" 。(这样可以将bean自动设置为单例.即完成静态效果)。开始是这么认为但是实验结果为生成不同对象则所以事实不是这样。

Jsp文件

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>    

    <title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

  </head>

  

  <body>

  <s:form action="bookquery" method="get">

  <label>请输入书编号</label>

  <input type="text" name="book_id"/>

  <input type="submit" value="提交"/>

  </s:form>

  </body>

</html>

Show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page import="bookstone.pojo.Book" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'show.jsp' starting page</title>

    

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

  </head>

  

  <body>

<table>

  <tr>

  <td>书编号</td>

  <td>书名</td>

  <td>书数量</td>

  </tr>

   <%

  List<Book> books=(List<Book>)request.getAttribute("books");

  Iterator<Book> iterator=books.iterator();

  for(;iterator.hasNext();){

  Book booktmep=iterator.next();

   %>

  <tr>

  <td><%=booktmep.getBook_id() %></td>

  <td><%=booktmep.getBook_name() %></td>

  <td><%=booktmep.getBook_count() %></td>

  </tr>

  <%} %>

  </table>

  </body>

</html>


 

Struts.xml

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />   

<package name="bookstone" namespace="/"   extends="struts-default" >

    <action name="bookquery" class="QueryAction">

        <result name="SUCCESS">/show.jsp</result>

    </action>

</package>

</struts>  


 

开始的时候设置的action name为query 但是query是struts关键字.所以开始会出现莫名错误.

No result defined for action bookstone.action.QueryAction and result SUCCESS

所以需要注意自己的action  name是否占用了struts2的关键字.

接下来做pojo

public class Book {

    private String book_id;

    private String book_name;

    private String book_count;

    public String getBook_id() {

        return book_id;

    }

    public void setBook_id(String book_id) {

        this.book_id = book_id;

    }

    public String getBook_name() {

        return book_name;

    }

    public void setBook_name(String book_name) {

        this.book_name = book_name;

    }

    public String getBook_count() {

        return book_count;

    }

    public void setBook_count(String book_count) {

        this.book_count = book_count;

    }

}


 

接下来是db中table与pojo之间的映射.

book.hbm.xml

<?xml version='1.0' encoding='ISO-8859-1'?>

<!DOCTYPE hibernate-mapping PUBLIC

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

          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-mapping>

    <class name="bookstone.pojo.Book" table="BOOK">

        <id name="book_id" column="book_ID">

            <generator class="assigned"/>

        </id>

        <property name="book_name"  column="book_NAME"/>

        <property name="book_count" column="book_COUNT"/>

    </class>

</hibernate-mapping>


 

下面是写Dao

既然使用Spring那么编写Dao就需要使用面向接口编程思想.对Dao进行设计.

本次目的是将三个框架结合一起.所以只需要做简单的设计.即一个接口,后类实现这个接口

public interface QBookDao {

    public List getBook(String book_id);

}

public class QueryBookDao implements QBookDao {

    private static SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {

        return sessionFactory;

    }

    public void setSessionFactory(SessionFactory sf) {

       sessionFactory = sf;

    }

    public List getBook(String book_id) {

        List<Book> books=null;

        Session session = sessionFactory.openSession();

        Criteria criteria=session.createCriteria(bookstone.pojo.Book.class);

        if (!(book_id.trim().equals(""))) {

            criteria.add(Restrictions.eq("book_id", book_id));

        }

       books= criteria.list();

       return books;

    }

}


 

配置applicationContext.xml

<?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:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!-- 添加的注射 -->

<bean id="qbd" class="bookstone.dao.QueryBookDao">

    <property name="sessionFactory">

        <ref local="sessionFactory"/>

    </property> 

</bean>

<bean id="QueryAction" class="bookstone.action.QueryAction"  >

    <property name="qBookDao">

        <ref local="qbd"/>

    </property> 

</bean>

<!-- 数据源 -->

<bean id="dataSource"

class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName"

value="oracle.jdbc.driver.OracleDriver">

</property>

<property name="url"

value="jdbc:oracle:thin:@127.0.0.1:1521:XE">

</property>

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

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

</bean>

<!-- Hibernate的SessionFactory注射 -->

<bean id="sessionFactory"

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

<property name="dataSource">

<ref bean="dataSource" />

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">

org.hibernate.dialect.Oracle9Dialect

</prop>

</props>

</property>

<!-- Hibernate的对象关系映射. -->

<property name="mappingResources">

<list>

  <value>bookstone/book.hbm.xml</value>

</list>

</property>

</bean></beans>


 

已经完成测试即可

不知道为什么三个框架合在一起,加载就变得很慢..

 

实验成功 成功将三个框架结合在一起.

最后一定要Spring+Hibernate+Struts加入要不出现莫名错误

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值