采用目前最新的struts-2.3.1.2、hibernate3.6.10.Final、spring-framework-3.1.1.RELEASE开发包,以及eclipse-jee-indigo-SR2-win32、apache-tomcat-7.0.27服务器、JDK6和mysql5做开发环境,参考了前辈的一篇相关文章,改正了其中的错误和疏漏,克服了公司分配的“新”机器每小时自动重启三次的困难,终于把环境给搭好了。整个过程中遵循的一个原则是,避免引入用不到的jar包,以求搭建一个最小的SSH运行环境。

首先创建一个Dynamic web project 输入任意名字如SSHBase。

第一步:加载Spring环境

我们需要引入的包有:

org.springframework.asm-3.1.1.RELEASE.jar org.springframework.beans-3.1.1.RELEASE.jar org.springframework.context-3.1.1.RELEASE.jar

org.springframework.core-3.1.1.RELEASE.jar org.springframework.expression-3.1.1.RELEASE.jar org.springframework.jdbc-3.1.1.RELEASE.jar

org.springframework.web-3.1.1.RELEASE.jar org.springframework.orm-3.1.1.RELEASE.jar

由于spring默认开启了日志,还需要加入commons-logging的jar包,否则会报错。

建议不要一次性加入 应该先加最核心的运行代码看缺少什么加什么,这样就不会加多余的包进来了,spring3已经把包按功能分开,不像以前一个包,这样更灵活,只要运行我们需要的功能,而没用到的就不用在硬性的添加进来。

包加好了之后我们开始创建spring应用,创建一个XML文件ApplicationContext.xml(放在src根目录),下面是基本结构

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. <a href="http://www.springframework.org/schema/beans/spring-beans-3.0.xsd'%3E">http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  6. <span style="color:#000000;"></span>
  7. </a><!--在这里面添加beans-->
  8. </beans>

写一个用例来测试一下spring搭建好了没有,创建一个Person类:

  1. public class Person {
  2. private String name;
  3. private int age;
  4. /* 也可以写get方法这边就不写了,不写也行spring没有要求一定要有 */
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8. public void setAge(int age) {
  9. this.age = age;
  10. }
  11. public String toString() {
  12. return "name : " + name + " age : " + age; // 重写toString方法以便输出信息
  13. }
  14. }

然后在配置文件,也就是AppliccationContext.xml里面添加bean相关配置,要注意类的包路径(这是值注入,还有接口和构造注入):

  1. <bean  id="nike" class="Person"  scope="prototype" >
  2. <property name="name" value="XXX"></property>
  3. <property name="age" value="18"></property>
  4. </bean>

再写一个测试类,来进行测试:

  1. import org.springframework.beans.factory.xml.XmlBeanFactory;
  2. import org.springframework.core.io.FileSystemResource;
  3. public class testSpring {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. XmlBeanFactory beansfactory = new XmlBeanFactory(new FileSystemResource("src/ApplicationContext.xml"));
  7. System.out.println(beansfactory);
  8. Person nike = (Person)beansfactory.getBean("nike");
  9. System.out.println(nike);
  10. }
  11. }

运行效果应该看到: name : XXX age : 18

这就证明搭建好了,beans已经自己创建。

第二步:整合hibernate

需要的包如下:

antlr-2.7.6.jar commons-collections-3.1.jar commons-logging-1.1.1.jar dom4j-1.6.1.jar


hibernate3.jar slf4j-api-1.6.1.jar hibernate-jpa-2.0-api-1.0.1.Final.jar


javassist-3.12.0.GA.jar jta-1.1.jar ejb3-persistence.jar

加好之后在spring里面配置hibernate(假定在数据库已经创建了一个叫做myTest的数据库)

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   <!-- 定义数据源 -->
  2. <property name="driverClassName" value="com.mysql.jdbc.Driver"/><!-- 定义数据库驱动-->
  3. <property name="url" value="jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8"/><!-- 连接字符串-->
  4. <property name="username" value="root" /><!-- 账号-->
  5. <property name="password" value="root"/><!-- 密码-->
  6. </bean>
  7. <!-- 配置sessionFactory 配置 -->
  8. <bean id="sessionFactory"
  9. class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  10. <property name="dataSource" ref="dataSource" />
  11. <property name="annotatedClasses" >
  12. <list>
  13. <value>com.neareast.test.Person</value><!-- 定义元素关联,xml文件也可以配置我这边直接用annoration配置 -->
  14. </list>
  15. </property>
  16. <property name="hibernateProperties"><!--hibernate参数-->
  17. <props>
  18. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  19. <prop key="hibernate.show_sql">true</prop>
  20. <prop key="hiberante.format_sql">true</prop>
  21. <prop key="hibernate.hbm2ddl.auto">update</prop>
  22. </props>
  23. </property>
  24. </bean>
  25. <!--定义DAO-->
  26. <bean id="personDao" class="com.neareast.test.PersonDao">
  27. <property name="sessionFactory" ref="sessionFactory"></property>
  28. </bean>

然后修改一下刚才的Person类,并加上注解,就可以用了:

  1. import javax.persistence.Column;
  2. import javax.persistence.Entity;
  3. import javax.persistence.Id;
  4. import javax.persistence.Table;
  5. @Entity
  6. @Table(name="person")
  7. public class Person {
  8. @Id
  9. @Column(unique=true,name="id",nullable=false)
  10. private int id ;
  11. @Column(name="name",length=20)
  12. private String name;
  13. @Column(name="age")
  14. private int age;
  15. /*也可以写get方法这边就不写了,不写也行spring没有要求一定要有*/
  16. public void setName(String name){
  17. this.name=name;
  18. }
  19. public void setId(int id ){
  20. this.id = id;
  21. }
  22. public void setAge(int age){
  23. this.age=age;
  24. }
  25. public String toString() {
  26. return "name : " + name + " age : " + age;//重写toString方法以便输出信息
  27. }
  28. }

DAO接口中定义了四个简单的方法:

  1. public interface IPersonDao {
  2. public void createPerson(Person person);
  3. public List<Serializable> getAll();
  4. public int count();
  5. public void drop(Person person);
  6. }

其实现如下:

  1. import org.hibernate.Query;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. public class PersonDao implements IPersonDao {
  5. private SessionFactory sessionFactory;
  6. @Override
  7. public void createPerson(Person person) {
  8. Session session = sessionFactory.openSession();
  9. session.beginTransaction();
  10. session.save(person);
  11. session.beginTransaction().commit();
  12. }
  13. @Override
  14. public List<Serializable> getAll() {
  15. Session session = sessionFactory.openSession();
  16. String sql = "from Person";
  17. session.beginTransaction();
  18. Query query = session.createQuery(sql);
  19. return query.list();
  20. }
  21. @Override
  22. public int count() {
  23. Session session = sessionFactory.openSession();
  24. String sql = "from Person";
  25. session.beginTransaction();
  26. Query query = session.createQuery(sql);
  27. return query.list().size();
  28. }
  29. @Override
  30. public void drop(Person person) {
  31. Session session = sessionFactory.openSession();
  32. session.beginTransaction();
  33. session.delete(person);
  34. session.beginTransaction().commit();
  35. }
  36. public void setSessionFactory(SessionFactory sessionFactory) {
  37. this.sessionFactory = sessionFactory;
  38. }
  39. }

然后再写一个简单的用例来测试:

  1. import org.springframework.beans.factory.xml.XmlBeanFactory;
  2. import org.springframework.core.io.FileSystemResource;
  3. public class TestHibernate {
  4. public static void main(String[] args) {
  5. XmlBeanFactory beansfactory = new XmlBeanFactory(
  6. new FileSystemResource("src/ApplicationContext.xml"));
  7. PersonDao persondao = (PersonDao) beansfactory.getBean("personDao");
  8. Person person = new Person();
  9. person.setAge(123);
  10. person.setName("哈哈哈");
  11. persondao.createPerson(person);
  12. System.out.println(persondao.getAll().size());
  13. }
  14. }

由于数据表设置成自动更新,在没有表的情况下,hibernate会帮我们自动创建表和他们之间的关系。打开mysql客户端 输入:

use mytest;

select * from person;

如果看到我们的数据就证明OK了!

在这我们就已经将hibernate 基本整合好了!

第三步:整合Struts2

引入下列jar包:

struts2-core-2.3.1.2.jar struts2-spring-plugin-2.3.1.2.jar xwork-core-2.3.1.2.jar commons-io-2.0.1.jar commons-lang-2.5.jar

ognl-3.0.4.jar freemarker-2.3.18.jar commons-logging-api-1.1.jar commons-fileupload-1.2.2.jar

在WEB-INF目录下,创建并编辑web.xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6. <display-name>SSHBase1.0</display-name>
  7. <welcome-file-list>
  8. <welcome-file>index.jsp</welcome-file>
  9. </welcome-file-list>
  10. <context-param>
  11. <param-name>contextConfigLocation</param-name>
  12. <param-value>/WEB-INF/classes/ApplicationContext.xml</param-value>
  13. </context-param>
  14. <listener>
  15. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  16. </listener>
  17. <filter>
  18. <filter-name>struts2</filter-name>
  19. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  20. </filter>
  21. <filter-mapping>
  22. <filter-name>struts2</filter-name>
  23. <url-pattern>/*</url-pattern>
  24. </filter-mapping>
  25. </web-app>

在src下创建配置文件struts.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true" />
  7. <!--很重要注明工厂 -->
  8. <constant name="struts.objectFactory" value="spring"></constant>
  9. <package name="myPackage" extends="struts-default">
  10. <action name="index">
  11. <result>/index.jsp</result>
  12. </action>
  13. <!-- 第一个测试的 -->
  14. <action name="helloAction" class="hello" method="getPerson">
  15. <result name="SUCCESS">/hello.jsp</result>
  16. </action>
  17. </package>
  18. </struts>

接下来,创建相应的Action,(注意此处可能需要手动引入服务器的Server Runtime库),例如:

  1. import javax.servlet.http.HttpServletRequest;
  2. import org.apache.struts2.ServletActionContext;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. public class HelloAction extends ActionSupport {
  5. private static final long serialVersionUID = 1L;
  6. private IPersonDao dao;
  7. /*
  8. * 测试方法 spring 值注入顺序是按照配置文件值的顺序注入
  9. */
  10. public String getPerson() {
  11. System.out.println(dao);
  12. HttpServletRequest request = ServletActionContext.getRequest();
  13. request.getSession().setAttribute("personlist", dao.getAll());
  14. return "SUCCESS";
  15. }
  16. public IPersonDao getDao() {
  17. return dao;
  18. }
  19. public void setDao(IPersonDao dao) {
  20. this.dao = dao;
  21. }
  22. }

然后在spring的配置文件里,配置相应的class bean:

  1. <bean id="hello" class="com.neareast.test.HelloAction">
  2. <property name="dao" ref="personDao"></property>
  3. </bean>

接下来创建个页面来进行测试,可在WebContent下面创建一个hello.jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>test OK</title>
  8. </head>
  9. <body>
  10. 测试OK
  11. <br>
  12. <a> 姓 :</a>
  13. <label>${personlist}</label>
  14. <br />
  15. </body>
  16. </html>

最后,启动服务器,在浏览器中输入: http://localhost:8080/SSHBase/helloAction,就可以看到我们数据库里的数据了。

至此,最基本的SSH已经整合完毕!

整个项目的代码我已经打包上传,欢迎下载,链接如下: http://download.csdn.net/detail/neareast/4223692

Struct2、Hibernate3、Spring3框架搭建实战(转)的更多相关文章

  1. 【一】Swift 3.0 新浪微博项目实战 -整体框架搭建

    最近要接手swift,所以找了个视频跟着做一下实战项目,在此记录一下过程和心得 框架搭建和目录拆分 关键词:MVVM 架构,桥接文件 桥接文件用于引入OC的头文件,Swift就可以正常使用(宏除外). ...

  2. go语言实战教程:实战项目资源导入和项目框架搭建

    从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...

  3. 手把手教你使用VUE+SpringMVC+Spring+Mybatis+Maven构建属于你自己的电商系统之vue后台前端框架搭建——猿实战01

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  4. ASP.NET MVC项目框架快速搭建实战

    MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...

  5. onvif开发实战2--总结框架搭建

    完成框架搭建后,编写自己的主函数起onvif服务 编写makefile objs = onvif.o onvif_func.o duration.o soapC.o soapServer.o stds ...

  6. 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】

    经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...

  7. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  8. ssh框架搭建的基本步骤(以及各部分作用)

    ssh框架搭建的基本步骤(以及各部分作用)     一.首先,明确spring,struts,hibernate在环境中各自的作用.   struts: 用来响应用户的action,对应到相应的类进行 ...

  9. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

随机推荐

  1. Nginx Location匹配举例

    1.location / {       if (!-f $request_filename){              rewrite ^/(.+)$ /uri.php last;      }} ...

  2. xml结构

    一.XmlHelper using System; using System.Collections.Generic; using System.Linq; using System.Web; usi ...

  3. Python脚本控制的WebDriver 常用操作 <二> 关闭浏览器

    下面将模拟一个WebDriver关闭浏览器的操作 测试用例场景 在一个自动化测试脚本运行完毕后,我们很可能会采取关闭浏览器的操作,而关闭浏览器的常用操作有如下两种: close quit close  ...

  4. 数据库事务故障恢复undo日志检查点

      checkpoint 检查点 checkpoint,即检查点.在undolog中写入检查点,表示在checkpoint前的事务都已经完成commit或者rollback 了,也就是检查点前面的事务 ...

  5. Oracle HS (Heterogeneous Services)深入解析 及协同Gateway工作流程(转)

    异构的数据源同Oracle Database做交互原理. 图1 上图是一张Oracle 异构连接处理的架构图,其中我们可以看到主要的非数据源模块包括有HS(Heterogeneous Service) ...

  6. strcpy/strlen/strcat/strcmp面试总结

    <strcpy拷贝越界问题> 一. 程序一 #include<stdio.h> #include<string.h> void main() { char s[]= ...

  7. 关于table元素的认识

    表格是网页上最常见的元素,但是,现在对很多刚入行的前端们那是谈table色变.那是为啥?这是表格的框架的简单.明了.在传统的网页中使用没有边框的表格来排版是非常流行.在web标准逐渐深入设计领域以后, ...

  8. ios中怎么处理键盘挡住输入框

    //此前要遵循UITextFieldDelegate代理.并且设置该文本框为当前控制器的代理 //开始编辑的时候让整个view的高度网上移动 - (void)textFieldDidBeginEdit ...

  9. Go support for Android

    Go support for Android David Crawshaw June 2014 Abstract We propose to introduce Go support for the ...

  10. Learning note for Binding and validation

    Summary of my learning note for WPF Binding Binding to DataSet. when we want to add new record, we s ...