(友谊提示:本文先容的SSH整合中所需要的一切jar包免费下载地址: )

   今天开始做一个网上商城的项目,起首从搭建情况开始,一步步整合S2SH。这篇博文浸要总结一下怎样整合Struts2 、Hibernate4.3和Spring4.2。

   整合三大框架得先从搭建各限制情况开始,也就是说起首得把Spring,Hibernate和Struts2的情况搭建好,确保它们 没有问题了,再做整合。这篇博文遵照的顺序是:先搭建Spring情况-->然后搭建Hibernate情况--> 整合Spring和 Hibernate --> 搭建Struts2情况 --> 整合Spring和Struts2。

  1. 整体项目jar包的牵制

  Spring的jar包很众,开发的时候建议将它们分个类,然后依次添加到User Library,便当牵制,也一目知途。这里我 总结一下整体SSH所需要的根蒂jar包,看下图:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

   从图中可以看出,起首将Spring的jar分为四类:spring-4.2.4-core、spring-4.2.4-aop、spring-4.2.4-persistence 以及spring-4.2.4-web。将spring的核心包都放到core中,与aop相干的都放到aop中,与持久化(与Hibernate整合)相干的 放到persistence中,与web(与struts2整合)相干的放到web中。每个限制都有哪些jar包呢?请看下面的截图:

SSH电商项目实战之一:整合Struts2、Hibernate和SpringSSH电商项目实战之一:整合Struts2、Hibernate和Spring

  注:以上每个分类的包中,并非包含原来包中所有的jar,有些jar文件并没有效到,等举座项目需要的时候再往里加 就行了,上图是保证项目的情况可以搭建所需要的的最根蒂的jar包。

  2.搭建Spring情况

  上面的jar包截图是着末整合好的所有jar包,刚开始搭建情况的时候不需要一次性全部加进来,可以一点一点的加, 这样也更利于理解每个限制的jar包都有什么作用,当然,一次都加进来也是可以的。

  2.1 添加装备文件beans.xml和相应的jar包

   新建一个工程,然后添加正正在User Library中添加自己的库,这里浸要添加两个,即spring-4.2.4-core和spring4.2.4- aop,添加jar包不再赘述。添加完了后,正正在src目录下添加beans.xml文件,这个文件的模板网上很众,Spring自带的例子里也 有,考一份过来就行,睹下图:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  2.2 测试Spring的IoC情况

  银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站写一个普通的java 类java.util.Date类来测试一下Spring IoC是否正常,如果正正在测试程序中能正常注入,则说明 Spring的IoC情况搭建成功,下面银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站写一个测试用例:

Java代码
  1. /**  
  2.  * @Description TODO(采用Spring的证明调试,仅仅支持Spring3.1及以上)  
  3.  * @author Ni Shengwu  
  4.  *  
  5.  */    
  6. /*  
  7.  * Spring3.1后众了个spring-test-4.2.4.RELEASE.jar包,这个jar包分外用来支持JUnit基于证明的测试的,该jar包正正在spring-4.2.4-core中  
  8.  * 该jar包里有个SpringJUnit4ClassRunner.class,用@RunWith证明加进来即可  
  9.  *   
  10.  * 证明@ContextConfiguration表示将ApplicationContext对象注入进来,就不用像以往那样正正在测试程序里先new了,直接运用  
  11.  */    
  12. @RunWith(SpringJUnit4ClassRunner.class)    
  13. @ContextConfiguration(locations="classpath:beans.xml")    
  14. public class SSHTest {    
  15.         
  16.     @Resource    
  17.     private Date date;    
  18.         
  19.     @Test //测试Spring IOC的开发情况    
  20.     public void springIoc() {    
  21.         System.out.println(date);    
  22.     }    
  23. }    

  着末能正常输出:Thu Apr 28 22:45:13 CST 2016。说明Date对象曾经被Spring给注入进来了,从而验证了Spring IoC功能正常,为此,Spring的情况搭建完成。

  3. 搭建Hibernate情况

  Hibernate的情况搭建比拟于Spring要复杂一些,由于用到了MyEclipse中的逆向工程。银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站按以下步骤来搭建 Hibernate开发情况:

  3.1 添加相应的jar包

  这里浸要是向User Library中添加两项jar包:hibernate4.3.11和MySQL驱动包mysql-connector-java-5.1.26,不再 赘述。

  3.2 新建数据库和表

SQL代码
  1. drop database if exists shop;    
  2. create database shop default character set utf8;    
  3. use shop;    
  4. drop table if exists category;    
  5. create table category    
  6. (    
  7.    /* 种别编号,自动增加 */    
  8.    id  int not null auto_increment,    
  9.    /* 种别名称 */    
  10.    type varchar(20),    
  11.    /* 种别是否为热点种别,热点种别才有可能显现正正在银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站*/    
  12.    hot  bool default false,    
  13.    /* 设置种别编号为主键*/    
  14.    primary key (id)    
  15. );    

  3.3 DB浏览器结合到Mysql数据库

   DB浏览器指的是MyEclipse中的一个视图窗口,可以很直观的看到MySQL中都有哪些数据库和表,打开DB浏览器的 方法:Window->Open Perspective->DB Browser打开DB浏览器工作窗口。如果没有DB Browser,遵照下面: Window->Show View->other->输入DB Browser,找到打开即可。

  打开后,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站开始结合到MySQL数据库了,正正在DB Browser窗口的空缺处右键->new,就会弹出下面的对话框:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  填好后,点击Test Driver测试一下,测试通过表示DataBase connection Driver曾经装备好,然后finish即可,这样 银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站就能正正在DB浏览器窗口中看到数据库MySQL5.6了,右键打开就能看到数据库中已有的库和表了,如下:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  3.4 创建xml映射文件和sessionFactory

   sessionFactory是用来创建session的,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站通过如下格事务署创建:工程名右键->myeclipse->Add Hibernate Capabilities,如果没有Add Hibernate Capabilities,就点击project facets->Install Hibernate Facets,会弹出如下窗口 :

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  下一步,正正在MyEclipse中添加Hibernate Support,即hibernate.cfg.xml映射文件和sessionFactory。这里浸要是给 sessionFactory建个包,默认包不行。

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  下一步,添加驱动,由于银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站之前曾经装备好了一个驱动了,以是正正在这里直接选择刚刚装备好的即可。

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  下一步,由于之前银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站曾经添加过自己的jar保存,这里不用选择,直接finish。

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  这样银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站就完成了Hibernate装备文件和sessionFactory的创建。下面银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站简单看一下MyEclipse创建的 sessionFactory里面都有啥:

Java代码
  1. public class HibernateSessionFactory {    
  2.     
  3.     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); //sessionFactory顶用的是线程池技术    
  4.     private static org.hibernate.SessionFactory sessionFactory; //sessionFactory:创建session的工厂    
  5.         
  6.     private static Configuration configuration = new Configuration();    
  7.     private static ServiceRegistry serviceRegistry;     
  8.     
  9.     static { //类加载时初始化sessionFactory    
  10.         try {    
  11.         configuration.configure();    
  12.         serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();    
  13.         sessionFactory = configuration.buildSessionFactory(serviceRegistry); //Hibernate4中创建sessionFactory的方法    
  14.     } catch (Exception e) {    
  15.         System.err.println("%%%% Error Creating SessionFactory %%%%");    
  16.         e.printStackTrace();    
  17.     }    
  18.     }    
  19.     private HibernateSessionFactory() { //私有构制方法阻止new出对象,保证sessionFactory的单例    
  20.     }    
  21.         
  22.     public static Session getSession() throws HibernateException {    
  23.         Session session = (Session) threadLocal.get();  //从线程池中拿session    
  24.     
  25.         if (session == null || !session.isOpen()) { //如果线程池是空的,或者session打开退步    
  26.             if (sessionFactory == null) {    
  27.                 rebuildSessionFactory(); //如果sessionFactory是空的,那就再创建一次,和static限制往往的    
  28.             }    
  29.             session = (sessionFactory != null) ? sessionFactory.openSession() : null//sessionFactory不为空就创建一个session    
  30.             threadLocal.set(session); //然后把这个session放到线程池中,下次再拿    
  31.         }    
  32.     
  33.         return session;    
  34.     }    
  35.     
  36.     public static void rebuildSessionFactory() {    
  37.     try {    
  38.         configuration.configure();    
  39.         serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();    
  40.         sessionFactory = configuration.buildSessionFactory(serviceRegistry);    
  41.     } catch (Exception e) {    
  42.         System.err.println("%%%% Error Creating SessionFactory %%%%");    
  43.         e.printStackTrace();    
  44.     }    
  45.     }    
  46.     
  47.     public static void closeSession() throws HibernateException {    
  48.         Session session = (Session) threadLocal.get();    
  49.         threadLocal.set(null);    
  50.     
  51.         if (session != null) {    
  52.             session.close();    
  53.         }    
  54.     }    
  55.     
  56.     public static org.hibernate.SessionFactory getSessionFactory() {//提供一个公共接口让外界获得这个单例sessionFactory    
  57.     return sessionFactory;    
  58.     }    
  59.     
  60.     public static Configuration getConfiguration() {    
  61.     return configuration;    
  62.     }    
  63.     
  64. }

  从创建的HibernateSessionFactory中可以看出,浸要用到了单例模式和线程池技术。也不难理解。

  3.5 通过逆向工程天生model、orm映射文件

  下面开始运用逆向工程创建实例对象了,也就是数据库的表对应的model。正正在DB Browsera窗口右击银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站刚刚创建的 表shop,选择Hibernate Reverse Engineering开始创建:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

   创建的时候有两种格事务署,基于装备文件的和基于证明的,举座的看开发人员心情了,可以选择:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  然后下一步,选择一下native主键自增格事务署,然后便完成了逆向工程创建model和orm映射了。

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

   完成后,会有Category的model天生,同时正正在hibernate.cfg.xml文件中也会天生相应的映射,前面基于装备文件的 和基于证明的正正在hibernate.cfg.xml中天生的映射时折柳的。

  3.6 测试Hibernate持久化数据库

   由于这里还没有与Spring整合,只是单纯的搭建Hibernate开发情况,以是银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站没有必要运用证明,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站通过直接 new一个service的格事务署执行数据入库。

  先写CategoryService接口和实现类:

Java代码
  1. public interface CategoryService {    
  2.     public void save(Category category); //用来测试Hibernate情况    
  3. }    
  4.     
  5. public class CategoryServiceImpl implements CategoryService {    
  6.     
  7.     @Override //没有和Spring整合的情况    
  8.     public void save(Category category) {    
  9.         //通过刚刚天生的sessionFactory获取session    
  10.         Session session = HibernateSessionFactory.getSession();    
  11.         try {    
  12.             //手动事务    
  13.             session.getTransaction().begin();    
  14.             //执行商业逻辑    
  15.             session.save(category);    
  16.             //手动提交    
  17.             session.getTransaction().commit();    
  18.         } catch(Exception e) {    
  19.             session.getTransaction().rollback();    
  20.             throw new RuntimeException(e);    
  21.         } finally {    
  22.             HibernateSessionFactory.closeSession();    
  23.         }           
  24.     }    
  25. }

   下面正正在刚刚的测试用例中添加对Hibernate的测试:

Java代码
  1. @RunWith(SpringJUnit4ClassRunner.class)    
  2. @ContextConfiguration(locations="classpath:beans.xml")    
  3. public class SSHTest {    
  4.         
  5.     @Resource    
  6.     private Date date;      
  7.         
  8.     @Test //测试Spring IOC的开发情况    
  9.     public void springIoc() {    
  10.         System.out.println(date);    
  11.     }    
  12.         
  13.     @Test  //测试Hibernate的开发情况,由于没有整合,可以直接new    
  14.     public void hihernate() {    
  15.         CategoryService categoryService = new CategoryServiceImpl();    
  16.         Category category = new Category("男士休闲"true);    
  17.         categoryService.save(category);    
  18.     }    
  19. }    

  银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站查看数据库,发现众了刚刚插入的这项,说明Hibernate情况没有问题。至此,Hibernate的开发情况银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站就搭 建好了。

  4. 整合Spring和Hibernate

  搭建好了Spring和Hibernate的开发情况后,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站开始整合这两者。整合Spring和Hibernate后就可以运用AOP让 Spring来牵制Hibernate的事务了。整合Spring和Hibernate浸要从两大方面入手,一是导入必要的jar包,二是装备 beans.xml文件。下面银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站一步步整合Spring和Hibernate。

  4.1 导入相应的jar包

  整合Spring和Hibernate时需要导入的jar包有两大块,spring4.2.4-persistence和c3p0-0.9.5.1,每一块jar包中的具 体jar文件请参睹上面的截图,这里不再赘述。下面开始装备beans.xml文件了。

  4.2 装备数据源dataSource

  起首装备一下dataSource,然后hibernate.cfg.xml中相应的限制可以干掉了。由于正正在Spring中装备好了,Spring会 去初始化这个dataSource,也就是说这就交给Spring来完成了,hibernate.cfg.xml中的相应限制可以删掉了。如下:

XML/HTML代码
  1. <!-- com.mchange.v2.c3p0.ComboPooledDataSource类正正在c3p0-0.9.5.1.jar包的com.mchange.v2.c3p0包中 -->    
  2. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">    
  3.     <property name="driverClass" value="com.mysql.jdbc.Driver" />    
  4.     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop" />    
  5.     <property name="user" value="root" />    
  6.     <property name="password" value="root" />    
  7. </bean>   

  hibernate.cfg.xml中需要干掉的限制:

SSH电商项目实战之一:整合Struts2、Hibernate和Spring

  4.3 装备sessionFactory

  装备sessionFactory是用来发生一个session的,另外HibernateTemplate也可以,但是这里采用sessionFactory而 不用HibernateTemplate,是由于HibernateTemplate是Spring提供的,依赖于Spring,如果哪天不用Spring了,就会报错 。而sessionFactory是Hibernate提供的,没有问题。HibernateTemplate的依赖性太强了。下面看一下举座装备:

XML/HTML代码
  1. <!-- org.springframework.orm.hibernate4.LocalSessionFactoryBean类正正在spring-orm-4.2.4.RELEASE.jar包的org.springframework.orm.hibernate4包中 -->    
  2. <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">    
  3.      <property name="dataSource" ref="dataSource" />    
  4.      <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <!-- 加载hibernate装备文件 -->    
  5. </bean>    

  sessionFactory中的dataSource银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站用刚刚配好的dataSource,用ref属性援用进来即可,configLocation银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站不正正在 这配了,直接加载hibernate.cfg.xml文件,运用hibernate装备文件中的装备,越发简单便当。

  4.4 装备事务牵制器

   装备事务牵制器,是用来牵制sessionFactory的,这样所有的由sessionFactory发生的session将会有声明式的牵制。 装备如下:

XML/HTML代码
  1. <!-- org.springframework.orm.hibernate4.HibernateTransactionManager类spring-orm-4.2.4.RELEASE.jar包的org.springframework.orm.hibernate4包中 -->    
  2. <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">    
  3.      <property name="sessionFactory" ref="sessionFactory" />    
  4. </bean>

  同样,sessionFactory银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站用刚刚装备好的sessionFactory,用ref属性援用进来即可。到这里就会发现,从上面一直 配下来,都是一连串的操作,一个个援用下来。

  4.5 装备advice(告诉)

   装备advice的目的是指定哪些方法需要什么样板的事务模式。看装备:

XML/HTML代码
  1. <tx:advice id="advice" transaction-manager="transactionManager">    
  2.     <tx:attributes>    
  3.         <tx:method name="save*" propagation="REQUIRED"/>    
  4.         <tx:method name="update*" propagation="REQUIRED"/>    
  5.         <tx:method name="delete*" propagation="REQUIRED"/>    
  6.         <tx:method name="*" propagation="SUPPORTS"/>    
  7.     </tx:attributes>    
  8. </tx:advice>    

   REQUIRED表示如果存正正在事务,则支持当前的事务,如果没有则创建一个新的事务,这个事务模式运用正正在所有以save 、update和delete由来的方法上,也就是说对数据库的增修削的时候需要添加事务支持。SUPPORTS表示如果存正正在事务,则 支持当前的事务,如果没有就算了。

  4.6 装备AOP切面

XML/HTML代码
  1. <aop:config>    
  2.     <!-- 装备哪些包的类要切入事务 -->    
  3.     <aop:pointcut id="pointcut" expression="execution(* cn.it.shop.service.impl.*.*(..))" />    
  4.     <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/><!-- 结合了<span style="font-family:Microsoft YaHei;">上</span>面的advice和上面的pointcut -->    
  5.     <!-- aop:pointcut要写正正在aop:advisor上面,不然会报错 -->    
  6.  </aop:config>    

  AOP即面向切面编程,aop:pointcut定义一个切面,expression属性中装备的意思是所有cn.it.shop.service.impl包 下的所有方法,不管返回值和参数是什么,都要切入事务。该包是属于dao层的,直接操作数据库的。aop:advice将告诉和切 面结合起来,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站直接运用上面装备好的advice和pointcut,将其引入进来即可。这样装备好了后,意思就是说,凡是 cn.it.shop.service.impl包下的方法都需要切入事务牵制,举座地,以save、update、delete由来的方法运用REQUIED格事务署, 其他方法运用SUPPORTS格事务署。这样就很好理解这个装备的意思了。

  4.7 测试整合结果

  之前搭建Hibernate情况的时候,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站测试是直接new了一个Service来操作数据库,由于当时还没有和Spring整合。 现正正在通过装备beans.xml后,让Spring去牵制Hibernate的事务了,以是现正正在的测试要把Service交给Spring牵制,通过Spring 注入进来,而且依赖sessionFactory,如果能插入数据到数据库,则说明声明事务OK。

  起首,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站要正正在Spring的装备文件beans.xml中配一下这个Service:

XML/HTML代码
  1. <bean id="categoryService" class="cn.it.shop.service.impl.CategoryServiceImpl">    
  2.     <property name="sessionFactory" ref="sessionFactory" /><!-- 依赖的sessionFactory用银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站之前配好的sessionFactory-->    
  3. </bean>    

   其次,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站需要正正在CategoryService接口和它的实现类CategoryServiceImpl中增加一个方法用来测试整合后的情况 :

Java代码
  1. public interface CategoryService {    
  2.     public void save(Category category); //用来测试Hibernate情况    
  3.     public void update(Category category); //用来测试Spring和Hibernate整合后    
  4. }    
  5.     
  6. public class CategoryServiceImpl implements CategoryService {    
  7.     
  8.     @Override //没有和Spring整合的情况    
  9.     public void save(Category category) {    
  10.         //通过东西类获取session    
  11.         Session session = HibernateSessionFactory.getSession();    
  12.         try {    
  13.             //手动事务    
  14.             session.getTransaction().begin();    
  15.             //执行商业逻辑    
  16.             session.save(category);    
  17.             //手动提交    
  18.             session.getTransaction().commit();    
  19.         } catch(Exception e) {    
  20.             session.getTransaction().rollback();    
  21.             throw new RuntimeException(e);    
  22.         } finally {    
  23.             HibernateSessionFactory.closeSession();    
  24.         }    
  25.             
  26.     }    
  27.     /*Spring和Hibernate整合后*/    
  28.     private SessionFactory sessionFactory; //定义一个sessionFactory    
  29.         
  30.     //当需要运用sessoinFactory的时候,Spring会将sessionFactory注入进来    
  31.     public void setSessionFactory(SessionFactory sessionFactory) {    
  32.         this.sessionFactory = sessionFactory;    
  33.     }      
  34.     protected Session getSession() {    
  35.         //从当火线程获取session,如果没有则创建一个新的session    
  36.         return sessionFactory.getCurrentSession();    
  37.     }    
  38.         
  39.     @Override //Spring和Hibernate整合后的情况    
  40.     public void update(Category category) {    
  41.         getSession().update(category);        
  42.     }    
  43. }

   现正正在银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站可以去测试类中扩张测试方法,来测试Spring和Hibernate整合后的结果了:

Java代码
  1. @RunWith(SpringJUnit4ClassRunner.class)    
  2. @ContextConfiguration(locations="classpath:beans.xml")    
  3. public class SSHTest {    
  4.         
  5.     @Resource    
  6.     private Date date;    
  7.         
  8.     @Resource    
  9.     private CategoryService categoryService;    
  10.         
  11.     @Test //测试Spring IOC的开发情况    
  12.     public void springIoc() {    
  13.         System.out.println(date);    
  14.     }    
  15.         
  16.     @Test  //测试Hibernate的开发情况,由于没有整合,可以直接new    
  17.     public void hihernate() {    
  18.         CategoryService categoryService = new CategoryServiceImpl();    
  19.         Category category = new Category("男士休闲"true);    
  20.         categoryService.save(category);    
  21.     }    
  22.         
  23.     @Test //测试Hibernate和Spring整合后    
  24.     public void hibernateAndSpring() {    
  25.         categoryService.update(new Category(1"休闲女式"true)); //categoryService通过Spring从上面注入进来的    
  26.     }    
  27. }   

  然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站查看数据库,发现id=1的category被修改成了休闲女式了,说明更新成功。至此,Spring和Hibernate整合 成功。

  5. 搭建Struts2情况

  5.1 添加相应的装备和jar包

   struts2运行所需的jar包我放正正在struts2.3.41的Library中了,直接引入即可,不再赘述。另外,还要对web.xml文件进 行装备,装备如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">    
  3.   <display-name>E_shop</display-name>    
  4.   <welcome-file-list>    
  5.     <welcome-file>index.jsp</welcome-file>    
  6.   </welcome-file-list>    
  7.       
  8.   <filter>    
  9.     <filter-name>struts2</filter-name>    
  10.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    
  11.   </filter>    
  12.       
  13.   <filter-mapping>    
  14.     <filter-name>struts2</filter-name>    
  15.     <url-pattern>*.action</url-pattern>    
  16.   </filter-mapping>    
  17.       
  18. </web-app>    

   如上,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站装备了一个StrutsPrepareAndExecuteFilter过滤器,并将过滤器的url-pattern设置为*.action,即所 有.action后缀的都会起首经过这个过滤器,这也是struts2的入口处。

  5.2 创建Action而且装备到struts.xml文件中

   银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站创建一个Action如下:

Java代码
  1. public class CategoryAction extends ActionSupport {    
  2.     private CategoryService categoryService; //设置categoryService是为了很直观的看出与Spring整合前后的折柳    
  3.         
  4.     public void setCategoryService(CategoryService categoryService) {    
  5.         this.categoryService = categoryService;    
  6.     }    
  7.         
  8.     public String update() {    
  9.         System.out.println("----update----");    
  10.         System.out.println(categoryService); //整合前后输出折柳    
  11.         return "index";    
  12.     }    
  13.         
  14.     public String save() {    
  15.         System.out.println("----save----");    
  16.         System.out.println(categoryService);//整合前后输出折柳    
  17.         return "index";    
  18.     }    
  19. }    

  然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站装备struts.xml文件,该文件放正正在src目录下:

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <!DOCTYPE struts PUBLIC    
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">    
  5.     
  6. <struts>    
  7.     <package name="shop" extends="struts-default">    
  8.         <!-- category_update.actiocan: 拜访update方法 -->    
  9.         <action name="category_*" class="cn.it.shop.action.CategoryAction" method="{1}">    
  10.             <result name="index">/index.jsp</result>    
  11.         </action>    
  12.     </package>    
  13.     
  14. </struts>    

  5.3 测试Struts2情况

   测试方法是:写一个jsp拜访Action,如果Action可以创建,则表示struts2情况OK。即struts2的一连串流程可以正 常走完:jsp-->struts.xml-->Action-->struts.xml-->jsp,这样struts2的情况就算搭好了。银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站写一个简单的 index.jsp

XML/HTML代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>    
  2.     
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">    
  4. <html>    
  5.   <head>    
  6.     <title>My JSP 'index.jsp' starting page</title>    
  7.   </head>    
  8.       
  9.   <body>     
  10.     <!-- 下面两种写法都可以拜访 --></span>    
  11.     <a href="${pageContext.request.contextPath }/category_update.action">拜访update</a>    
  12.     <a href="category_save.action">拜访save</a>    
  13.   </body>    
  14. </html>    

  然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站部署以下工程,打开tomcat效劳器,正正在浏览器中输入:http://localhost:8080/E_shop/index.jsp后,能出 现正常jsp页面,然后点击两个按钮,仍然跳转到index.jsp,然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站看一下控制台的输出信歇:

XML/HTML代码
  1. ----update----    
  2. null    
  3. ----save----    
  4. null    

  说明struts2的一条线走完了,情况没有问题,至此,struts2开发情况搭建杀青。

   银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站看控制台输出了null,也就是说categoryService是空,也就是说根本没拿到categoryService,由于银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站没有和 Spring进行整合,没有被注入进来,以是null是正常的。银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站沿着控制台输出的信歇往上翻,会发现一条信歇:Choosing bean (struts) for (com.opensymphony.xwork2.ObjectFactory)。括号里是struts说明没有和Spring整合前,Action是有 Struts2发生的。

  6. Spring和Struts2整合

  6.1 添加相应的jar包

  Spring与Struts2整合时的jar包浸要正正在spring4.2.4-web里面,里面包括struts2-spring-plugin-2.3.24.1.jar,导包不 再赘述。

  6.2 把Action和它的依赖交给Spring牵制

   正正在Spring的装备文件beans.xml中装备Action和它的依赖,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站目前只有一个Action,装备如下所示:

XML/HTML代码
  1. <bean id="date" class="java.util.Date" />    
  2. <bean id="categoryAction" class="cn.it.shop.action.CategoryAction" scope="prototype">    
  3.     <property name="categoryService" ref="categoryService" /> <!-- 依赖的categoryService用上面和Hibernate整合时装备好的categoryService -->    
  4. </bean>    

  6.3 修改struts.xml中的装备

   原来正正在struts.xml中,class属性对应的是举座Action的绝对限制名,现正正在将class属性的值改为Spring中装备action的 id值,即categoryAction,如下:

XML/HTML代码
  1. <struts>    
  2.     <package name="shop" extends="struts-default">    
  3.     
  4.         <!-- class对应的是Spring中装备该Action的id值,由于要交给Spring牵制 -->    
  5.         <action name="category_*" class="categoryAction" method="{1}">    
  6.             <result name="index">/index.jsp</result>    
  7.         </action>    
  8.     </package>    
  9.     
  10. </struts>    

  6.4 装备监听器

   正正在web.xml中装备监听器ContextLoaderListener,这样正正在效劳器启动的时候就可以加载Spring的装备文件了。如下 :

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">    
  3.   <display-name>E_shop</display-name>    
  4.   <welcome-file-list>    
  5.     <welcome-file>index.jsp</welcome-file>    
  6.   </welcome-file-list>    
  7.       
  8.   <filter>    
  9.     <filter-name>struts2</filter-name>    
  10.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    
  11.   </filter>    
  12.       
  13.   <filter-mapping>    
  14.     <filter-name>struts2</filter-name>    
  15.     <url-pattern>*.action</url-pattern>    
  16.   </filter-mapping>    
  17.     
  18.  <!-- web.xml中监听器的启动优先级要高于过滤器,以是配正正在下面无所谓的 -->    
  19.   <listener>    
  20.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    
  21.   </listener>    
  22.       
  23.   <context-param>    
  24.     <param-name>contextConfigLocation</param-name>    
  25.     <param-value>classpath:beans.xml</param-value>    
  26.   </context-param>    
  27.       
  28. </web-app>    

  6.5 测试整合结果

  银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站正正在Action中新加一句更新数据库的语句,如下:

Java代码
  1. public class CategoryAction extends ActionSupport {    
  2.         
  3.     private Category category;//设置一个私有成员变量接收url带过来的参数,帮理下面要写好get和set方法    
  4.         
  5.     private CategoryService categoryService;    
  6.         
  7.     public void setCategoryService(CategoryService categoryService) {    
  8.         this.categoryService = categoryService;    
  9.     }    
  10.         
  11.     public String update() {    
  12.         System.out.println("----update----");    
  13.         System.out.println(categoryService);//由于曾经和Spring整合,以是可以拿到这个categoryService了,打印出来就不是null了    
  14.         categoryService.update(category); //新加一条语句,来更新数据库    
  15.         return "index";    
  16.     }    
  17.         
  18.     public String save() {    
  19.         System.out.println("----save----");    
  20.         System.out.println(categoryService);    
  21.         return "index";    
  22.     }    
  23.     
  24.     public Category getCategory() {    
  25.         return category;    
  26.     }    
  27.     
  28.     public void setCategory(Category category) {    
  29.         this.category = category;    
  30.     }    
  31. }    

  然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站修改一下index.jsp文件,如下:

XML/HTML代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>    
  2.     
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">    
  4. <html>    
  5.   <head>    
  6.     <title>My JSP 'index.jsp' starting page</title>    
  7.   </head>    
  8.       
  9.   <body>    
  10.     <a href="${pageContext.request.contextPath }/category_update.action?category.id=2&category.type=gga&category.hot=false">拜访update</a>    
  11.     <a href="category_save.action">拜访save</a>    
  12.   </body>    
  13. </html>    

  然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站部署以下工程,打开tomcat效劳器,正正在浏览器中输入:http://localhost:8080/E_shop/index.jsp后,能出 现正常jsp页面,然后点击“拜访update”按钮,仍然跳转到index.jsp,然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站看一下控制台的输出信歇:

XML/HTML代码
  1. ----update----    
  2. cn.it.shop.service.impl.CategoryServiceImpl@7c5ecf80    
  3. Hibernate: update category set hot=?, type=? where id=?    

  银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站看到可以输出categoryService这个对象的信歇了,也可以输出执行update语句时的SQL语句,然后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站查询一 下数据库,发现id=2的数据的type被更新为gga,hot更新为false。银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站沿着控制台输出的信歇往上翻,会发现一条信歇: Choosing bean (spring) for (com.opensymphony.xwork2.ObjectFactory),括号里为spring,与上面的情况对比可知, Struts2正正在与Spring整合后,Action交给了Spring去牵制了。

  至此,Struts2、Hibernate4和Spring4整合工作曾经全部完成。接下来就可以正正在SSH情况下进行开发了!

  整体项目的源码下载地址:

 转自:倪升武的CSDN博客

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.sygjbus.cn/software/759.html
2017年8月30日
作家:鸡啄米 分类:软件开发 浏览: 评论:0