Struts+spring+hibernate学习笔记!

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

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

java代码: 


  <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象这样:
java代码: 


<?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层,和事务管理
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 -->

        <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&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代码,
java代码: 


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层代码

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;
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的父类

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;

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类
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;
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" ) );
    }

}

你可能感兴趣的:(Struts+spring+hibernate学习笔记!)