编程语言

img ezerg

学习Struts+spring+hibernate的笔记

发表于2004/10/11 14:27:00  1028人阅读

(快刀浪子原创)下面是我学习Struts+spring+hibernate的笔记.

1.WEB.XML的配置:
首先在web.xml中加入:
java代码: 

 1 
 2   <servlet>
 3     <servlet-name>SpringContextServlet</servlet-name>
 4     <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
 5     <load-on-startup>1</load-on-startup>
 6   </servlet>
 7 



我的整个web.xml象这样:
java代码: 

 1   
 2   <?xml version="1.0" encoding="UTF-8"?>
 3   <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
 4   <web-app>
 5     <display-name>info_web</display-name>
 6     <context-param>
 7       <param-name>contextConfigLocation</param-name>
 8       <param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>
 9     </context-param>
 10    <filter>
 11      <filter-name>SetCharacterEncoding</filter-name>
 12      <filter-class>iclass.util.SetEncodingFilter</filter-class>
 13      <init-param>
 14        <param-name>encoding</param-name>
 15        <param-value>GBK</param-value>
 16      </init-param>
 17    </filter>
 18    <filter>
 19      <filter-name>FilterRedirector</filter-name>
 20      <filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
 21    </filter>
 22    <filter-mapping>
 23      <filter-name>SetCharacterEncoding</filter-name>
 24      <url-pattern>/*</url-pattern>
 25    </filter-mapping>
 26    <filter-mapping>
 27      <filter-name>FilterRedirector</filter-name>
 28      <url-pattern>/FilterRedirector</url-pattern>
 29    </filter-mapping>
 30    <servlet>
 31      <servlet-name>SpringContextServlet</servlet-name>
 32      <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
 33      <load-on-startup>1</load-on-startup>
 34    </servlet>
 35    <servlet>
 36      <servlet-name>ServletRedirector</servlet-name>
 37      <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
 38    </servlet>
 39    <servlet>
 40      <servlet-name>JspRedirector</servlet-name>
 41      <jsp-file>/jspRedirector.jsp</jsp-file>
 42    </servlet>
 43    <servlet>
 44      <servlet-name>action</servlet-name>
 45      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 46      <init-param>
 47        <param-name>config</param-name>
 48        <param-value>/WEB-INF/struts-config.xml</param-value>
 49      </init-param>
 50      <init-param>
 51        <param-name>debug</param-name>
 52        <param-value>2</param-value>
 53      </init-param>
 54      <init-param>
 55        <param-name>application</param-name>
 56        <param-value>ApplicationResources</param-value>
 57      </init-param>
 58      <load-on-startup>2</load-on-startup>
 59    </servlet>
 60    <servlet-mapping>
 61      <servlet-name>ServletRedirector</servlet-name>
 62      <url-pattern>/ServletRedirector</url-pattern>
 63    </servlet-mapping>
 64    <servlet-mapping>
 65      <servlet-name>JspRedirector</servlet-name>
 66      <url-pattern>/JspRedirector</url-pattern>
 67    </servlet-mapping>
 68    <servlet-mapping>
 69      <servlet-name>action</servlet-name>
 70      <url-pattern>*.do</url-pattern>
 71    </servlet-mapping>
 72    <welcome-file-list>
 73      <welcome-file>index.jsp</welcome-file>
 74    </welcome-file-list>
 75    <taglib>
 76      <taglib-uri>/tags/struts-nested</taglib-uri>
 77      <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
 78    </taglib>
 79    <taglib>
 80      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
 81      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
 82    </taglib>
 83    <taglib>
 84      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
 85      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
 86    </taglib>
 87    <taglib>
 88      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
 89      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
 90    </taglib>
 91    <taglib>
 92      <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
 93      <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
 94    </taglib>
 95    <taglib>
 96      <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
 97      <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
 98    </taglib>
 99  </web-app>
 100 



2.spring配置
配置文件为applicationContext-hibernate.xml,在此配置文件中,配了POJO层,商业逻辑层,DAO层,和事务管理
java代码: 

  
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  
  <beans>       
          <!-- ========================= Start of PERSISTENCE DEFINITIONS ========================= --> 
         
          <!-- Choose the dialect that matches your "dataSource" definition -->
  
 10         <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 11                 <property name="driverClassName">
 12                         <value>org.gjt.mm.mysql.Driver</value>
 13                 </property>
 14                 <property name="url">
 15                         <value>jdbc:mysql://localhost:3306/info_web?useUnicode=true&characterEncoding=GBK</value>
 16                 </property>
 17                 <property name="username">
 18                         <value>root</value>
 19                 </property>
 20                 <property name="password">
 21                         <value>123456</value>
 22                 </property>
 23         </bean>
 24        
 25         <bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
 26                 <property name="mappingResources">
 27                         <list>
 28                                 <value>infoweb/pojo/Answer.hbm.xml</value>
 29                                 <value>infoweb/pojo/Board.hbm.xml</value>
 30                                 <value>infoweb/pojo/Image.hbm.xml</value>
 31                                 <value>infoweb/pojo/Info.hbm.xml</value>
 32                         </list>
 33                 </property>               
 34                
 35                 <property name="hibernateProperties">
 36                         <props>
 37                                 <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
 38                                 <prop key="hibernate.show_sql">true</prop>
 39                                 <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
 40                         </props>
 41                 </property>       
 42 
 43                 <property name="dataSource"><ref bean="myDataSource"/></property>
 44         </bean>
 45 
 46 
 47 
 48         <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
 49         <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
 50                 <property name="sessionFactory"><ref local="mySessionFactory"/></property>
 51         </bean>
 52        
 53 
 54         <!-- ***** Board  SERVICE ***** -->
 55         <bean id="boardService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">       
 56                 <property name="transactionManager"><ref local="myTransactionManager"/></property>
 57                 <property name="target"><ref local="boardServiceSpring"/></property>
 58                 <property name="transactionAttributes">
 59                         <props>
 60                                 <prop key="get*">PROPAGATION_REQUIRED,readOnly,-BoardException</prop>
 61                                 <prop key="set*">PROPAGATION_REQUIRED,-BoardException</prop>
 62                                 <prop key="modify*">PROPAGATION_REQUIRED,-BoardException</prop>
 63                                 <prop key="remove*">PROPAGATION_REQUIRED,-BoardException</prop>
 64                         </props>
 65                 </property>
 66         </bean>
 67 
 68         <!-- board primary business object implementation -->
 69         <bean id="boardServiceSpring" class="infoweb.service.BoardServiceSpringImpl">
 70                 <property name="boardTreeDAO"><ref local="boardTreeDAO"/></property>
 71         </bean>
 72        
 73 
 74         <!-- DAO board: Hibernate implementation -->
 75         <bean id="boardTreeDAO" class="infoweb.dao.BoardTreeDAOImpl">
 76                 <property name="sessionFactory"><ref local="mySessionFactory"/></property>
 77         </bean>
 78 
 79         <!-- DAO info: Hibernate implementation -->
 80         <bean id="infoDAO" class="infoweb.dao.InfoDAOImpl">
 81                 <property name="sessionFactory"><ref local="mySessionFactory"/></property>
 82         </bean>
 83 </beans>
 84 
 85 



3.做DAO代码,
java代码: 

 1   
 2   package infoweb.dao;
 3   
 4   import java.util.List;
 5   import java.util.Iterator;
 6   
 7   import infoweb.pojo.Board;
 8   
 9   
 10  import net.sf.hibernate.HibernateException;
 11  import net.sf.hibernate.Query;
 12  import net.sf.hibernate.Session;
 13  
 14  import org.springframework.orm.hibernate.HibernateCallback;
 15  import org.springframework.orm.hibernate.support.HibernateDaoSupport;
 16  
 17  
 18  /**
 19   * <p>Title: 版块分类DAOImpl</p>
 20   * <p>Description: 用树型结构实现</p>
 21   * <p>Copyright: Copyright (c) 2004</p>
 22   * <p>Company: </p>
 23   * @author 段洪杰
 24   * @version 1.0
 25   */

 26  
 27  
 28  public class BoardTreeDAOImpl extends HibernateDaoSupport implements
29      IBoardTreeDAO {
 30  
 31  
 32    /**
 33     * 构造函数
 34     */

35    public BoardTreeDAOImpl() {
 36      super();
 37    }
 38  
 39  
 40    /**
 41     * 通过ID取得版块
 42     * @param id String
 43     * @return Board
 44     */

 45  
46    public Board getBoardById(String id) {
 47      Board board = (Board) getHibernateTemplate().load(Board.class, id);
 48      return board;
 49    }
 50  
 51  
 52    /**
 53     * 取根叶
 54     * @return Iterator
 55     */

56    public Iterator getRoots() throws HibernateException {
 57      String queryString =
 58          "select board from Board as board where board.parentId='root' order by board.id desc";
 59      List roots = getHibernateTemplate().find(queryString);
 60      return roots.iterator();
 61    }
 62  
 63  
 64    /**
 65     * 存根叶
 66     * @param board Board
 67     */

68    public void setRoot(Board board) {
 69      board.setParentId("root");
 70      getHibernateTemplate().save(board);
 71    }
 72  
 73  
 74    /**
 75     * 取子叶
 76     * @param  parentid String
 77     * @return List
 78     */

79    public Iterator getChildren(String parentid) {
 80      /*
 81           String queryString =
 82       "select board as Board where board.parent_id='parentid' order by board.id desc";
 83           List children = getHibernateTemplate().find(queryString);
 84           return children;
 85       */

 86      Board parent = (Board) getHibernateTemplate().load(Board.class, parentid);
 87      return parent.getChildren().iterator();
 88    }
 89  
 90  
 91    /**
 92     * 取子叶数
 93     * @param parentid String
 94     * @return int
 95     */

 96  
97    public int getChildrenCount(String parentid) {
 98      /*
 99           String queryString =
 100      "select count(*) Board where board.parent_id='parentid' order by board.id desc";
 101          List children = getHibernateTemplate().find(queryString);
 102          int count = ((Integer) children.iterator().next()).intValue();
 103          return count;
 104      */

 105     Board parent = (Board) getHibernateTemplate().load(Board.class, parentid);
 106     int count = parent.getChildren().size();
 107     return count;
 108   }
 109 
 110 
 111   /**
 112    * 存子叶
 113    * @param parentLeaf Leaf
 114    */

115   public void setChild(Board board, String parentid) {
 116     board.setParentId(parentid);
 117     getHibernateTemplate().save(board);
 118   }
 119 
 120 
 121   /**
 122    *
 123    * 删除该叶和它的子叶
 124    * @param board Board
 125    */

126   public void deleteBranch(Board board) {
 127       getHibernateTemplate().delete(board);
 128   }
 129 
 130 
 131   /**
 132    * 根据子叶得到父叶
 133    * @param child Board
 134    * @return Board
 135    */

136   public Board getParentByChild(Board child) {
 137     String parentId = child.getParentId();
 138     Board parent = (Board) getHibernateTemplate().load(Board.class, parentId);
 139     return parent;
 140   }
 141 
 142 
 143   /**
 144    * 通过子ID得到父叶
 145    * @param id String
 146    * @return Board
 147    */

148   public Board getParentByChildId(String id) {
 149     Board child = (Board) getHibernateTemplate().load(Board.class, id);
 150     Board parent = (Board) getHibernateTemplate().load(Board.class,child.getParentId());
 151     return parent;
 152   }
 153 }
 154 
 155 



4.做service层代码

java代码: 

  
  package infoweb.service;
  
  import java.util.List;
  import java.util.Iterator;
  import infoweb.dao.BoardTreeDAOImpl;
  import infoweb.dao.IBoardTreeDAO;
  import infoweb.pojo.Board;
  import infoweb.exception.BoardException;
 10 import net.sf.hibernate.HibernateException;
 11 
 12 /**
 13  * <p>Title: </p>
 14  * <p>Description: </p>
 15  * <p>Copyright: Copyright (c) 2004</p>
 16  * <p>Company: </p>
 17  * @author 段洪杰
 18  * @version 1.0
 19  */

20 public class BoardServiceSpringImpl implements IBoardService {
 21 
 22     private IBoardTreeDAO boardTreeDAO;
 23 
24     public BoardServiceSpringImpl() {
 25         super();
 26     }
 27 
 28     /**
 29      * 取所有roots版块
 30      * @return Iterator
 31      */

32     public Iterator getRoots() throws BoardException {
 33         Iterator roots = null;
34         try {
 35             roots = boardTreeDAO.getRoots();
 36         } catch (Exception ex) {
 37             throw new BoardException("取ROOT版块时出错! " + ex.toString());
 38         }
 39         return roots;
 40     }
 41 
 42     /**
 43      * 增加Root新版块
 44      * @param board Board
 45      */

46     public void setRoot(Board board) throws BoardException {
47         try {
 48             boardTreeDAO.setRoot(board);
 49         } catch (Exception ex) {
 50             throw new BoardException("增加ROOT版块时出错! " + ex.toString());
 51         }
 52     }
 53 
 54     /**
 55      * 删除版块 (包含下级版块)
 56      * @param board Board
 57      */

58     public void removeBoard(Board board) throws BoardException {
59         try {
 60             boardTreeDAO.deleteBranch(board);
 61         } catch (Exception ex) {
 62             throw new BoardException("删除版块时出错! " + ex.toString());
 63         }
 64     }
 65 
 66     /**
 67      *
 68      * @return IBoardTreeDAO
 69      */

70     public IBoardTreeDAO getBoardTreeDAO() {
 71         return boardTreeDAO;
 72     }
 73 
 74     /**
 75      *
 76      * @param boardTreeDAO IBoardTreeDAO
 77      */

78     public void setBoardTreeDAO(IBoardTreeDAO boardTreeDAO) {
 79         this.boardTreeDAO = boardTreeDAO;
 80     }
 81 
 82 }
 83 
 84 



5.做ACTION的父类

java代码: 

  
  package infoweb.web;
  
  
  import javax.servlet.ServletContext;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionServlet;
  import org.springframework.web.context.WebApplicationContext;
  import org.springframework.web.context.support.WebApplicationContextUtils;
 10 
 11 import infoweb.service.IBoardService;
 12 
 13 
 14 /**
 15  * <p>Title: </p>
 16  * <p>Description: </p>
 17  * <p>Copyright: Copyright (c) 2004</p>
 18  * <p>Company: </p>
 19  * @author 段洪杰
 20  * @version 1.0
 21  */

 22 
23 public class BaseAction extends Action {
 24 
 25   private IBoardService boardService;
 26 
27   public void setServlet(ActionServlet actionServlet) {
 28     super.setServlet(actionServlet);
 29     ServletContext servletContext = actionServlet.getServletContext();
 30     WebApplicationContext wac =
 31         WebApplicationContextUtils.getRequiredWebApplicationContext(
 32         servletContext);
 33     this.boardService = (IBoardService) wac.getBean("boardService");
 34   }
 35 
36   protected IBoardService getBoardService() {
 37     return boardService;
 38   }
 39 
 40 }
 41 
 42 



6.做action类
java代码: 

  
  package infoweb.web;
  
  import infoweb.pojo.Board;
  import org.apache.commons.beanutils.PropertyUtils;
  import org.apache.struts.action.*;
  import org.apache.log4j.Logger;
  import javax.servlet.http.*;
  import java.util.Iterator;
 10 import java.util.Date;
 11 
 12 /**
 13  * <p>Title: </p>
 14  * <p>Description: </p>
 15  * <p>Copyright: Copyright (c) 2004</p>
 16  * <p>Company: </p>
 17  * @author 段洪杰
 18  * @version 1.0
 19  */

 20 
 21 
22 public class SetBoardAction extends BaseAction {
 23 
 24     private static Logger log = Logger.getLogger(SetBoardAction.class);
 25 
 26     public ActionForward execute(ActionMapping actionMapping,
 27                                  ActionForm actionForm,
 28                                  HttpServletRequest httpServletRequest,
 29                                  HttpServletResponse httpServletResponse) throws
30             Exception {
 31 
 32         // SessionBean sessionBean = (SessionBean) httpServletRequest.getSession().getAttribute("sessionBean");
 33         BoardForm boardForm = (BoardForm) actionForm;
 34         //String backURL = httpServletRequest.getHeader("Referer");
 35         /*
 36         if (sessionBean==null||!sessionBean.getIsLogon()) {
 37             httpServletRequest.setAttribute("message", "系统超时,或者没有登录 .返回重新登录!");
 38             httpServletRequest.setAttribute("locationFile",
 39                                             "location='index.jsp';");
 40             return actionMapping.findForward("message");
 41         }
 42         */

 43         Board board = new Board();
 44         boardForm.setCreateDate(new Date());
 45         PropertyUtils.copyProperties(board, boardForm);
 46         getBoardService().setRoot(board);
 47 
 48         httpServletRequest.setAttribute("message", "版块信息录入完成!");
 49         httpServletRequest.setAttribute("locationFile",
 50                                         "<A HREF=/"javascript:history.back()/">返回</A>");
 51         return (actionMapping.findForward("success"));
 52     }
 53 
 54 }
 55 
 56 

学习中ing    编程小语
阅读全文
0 0

相关文章推荐

img
取 消
img