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