原创作者: dhj1   阅读:7471次   评论:3条   更新时间:2011-06-01    
(快刀浪子原创)下面是我学习Struts+spring+hibernate的笔记.

1.WEB.XML的配置:
首先在web.xml中加入:
  <servlet>
    <servlet-name>SpringContextServlet</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>


我的整个web.xml象这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>info_web</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>
  </context-param>
  <filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>iclass.util.SetEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GBK</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>FilterRedirector</filter-name>
    <filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>FilterRedirector</filter-name>
    <url-pattern>/FilterRedirector</url-pattern>
  </filter-mapping>
  <servlet>
    <servlet-name>SpringContextServlet</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>ServletRedirector</servlet-name>
    <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>JspRedirector</servlet-name>
    <jsp-file>/jspRedirector.jsp</jsp-file>
  </servlet>
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>application</param-name>
      <param-value>ApplicationResources</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletRedirector</servlet-name>
    <url-pattern>/ServletRedirector</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>JspRedirector</servlet-name>
    <url-pattern>/JspRedirector</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>
</web-app>


2.spring配置
配置文件为applicationContext-hibernate.xml,在此配置文件中,配了POJO层,商业逻辑层,DAO层,和事务管理
<?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 -->

	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName">
			<value>org.gjt.mm.mysql.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://localhost:3306/info_web?useUnicode=true&amp;characterEncoding=GBK</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>123456</value>
		</property>
	</bean>
	
	<bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
		<property name="mappingResources">
			<list>
				<value>infoweb/pojo/Answer.hbm.xml</value>
				<value>infoweb/pojo/Board.hbm.xml</value>
				<value>infoweb/pojo/Image.hbm.xml</value>
				<value>infoweb/pojo/Info.hbm.xml</value>
			</list>
		</property>		
		
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
			</props>
		</property>	

		<property name="dataSource"><ref bean="myDataSource"/></property>
	</bean>



	<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA); -->
	<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
		<property name="sessionFactory"><ref local="mySessionFactory"/></property>
	</bean>
	

	<!-- ***** Board  SERVICE ***** -->
	<bean id="boardService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">	
		<property name="transactionManager"><ref local="myTransactionManager"/></property>
		<property name="target"><ref local="boardServiceSpring"/></property>
		<property name="transactionAttributes">
			<props>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly,-BoardException</prop>
				<prop key="set*">PROPAGATION_REQUIRED,-BoardException</prop>
				<prop key="modify*">PROPAGATION_REQUIRED,-BoardException</prop>
				<prop key="remove*">PROPAGATION_REQUIRED,-BoardException</prop>
			</props>
		</property>
	</bean>

	<!-- board primary business object implementation -->
	<bean id="boardServiceSpring" class="infoweb.service.BoardServiceSpringImpl">
		<property name="boardTreeDAO"><ref local="boardTreeDAO"/></property>
	</bean>
	

	<!-- DAO board: Hibernate implementation -->
	<bean id="boardTreeDAO" class="infoweb.dao.BoardTreeDAOImpl">
		<property name="sessionFactory"><ref local="mySessionFactory"/></property>
	</bean>

	<!-- DAO info: Hibernate implementation -->
	<bean id="infoDAO" class="infoweb.dao.InfoDAOImpl">
		<property name="sessionFactory"><ref local="mySessionFactory"/></property>
	</bean>
</beans>



3.做DAO代码,
package infoweb.dao;

import java.util.List;
import java.util.Iterator;

import infoweb.pojo.Board;


import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;

import org.springframework.orm.hibernate.HibernateCallback;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;


/**
 * <p>Title: 版块分类DAOImpl</p>
 * <p>Description: 用树型结构实现</p>
 * <p>Copyright: Copyright (c); 2004</p>
 * <p>Company: </p>
 * @author 段洪杰
 * @version 1.0
 */


public class BoardTreeDAOImpl extends HibernateDaoSupport implements
    IBoardTreeDAO {


  /**
   * 构造函数
   */
  public BoardTreeDAOImpl(); {
    super();;
  }


  /**
   * 通过ID取得版块
   * @param id String
   * @return Board
   */

  public Board getBoardById(String id); {
    Board board = (Board); getHibernateTemplate();.load(Board.class, id);;
    return board;
  }


  /**
   * 取根叶
   * @return Iterator
   */
  public Iterator getRoots(); throws HibernateException {
    String queryString =
        "select board from Board as board where board.parentId='root' order by board.id desc";
    List roots = getHibernateTemplate();.find(queryString);;
    return roots.iterator();;
  }


  /**
   * 存根叶
   * @param board Board
   */
  public void setRoot(Board board); {
    board.setParentId("root");;
    getHibernateTemplate();.save(board);;
  }


  /**
   * 取子叶
   * @param  parentid String
   * @return List
   */
  public Iterator getChildren(String parentid); {
    /*
         String queryString =
     "select board as Board where board.parent_id='parentid' order by board.id desc";
         List children = getHibernateTemplate();.find(queryString);;
         return children;
     */
    Board parent = (Board); getHibernateTemplate();.load(Board.class, parentid);;
    return parent.getChildren();.iterator();;
  }


  /**
   * 取子叶数
   * @param parentid String
   * @return int
   */

  public int getChildrenCount(String parentid); {
    /*
         String queryString =
     "select count(*); Board where board.parent_id='parentid' order by board.id desc";
         List children = getHibernateTemplate();.find(queryString);;
         int count = ((Integer); children.iterator();.next(););.intValue();;
         return count;
     */
    Board parent = (Board); getHibernateTemplate();.load(Board.class, parentid);;
    int count = parent.getChildren();.size();;
    return count;
  }


  /**
   * 存子叶
   * @param parentLeaf Leaf
   */
  public void setChild(Board board, String parentid); {
    board.setParentId(parentid);;
    getHibernateTemplate();.save(board);;
  }


  /**
   *
   * 删除该叶和它的子叶
   * @param board Board
   */
  public void deleteBranch(Board board); {
      getHibernateTemplate();.delete(board);;
  }


  /**
   * 根据子叶得到父叶
   * @param child Board
   * @return Board
   */
  public Board getParentByChild(Board child); {
    String parentId = child.getParentId();;
    Board parent = (Board); getHibernateTemplate();.load(Board.class, parentId);;
    return parent;
  }


  /**
   * 通过子ID得到父叶
   * @param id String
   * @return Board
   */
  public Board getParentByChildId(String id); {
    Board child = (Board); getHibernateTemplate();.load(Board.class, id);;
    Board parent = (Board); getHibernateTemplate();.load(Board.class,child.getParentId(););;
    return parent;
  }
}



4.做service层代码

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;
import net.sf.hibernate.HibernateException;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c); 2004</p>
 * <p>Company: </p>
 * @author 段洪杰
 * @version 1.0
 */
public class BoardServiceSpringImpl implements IBoardService {

    private IBoardTreeDAO boardTreeDAO;

    public BoardServiceSpringImpl(); {
        super();;
    }

    /**
     * 取所有roots版块
     * @return Iterator
     */
    public Iterator getRoots(); throws BoardException {
        Iterator roots = null;
        try {
            roots = boardTreeDAO.getRoots();;
        } catch (Exception ex); {
            throw new BoardException("取ROOT版块时出错! " + ex.toString(););;
        }
        return roots;
    }

    /**
     * 增加Root新版块
     * @param board Board
     */
    public void setRoot(Board board); throws BoardException {
        try {
            boardTreeDAO.setRoot(board);;
        } catch (Exception ex); {
            throw new BoardException("增加ROOT版块时出错! " + ex.toString(););;
        }
    }

    /**
     * 删除版块 (包含下级版块);
     * @param board Board
     */
    public void removeBoard(Board board); throws BoardException {
        try {
            boardTreeDAO.deleteBranch(board);;
        } catch (Exception ex); {
            throw new BoardException("删除版块时出错! " + ex.toString(););;
        }
    }

    /**
     *
     * @return IBoardTreeDAO
     */
    public IBoardTreeDAO getBoardTreeDAO(); {
        return boardTreeDAO;
    }

    /**
     *
     * @param boardTreeDAO IBoardTreeDAO
     */
    public void setBoardTreeDAO(IBoardTreeDAO boardTreeDAO); {
        this.boardTreeDAO = boardTreeDAO;
    }

}



5.做ACTION的父类

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;

import infoweb.service.IBoardService;


/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c); 2004</p>
 * <p>Company: </p>
 * @author 段洪杰
 * @version 1.0
 */

public class BaseAction extends Action {

  private IBoardService boardService;

  public void setServlet(ActionServlet actionServlet); {
    super.setServlet(actionServlet);;
    ServletContext servletContext = actionServlet.getServletContext();;
    WebApplicationContext wac =
        WebApplicationContextUtils.getRequiredWebApplicationContext(
        servletContext);;
    this.boardService = (IBoardService); wac.getBean("boardService");;
  }

  protected IBoardService getBoardService(); {
    return boardService;
  }

}



6.做action类
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;
import java.util.Date;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c); 2004</p>
 * <p>Company: </p>
 * @author 段洪杰
 * @version 1.0
 */


public class SetBoardAction extends BaseAction {

    private static Logger log = Logger.getLogger(SetBoardAction.class);;

    public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest httpServletRequest,
                                 HttpServletResponse httpServletResponse); throws
            Exception {

        // SessionBean sessionBean = (SessionBean); httpServletRequest.getSession();.getAttribute("sessionBean");;
        BoardForm boardForm = (BoardForm); actionForm;
        //String backURL = httpServletRequest.getHeader("Referer");;
        /*
        if (sessionBean==null||!sessionBean.getIsLogon();); {
            httpServletRequest.setAttribute("message", "系统超时,或者没有登录 .返回重新登录!");;
            httpServletRequest.setAttribute("locationFile",
                                            "location='index.jsp';");;
            return actionMapping.findForward("message");;
        }
        */
        Board board = new Board();;
        boardForm.setCreateDate(new Date(););;
        PropertyUtils.copyProperties(board, boardForm);;
        getBoardService();.setRoot(board);;

        httpServletRequest.setAttribute("message", "版块信息录入完成!");;
        httpServletRequest.setAttribute("locationFile",
                                        "<A HREF=\"javascript:history.back();\">返回</A>");;
        return (actionMapping.findForward("success"););;
    }

}

评论 共 3 条 请登录后发表评论
3 楼 hibernate6697 2010-10-31 16:46
引用
[url][/url][url][/url][img][/img]
引用
[/i]
引用
[b][/b][/u]
引用
[i]
[u][u][/u]
引用
2 楼 dudujava 2009-02-24 11:50
...一点都不完整。。郁闷。。要弄就都弄出来啊。。。

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics