SSH整合

来源:互联网 发布:招聘java工程师的要求 编辑:程序博客网 时间:2024/04/29 13:12

这两天利用那个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"?><beansxmlns="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加入要不出现莫名错误

原创粉丝点击