struts2释出已经很久了,虽然自己现在作GUI开发,不过有时间还是学习下web开发,现在就将我使用myeclipse工具应用struts2 + spring + hibernate 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!
       首先,myeclipse中web工程目录结构如下图:


       使用myeclipse开发hibernate和spring的操作我就不详细说了,网上的教程很多,如果有不明白的可以咨询我,呵呵.
      其中持久类AbstractTest,Test,TestDAO,Test.hbm.xml都是myeclipse的hibernate工具生成的.TestAction类是struts2的核心处理类,代码如下:


package 
   com.yangqiang.strutsdemo.web;

 
  import 
   java.util.Collection;
 
  import 
   java.util.List;

 
  import 
   org.apache.log4j.Logger;

 
  import 
   com.opensymphony.xwork2.ActionSupport;
 
  import 
   com.yangqiang.strutsdemo.domain.Test;
 
  import 
   com.yangqiang.strutsdemo.domain.TestDAO;

 
  /** */ 
  /**
 * 描述:
 * @author Stone yang  创建日期:2007-4-24 
 * @version pattern Study
 * 技术支持: <a href=""></a>
 */ 
  
 
  public 
    
  class 
   TestAction  
  extends 
   ActionSupport  
  ... 
  {
    private static final Logger log = Logger.getLogger(TestAction.class);

    private Integer id;
    private Integer[] ids;
    protected TestDAO testDao;
    private Test test;
    private Collection<Test> testColl;
    
    /** *//**
     * 描述 return 返回 ids。
     * @author Stone yang
     * @date 2007-4-24
     */
    public Integer[] getIds() ...{
        return ids;
    }
    /** *//**
     * 描述:设置ids的值。
     * @param ids
     * @author Stone yang
     * @date 2007-4-24
     */
    public void setIds(Integer[] ids) ...{
        this.ids = ids;
    }
    /** *//**
     * 描述 return 返回 testColl。
     * @author Stone yang
     * @date 2007-4-24
     */
    public Collection<Test> getTestColl() ...{
        return testColl;
    }
    /** *//**
     * 描述:设置testColl的值。
     * @param testColl
     * @author Stone yang
     * @date 2007-4-24
     */
    public void setTestColl(Collection<Test> testColl) ...{
        this.testColl = testColl;
    }
    /** *//**
     * 描述 return 返回 id。
     * @author Stone yang
     * @date 2007-4-24
     */
    public Integer getId() ...{
        return id;
    }
    /** *//**
     * 描述:设置id的值。
     * @param id
     * @author Stone yang
     * @date 2007-4-24
     */
    public void setId(Integer id) ...{
        this.id = id;
    }
    /** *//**
     * 描述 return 返回 testDao。
     * @author Stone yang
     * @date 2007-4-24
     */
    public TestDAO getTestDao() ...{
        return testDao;
    }
    /** *//**
     * 描述:设置testDao的值。
     * @param testDao
     * @author Stone yang
     * @date 2007-4-24
     */
    public void setTestDao(TestDAO testDao) ...{
        this.testDao = testDao;
    }
    /** *//**
     * 描述 return 返回 test。
     * @author Stone yang
     * @date 2007-4-24
     */
    public Test getTest() ...{
        return test;
    }
    /** *//**
     * 描述:设置test的值。
     * @param test
     * @author Stone yang
     * @date 2007-4-24
     */
    public void setTest(Test test) ...{
        this.test = test;
    }
    
    public String load() ...{
        test = getTestDao().findById(id);
           return SUCCESS;
       }

       @SuppressWarnings("unchecked")
    public String list() ...{
           testColl = getTestDao().findByExample(new Test());
           return SUCCESS;
       }
           
       public String store() ...{
           getTestDao().merge(test);
           return SUCCESS;
       }
       
       public String remove() ...{
        for (int i = 0, size = ids.length; i < size; i++) ...{
            getTestDao().delete(getTestDao().findById(ids[i]));
        }
        return SUCCESS;
    }

    
}

使用myeclipse 应用struts2 + spring + hibernate 实现CRUD_spring



applicationContext.xml 主要是工具生成 的,只是将配置文件路径改下,代码如下:


使用myeclipse 应用struts2 + spring + hibernate 实现CRUD_spring

<?   xml version="1.0" encoding="UTF-8" 
  ?> 
  
   <! 
  DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" 
  > 
  

   < 
  beans 
  > 
  


       < 
  bean  
  id 
  ="struts" 
  
        class   ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
  > 
  
           < 
  property  
  name 
  ="configLocation" 
  > 
  
                           <!-- 
   改变了一下 
  --> 
  
               < 
  value 
  > 
  /WEB-INF/classes/hibernate.cfg.xml 
  </ 
  value 
  > 
  
           </ 
  property 
  > 
  
       </ 
  bean 
  > 
  
       < 
  bean  
  id 
  ="testDao" 
  
        class   ="com.yangqiang.strutsdemo.domain.TestDAO" 
  > 
  
           < 
  property  
  name 
  ="sessionFactory" 
  > 
  
               < 
  ref  
  bean 
  ="struts" 
    
  /> 
  
           </ 
  property 
  > 
  
       </ 
  bean 
  ></ 
  beans 
  > 


struts.xml  (变化不大,写过以前struts配置文件的不难理解) 

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

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

   <   struts 
  > 
  
       <   package  
  name 
  ="struts_crud" 
   extends 
  ="struts-default" 
   namespace 
  ="/test" 
  > 
  
           <   action  
  name 
  ="List" 
   class 
  ="com.yangqiang.strutsdemo.web.TestAction" 
   method 
  ="list" 
  > 
  
               <   result 
  > 
  list.jsp 
  </ 
  result 
  > 
  
           </   action 
  > 
  
           <   action  
  name 
  ="Edit" 
   class 
  ="com.yangqiang.strutsdemo.web.TestAction" 
   method 
  ="load" 
  > 
  
               <   result 
  > 
  edit.jsp 
  </ 
  result 
  > 
  
           </   action 
  > 
  
           <   action  
  name 
  ="Store" 
   class 
  ="com.yangqiang.strutsdemo.web.TestAction" 
   method 
  ="store" 
  > 
  
               <   result  
  type 
  ="redirect" 
  > 
  List.action 
  </ 
  result 
  > 
  
           </   action 
  > 
  
           <   action  
  name 
  ="Remove" 
   class 
  ="com.yangqiang.strutsdemo.web.TestAction" 
   method 
  ="remove" 
  > 
  
               <   result  
  type 
  ="redirect" 
  > 
  List.action 
  </ 
  result 
  > 
  
           </   action 
  > 
  
       </   package 
  > 
  
   </   struts 
  > 

struts.properties 

   
struts.objectFactory    =    spring 

web.xml 

   
<?   xml versinotallow="1.0" encoding="UTF-8"   ?>   
   <   web-app    version   ="2.4" 
   
    xmlns   ="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi   ="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation   ="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
  >   
       <   display-name   >   Struts2 crud 例程 
  </ 
  display-name 
  > 
  
    
       <   context-param   >   
           <   param-name   >   contextConfigLocation 
  </ 
  param-name 
  > 
  
           <   param-value   >   classpath*:*.xml 
  </ 
  param-value 
  > 
  
       </   context-param   >   
    
       <   listener   >   
           <   listener-class   >   org.springframework.web.context.ContextLoaderListener 
  </ 
  listener-class 
  > 
  
       </   listener   >   
    
       <   filter   >   
           <   filter-name   >   struts2 
  </ 
  filter-name 
  > 
  
           <   filter-class   >   
            org.apache.struts2.dispatcher.FilterDispatcher
           </   filter-class   >   
       </   filter   >   

       <   filter-mapping   >   
           <   filter-name   >   struts2 
  </ 
  filter-name 
  > 
  
           <   url-pattern   >   /* 
  </ 
  url-pattern 
  > 
  
       </   filter-mapping   >   

       <   welcome-file-list   >   
           <   welcome-file   >   list.jsp 
  </ 
  welcome-file 
  > 
  
       </   welcome-file-list   >   
   </   web-app   >   
 

list.jsp 

   
<%   ...   @ page language="java" cnotallow="text/html; charset=utf-8" pageEncoding="utf-8"    %>   
   <%   ...   @ taglib prefix="s" uri="/struts-tags"    %>   

   <!   DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"   >   
   <   html    xmlns   ="http://www.w3.org/1999/xhtml"   > 
  
   <   head   >   
       <   title   >   Book List   </ 
  title 
  > 
  
       <   style    type   ="text/css"   > 
  ... 
  
        table {...}{
            border: 1px solid black;
            border-collapse: collapse;
        }
        
        table thead tr th {...}{
            border: 1px solid black;
            padding: 3px;
            background-color: #cccccc;
        }
        
        table tbody tr td {...}{
            border: 1px solid black;
            padding: 3px;
        }
       </   style   >   
   </   head   >   
   <   body   >       
       <   h2   >   Book List   </ 
  h2 
  > 
  
       <   s:form    action   ="Remove"    theme 
  ="simple" 
  > 
  
           <   table    cellspacing   ="0"   > 
  
               <   thead   >   
                   <   tr   >   
                       <   th   >   勾选   </ 
  th 
  > 
  
                       <   th   >   ID   </ 
  th 
  > 
  
                       <   th   >   名称   </ 
  th 
  > 
  
                       <   th   >   作者   </ 
  th 
  > 
  
                   </   tr   >   
               </   thead   >   
               <   tbody   >   
                   <   s:iterator    value   ="testColl"   > 
  
                       <   tr   >   
                           <   td   ><   input    type 
  ="checkbox" 
   name 
  ="ids" 
   value 
  ='<s:property  
  value 
  ="id" 
    
  /> 
  ' /> 
  </ 
  td 
  > 
  
                           <   td   ><   s:property    value 
  ="id" 
    
  /></ 
  td 
  > 
  
                           <   td   ><   s:property    value 
  ="name" 
    
  /></ 
  td 
  > 
  
                           <   td   ><   s:property    value 
  ="author" 
    
  /></ 
  td 
  > 
  
                           <   td   >   
                               <   a    href   ='<s:url    action 
  ="Edit" 
  >< 
  s:param  
  name 
  ="id" 
   value 
  ="id" 
    
  /></ 
  s:url 
  > 
  '>
                                Edit
                               </   a   >   
                                   
                               <   a    href   ='<s:url    action 
  ="Remove" 
  >< 
  s:param  
  name 
  ="ids" 
   value 
  ="id" 
    
  /></ 
  s:url 
  > 
  '>
                                Delete
                               </   a   >   
                           </   td   >   
                       </   tr   >   
                   </   s:iterator   >   
               </   tbody   >   
           </   table   >   
           <   s:submit    value   ="Remove"     
  />< 
  a  
  href 
  ="edit.jsp" 
  > 
  Add Test 
  </ 
  a 
  > 
  
       </   s:form   >       
   </   body   >   
   </   html   > 

edit.jsp 

   
<%   ...   @ page language="java" cnotallow="text/html; charset=utf-8" pageEncoding="utf-8"    %>   
   <%   ...   @ taglib prefix="s" uri="/struts-tags"    %>   

   <!   DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"   >   
   <   html    xmlns   ="http://www.w3.org/1999/xhtml"   >   
   <   head   >   
       <   title   >   Book   </   title 
  > 
  
   </   head   >   
   <   body   >       
       <   h2   >   
           <   s:if    test   ="null == test"   >   
            Add Book
           </   s:if   >   
           <   s:else   >   
            Edit Book
           </   s:else   >   
       </   h2   >   
       <   s:form    action   ="Store"       > 
  
           <   s:hidden    name   ="test.id"    label   ="ID" 
    
  /> 
  
           <   s:textfield    name   ="test.name"    label   ="书名" 
    
  /> 
  
           <   s:textfield    name   ="test.author"    label   ="作者" 
    
  /> 
  
           <   s:submit    />   
       </   s:form   >   
   </   body   >   
   </   html   >