Struts+spring+hibernate学习笔记!

来源:互联网 发布:氦气变声瓶淘宝 编辑:程序博客网 时间:2024/05/16 07:36

(快刀浪子原创)下面是我学习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"));
    }

}

原创粉丝点击