kingpub

          海內(nèi)存知己,博客若比鄰

           

          實(shí)戰(zhàn)Struts+Spring+Hibernate

          實(shí)戰(zhàn)Struts+Spring+Hibernate

          經(jīng)過(guò)幾天在網(wǎng)上的搜索,查看了關(guān)于Struts、Spring、Hibernate的文章,在實(shí)際的使用后得到了一些體會(huì)。鑒于很多資料不全或較舊,特寫下一篇較為完整的實(shí)戰(zhàn)指南,包括主要程序類和配置文件。

          一、準(zhǔn)備篇
          ?實(shí)戰(zhàn)前需準(zhǔn)備以下開(kāi)發(fā)組件(都是目前最新版本)。
          ?1、Struts 1.2.9,從www.apache.org網(wǎng)站可下載。
          ?2、spring-framework-1.2.8,從www.springframework.org網(wǎng)站可下載。
          ?3、Hibernate 3.1.3,從www.hibernate.org網(wǎng)站可下載。
          ?4、Tomcat 5.0.28,從www.apache.org網(wǎng)站可下載。
          ?
          二、程序篇
          ?java包我們建立如下結(jié)構(gòu)
          ?hibernate存放hibernate相關(guān)類
          ?impl存放service實(shí)現(xiàn)類
          ?interfaces存放接口類
          ?player存放struts相關(guān)類
          ?
          1、Hiberate相關(guān)類(HBM、PO)可以使用工具直接生成,這里不再列出

          2、IPlayerDAO.java 持久層的接口類

          public interface IPlayerDAO
          {
          ?public abstract List findTop(final int count);
          ?public abstract TblPlayer findById(String id);
          }


          3、TblPlayerDAO.java 持久層的接口的實(shí)現(xiàn)類,HibernateDaoSupport提供了對(duì)Hibernate良好的支持,下例的兩個(gè)方法顯示了HibernateTemplate的兩種最常用的方法。

          public class TblPlayerDAO extends HibernateDaoSupport implements IPlayerDAO
          {
          ?public List findTop(final int count)
          ?{
          ??return (List) getHibernateTemplate().execute(new HibernateCallback()
          ??{
          ???public Object doInHibernate(Session session) throws HibernateException
          ???{
          ????Query q = session.createQuery("select player from TblPlayer player order by player.Id");
          ????q.setFirstResult(0);
          ????q.setMaxResults(count);
          ????return q.list();
          ???}
          ??});
          ?}

          ?public TblPlayer findById(String id)
          ?{
          ??return (TblPlayer) getHibernateTemplate().get(TblPlayer.class, id);
          ?}
          }

          4、IPlayerService 業(yè)務(wù)層接口類

          public interface IPlayerService
          {
          ?public abstract void setPlayerDAO(IPlayerDAO playerDAO);
          ?public abstract List findTop(final int count);
          ?public abstract TblPlayer findById(String id);
          }

          5、PlayerServiceImpl 業(yè)務(wù)層接口實(shí)現(xiàn)類
          public class PlayerServiceImpl implements IPlayerService
          {
          ?IPlayerDAO playerDAO = null;
          ?
          ?public void setPlayerDAO(IPlayerDAO playerDAO)
          ?{
          ??this.playerDAO = playerDAO;
          ?}
          ?

          ?public List findTop(final int count)
          ?{
          ??return playerDAO.findTop(count);
          ?}
          ?
          ?public TblPlayer findById(String id)
          ?{
          ??TblPlayer player = playerDAO.findById(id);
          ??return player;
          ?}
          }

          6、PlayerAction.java
          public class PlayerAction extends Action
          {
          ?private IPlayerService playerService;
          ?
          ?public void setPlayerService(IPlayerService playerService)
          ?{??
          ??this.playerService = playerService;
          ?}
          ?
          ??? public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response)
          ??? {
          ??? ?PlayerForm form = (PlayerForm)actionForm;
          ??? ?try
          ??? ?{??? ??
          ??? ??TblPlayer player = playerService.findById(form.getPlayer().getId());
          ??? ??request.setAttribute("player",player);
          ??? ?}
          ??? ?catch(Exception e)
          ??? ?{
          ??? ??request.setAttribute("errorMsg","選手未找到");
          ??? ??log.error(e,e);
          ??? ?}
          ??? ?return mapping.findForward("ViewDetail");
          ??? }
          }

          7、PlayerForm
          public class PlayerForm extends ActionForm
          {
          ?static final long serialVersionUID = -9073943177741915925L;
          ?TblPlayer player = new TblPlayer();
          ?public TblPlayer getPlayer()
          ?{
          ??return player;
          ?}
          ?public void setPlayer(TblPlayer player)
          ?{
          ??this.player = player;
          ?}
          ?
          }

          三、配置篇
          1、web.xml
          <?xml version="1.0" encoding="ISO-8859-1"?>

          <!DOCTYPE web-app
          ? PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
          ? "

          <web-app>
          ? <display-name>Tour Web Application</display-name>
          ? <context-param>
          ? ?<param-name>contextConfigLocation</param-name>
          ? ?<param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>
          ? </context-param>?
          ?
          ? <filter>
          ??? ?<filter-name>CharacterEncoding</filter-name>
          ??? ?<filter-class>com.lutong.CharsetFilter</filter-class>
          ? </filter>
          ???
          ? <filter>
          ??? ?<filter-name>OpenSessionInViewFilter</filter-name>
          ??? ?<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
          ? </filter>
          ?
          ? <filter-mapping>
          ??? ?<filter-name>CharacterEncoding</filter-name>
          ??? ?<servlet-name>action</servlet-name>
          ? </filter-mapping>
          ?
          ? <filter-mapping>
          ??? ?<filter-name>OpenSessionInViewFilter</filter-name>
          ??? ?<url-pattern>/*</url-pattern>
          ? </filter-mapping>
          ?
          ? <servlet>
          ??? <servlet-name>WebLog</servlet-name>
          ??? <servlet-class>com.kehaoinfo.log.WebLog</servlet-class>
          ??? <init-param>
          ????? <param-name>log4j-init-file</param-name>
          ????? <param-value>/WEB-INF/classes/log4j.properties</param-value>
          ??? </init-param>
          ??? <load-on-startup>1</load-on-startup>
          ? </servlet>
          ?
          ? <servlet>
          ??? <servlet-name>SpringContextServlet</servlet-name>
          ??? <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
          ??? <load-on-startup>2</load-on-startup>
          ? </servlet>
          ?
          ? <!-- Standard Action Servlet Configuration (with debugging) -->
          ? <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>detail</param-name>
          ????? <param-value>2</param-value>
          ??? </init-param>
          ??? <load-on-startup>3</load-on-startup>
          ? </servlet>


          ? <!-- Standard Action Servlet Mapping -->
          ? <servlet-mapping>
          ??? <servlet-name>action</servlet-name>
          ??? <url-pattern>*.do</url-pattern>
          ? </servlet-mapping>


          ? <!-- The Usual Welcome File List -->
          ? <welcome-file-list>
          ??? <welcome-file>index.jsp</welcome-file>
          ? </welcome-file-list>


          ? <!-- Struts Tag Library Descriptors -->
          ? <taglib>
          ??? <taglib-uri>/tags/struts-bean</taglib-uri>
          ??? <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
          ? </taglib>

          ? <taglib>
          ??? <taglib-uri>/tags/struts-html</taglib-uri>
          ??? <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
          ? </taglib>

          ? <taglib>
          ??? <taglib-uri>/tags/struts-logic</taglib-uri>
          ??? <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
          ? </taglib>

          ? <taglib>
          ??? <taglib-uri>/tags/struts-nested</taglib-uri>
          ??? <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
          ? </taglib>

          ? <taglib>
          ??? <taglib-uri>/tags/struts-tiles</taglib-uri>
          ??? <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
          ? </taglib>

          ? <taglib>
          ??? <taglib-uri>/tags/spring</taglib-uri>
          ??? <taglib-location>/WEB-INF/spring.tld</taglib-location>
          ? </taglib>
          ?
          </web-app>

          2、applicationContext-hibernate.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

          <!--
          ? - Root application context for the Countries application.
          ? - Web-specific beans are defined in "countries-servlet.xml".
          ? -->
          <beans>?
          ?<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">?
          ??<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>
          ??<property name="url" value="jdbc:jtds:sqlserver://192.167.0.107:1433/tour;charset=gb2312"/>
          ??<property name="username" value="sa"/>
          ??<property name="password" value=""/>
          ?</bean>
          ?
          ?<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          ??<property name="mappingResources">
          ???<list>
          ????<value>com/lutong/tour/hibernate/hbm/TblPlayer.hbm</value>
          ???</list>
          ??</property>
          ??
          ??<property name="hibernateProperties">
          ???<props>
          ????<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</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>
          ?
          ?<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          ??<property name="sessionFactory"><ref local="mySessionFactory"/></property>
          ?</bean>
          ?
          ?<!-- ExceptionTranslator? -->
          ?<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
          ??<property name="dataSource"><ref bean="myDataSource"/></property>
          ?</bean>
          ?
          ?<!-- Hibernate Template? -->
          ?<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
          ??<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
          ??<property name="jdbcExceptionTranslator"><ref bean="jdbcExceptionTranslator"/></property>
          ?</bean>
          ?
          ?<!-- baseTransactionProxy -->
          ?<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ??<property name="transactionManager"><ref bean="myTransactionManager"/></property>
          ??<property name="proxyTargetClass"><value>true</value></property>?
          ??<property name="transactionAttributes">
          ???<props>
          ????<prop key="save*">PROPAGATION_REQUIRED</prop>
          ????<prop key="update*">PROPAGATION_REQUIRED</prop>
          ????<prop key="delete*">PROPAGATION_REQUIRED</prop>
          ????<prop key="submit*">PROPAGATION_REQUIRED</prop>
          ????<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
          ????<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          ????<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
          ???</props>
          ??</property>
          ?</bean>?
          ?
          ?<!-- DAO implements -->
          ?<bean id="playerDAO" class="com.lutong.tour.hibernate.dao.TblPlayerDAO">
          ??<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
          ?</bean>
          ?
          ?<!-- Service implements -->
          ?<bean id="playerService" class="com.lutong.tour.impl.PlayerServiceImpl">
          ??<property name="playerDAO"><ref bean="playerDAO"/></property>
          ?</bean>
          ?
          ?<!-- ProxyFaction -->?
          ?<bean id="playerManager" parent="baseTransactionProxy">
          ??<property name="target"><ref local="playerService"/></property>??
          ?</bean>
          </beans>

          3、applicationContext-struts.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

          <beans>??
          ?<bean name="/player" class="com.lutong.tour.player.PlayerAction" singleton="false">?
          ??<property name="playerService"><ref bean="playerManager"/></property>??
          ?</bean>
          </beans>

          4、struts-config.xml
          <?xml version="1.0" encoding="ISO-8859-1" ?>

          <!DOCTYPE struts-config PUBLIC
          ????????? "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          ????????? "

          <struts-config>


          <!-- ================================================ Form Bean Definitions -->

          ??? <form-beans>
          ??? ?<form-bean name="playerForm" type="com.lutong.tour.player.PlayerForm" />
          ??? </form-beans>


          <!-- ========================================= Global Exception Definitions -->

          ??? <global-exceptions>
          ??????? <!-- sample exception handler
          ??????? <exception
          ??????????? key="expired.password"
          ??????????? type="app.ExpiredPasswordException"
          ??????????? path="/changePassword.jsp"/>
          ??????? end sample -->
          ??? </global-exceptions>


          <!-- =========================================== Global Forward Definitions -->

          ??? <global-forwards>
          ??????? <!-- Default forward to "Welcome" action -->
          ??????? <!-- Demonstrates using index.jsp to forward -->
          ??????? <forward name="error" path="/message.jsp" />???
          ??? ?<forward name="message" path="/message.jsp" />
          ??? ?<forward name="PlatLogout" path="/web/logout.jsp" />
          ??? </global-forwards>


          <!-- =========================================== Action Mapping Definitions -->

          ??? <action-mappings>
          ?<action
          ???name="playerForm"
          ???path="/player"
          ???type="org.springframework.web.struts.DelegatingActionProxy"
          ??????????? scope="request"
          ???validate="true">
          ???<forward
          ????name="ViewDetail"
          ????path="/playerDetail.jsp"/>
          ?</action>
          ??? </action-mappings>

          ??? <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

          ??? <message-resources parameter="MessageResources" />


          ??? <plug-in className="org.apache.struts.tiles.TilesPlugin" >

          ????? <!-- Path to XML definition file -->
          ????? <set-property property="definitions-config"
          ?????????????????????? value="/WEB-INF/tiles-defs.xml" />
          ????? <!-- Set Module-awareness to true -->
          ????? <set-property property="moduleAware" value="true" />
          ??? </plug-in>


          ? <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
          ??? <set-property
          ??????? property="pathnames"
          ??????? value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
          ? </plug-in>?
          ?
          ? <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          ??? <set-property
          ??????? property="contextConfigLocation"
          ??????? value="/WEB-INF/applicationContext-struts.xml"/>
          ? </plug-in>
          ?
          </struts-config>

          ?

          posted on 2006-06-11 15:42 xiaofeng 閱讀(192) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 竹山县| 兴安县| 达拉特旗| 阳江市| 桂林市| 长丰县| 道孚县| 清水河县| 永州市| 呈贡县| 呼伦贝尔市| 奎屯市| 榆树市| 武义县| 安福县| 阳江市| 苍溪县| 西林县| 钦州市| 新宁县| 荥经县| 滕州市| 永安市| 化德县| 灵寿县| 西昌市| 宁乡县| 林口县| 广宗县| 岳普湖县| 青川县| 徐州市| 三台县| 安庆市| 稻城县| 任丘市| 敦化市| 梓潼县| 个旧市| 湘西| 靖州|