您的位置:首页 > 编程语言 > Java开发

Struts+spring+hibernate的笔记.

2008-07-30 15:02 369 查看
(快刀浪子原创)下面是我学习Struts+spring+hibernate的笔记.

1.WEB.XML的配置:

首先在web.xml中加入:

[code:1]

<servlet>

<servlet-name>SpringContextServlet</servlet-name>

<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

[/code:1]

我的整个web.xml象这样:

[code:1]

<?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>

[/code:1]

2.spring配置

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

[code:1]

<?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>

[/code:1]

3.做DAO代码,

[code:1]

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;

}

}

[/code:1]

4.做service层代码

[code:1]

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;

}

}

[/code:1]

5.做ACTION的父类

[code:1]

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;

}

}

[/code:1]

6.做action类

[code:1]

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: