SSH整合
来源:互联网 发布:招聘java工程师的要求 编辑:程序博客网 时间:2024/04/29 13:12
这两天利用那个bookstone工程进行了Struts2.1、Spring3.05和Hibernate3.3整合。
首先利用Myeclipse自带的工具进行整合
首先是在建立的工程中添加Spring框架
因为要利用Spring作为中间桥梁。链接Struts与Hibernate所以需要添加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加入要不出现莫名错误
- SSH 整合
- SSH整合
- ssh整合
- SSH整合
- SSH 整合
- SSH整合
- ssh整合
- SSH整合
- ssh整合
- SSH整合
- SSH整合
- SSH整合
- ssh整合
- SSH整合
- Ssh整合
- ssh 整合
- SSH整合
- SSH整合
- debian Squeeze 安装Rhythmbox音乐播放器,mplayer,smplayer视频播放器.
- 在Ubuntu 10.04中安装 insight
- WebKit如何加载web页面
- 内存对其
- ISO转DMG命令
- SSH整合
- Ruby on Rails 学习一
- 同时运行两个TOMCAT的配置
- Activity的启动模式分析-之三
- 保证鲁棒性要考虑的边界问题
- 给DropDownList添加ToolTip(title)属性
- Java 反射
- 2011 HTML5的六大趋势
- Android只显示月和日的DatePickerDialog