ssh框架學習

ssh框架學習指南:
create project
1. 新建一個項目:項目名稱
2. 導入struts2+Spring+hiberate3基本包:
Struts2:
struts2-core-2.0.11.jar
ognl-2.6.11.jar
struts2-spring-plugin-2.0.11.jar
xwork-2.0.4.jar
Spring:
Spring.jar
spring-mock.jar
Hiberate3:
hibernate3.jar
如需要在添加對應的包。
添加sitemesh框架添加
struts2-sitemesh-plugin-2.0.6.jar
3. 首先編寫web.xml文件
Web.xml 文件規則:
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
  /WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml
  </param-value>
 </context-param>


 <!-- 用於初始化Spring容器的Listener -->
 <listener>
  <listener-class>
  org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>

 <filter>
  <filter-name>struts-cleanup</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.ActionContextCleanUp
  </filter-class>
 </filter>

 <!-- 定義SiteMesh的核心過濾器 -->
 <filter>
  <filter-name>sitemesh</filter-name>
  <filter-class>
  com.opensymphony.module.sitemesh.filter.PageFilter
  </filter-class>
 </filter>

 <!-- 定義Struts2的核心過濾器 -->
 <filter>
  <filter-name>struts</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
 </filter>

 <!-- 定義過濾器鏈 -->
 <!-- 排在第一位的過濾器是:ActionContextCleanUp過濾器。 -->
 <filter-mapping>
  <filter-name>struts-cleanup</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- 排在第二位的過濾器是:SiteMesh核心過濾器。 -->
 <filter-mapping>
  <filter-name>sitemesh</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- 排在第三位的過濾器是:FilterDispatcher過濾器。 -->
 <filter-mapping>
  <filter-name>struts</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

4. applicationContext.xml文件功能:
首先定義數據源
<!-- 定義數據源Bean,使用C3P0數據源實現 -->
 <bean id="dataSource"
  class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <!-- 指定連接數據庫的驅動 -->
  <property name="driverClass" value="com.mysql.jdbc.Driver" />
  <!-- 指定連接數據庫的URL -->
  <property name="jdbcUrl" value="jdbc:mysql://localhost/auction" />
  <!-- 指定連接數據庫的用戶名 -->
  <property name="user" value="root" />
  <!-- 指定連接數據庫的密碼 -->
  <property name="password" value="admin" />
  <!-- 指定連接數據庫連接池的最大連接數 -->
  <property name="maxPoolSize" value="20" />
  <!-- 指定連接數據庫連接池的最小連接數 -->
  <property name="minPoolSize" value="1" />
  <!-- 指定連接數據庫連接池的初始化連接數 -->
  <property name="initialPoolSize" value="1" />
  <!-- 指定連接數據庫連接池的連接的最大空閒時間 -->
  <property name="maxIdleTime" value="20" />
 </bean>
定義hiberate的SessionFactory
 <!--定義了Hibernate的SessionFactory -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mappingResources">
  <list>
  <value>AuctionUser.hbm.xml</value>
  <value>Bid.hbm.xml</value>
  <value>Item.hbm.xml</value>
  <value>Kind.hbm.xml</value>
  <value>State.hbm.xml</value>
  </list>
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">
  org.hibernate.dialect.MySQLDialect
  </prop>
  <prop key="show_sql">true</prop>
  <prop key="hibernate.hbm2ddl.auto">update</prop>
  <prop key="hibernate.jdbc.batch_size">20</prop>
  </props>
  </property>
 </bean>

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

<bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <!-- 事務攔截器bean需要依賴注入一個事務管理器 -->
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
  <!-- 下面定義事務傳播屬性-->
  <props>
  <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
  <prop key="*">PROPAGATION_REQUIRED</prop>
  </props>
  </property>
 </bean>

提到代理,我們可以使用ProxyBeanFactory,並配置proxyInterfaces,target和interceptorNames實現,但如果需要代理的bean很多,無疑會對spring配置文件的編寫帶來繁重的工作
Spring爲我們提供了,根據beanName匹配後進行自動代理的解決方法
<!-- 定義BeanNameAutoProxyCreator-->
 <bean
 class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <!-- 指定對滿足哪些bean name的bean自動生成業務代理 -->
  <property name="beanNames">
  <!-- 下面是所有需要自動創建事務代理的bean-->
  <list>
  <value>mgr</value>
  </list>
  <!-- 此處可增加其他需要自動創建事務代理的bean-->
  </property>
  <!-- 下面定義BeanNameAutoProxyCreator所需的事務攔截器-->
  <property name="interceptorNames">
  <list>
  <!-- 此處可增加其他新的Interceptor -->
  <value>transactionInterceptor</value>
  </list>
  </property>
 </bean>
5. daoContext.xml
DAO層xml文件配置:
這只是Dao層hiberate和數據庫交互的一種方式:daoTemplate
<bean id="daoTemplate" abstract="true">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <bean id="stateDao" class="org.hufei.dao.impl.StateDaoHibernate"
  parent="daoTemplate" />

 <bean id="kindDao" class="org.hufei.dao.impl.KindDaoHibernate"
  parent="daoTemplate" />

 <bean id="auctionUserDao"
  class="org.hufei.dao.impl.AuctionUserDaoHibernate"
  parent="daoTemplate" />

 <bean id="bidDao" class="org.hufei.dao.impl.BidDaoHibernate"
  parent="daoTemplate" />

 <bean id="itemDao" class="org.hufei.dao.impl.ItemDaoHibernate"
  parent="daoTemplate" />
6. decorators.xml
文件sitemesh修飾頁面需要加入的頂層和底層
項目所有頁面都需要這樣修飾
<decorators defaultdir="/decorators">
 <!-- 在excludes元素下指定的頁面將不會由SiteMesh來裝飾 -->
 <excludes></excludes>

 <!-- 創建一個名爲main的裝飾器,該裝飾器頁面爲main.jsp,
  用於裝飾pattern指定的URL的所有頁面-->
 <decorator name="main" page="main.jsp">
  <pattern>/*</pattern>
 </decorator>
</decorators>
7. struts.xml
該文件還可以包含所有action配置的xml,只要在該文件中included即可
<include file=”/文件路徑和文件名”></included>
子文件命名規範:
文件名_struts.xml
<struts>
 <constant name="struts.custom.i18n.resources"
  value="messageResource" />
 <constant name="struts.i18n.encoding" value="GBK" />

 <package name="lee" extends="struts-default">

  <interceptors>
  <interceptor name="authority"
  class="org.hufei.action.interceptor.AuthorityInterceptor" />
  <interceptor-stack name="auctionStack">
  <interceptor-ref name="defaultStack" />
  <interceptor-ref name="authority" />
  </interceptor-stack>
  </interceptors>

  <default-interceptor-ref name="auctionStack" />

  <global-results>
  <!-- 下面定義的結果對所有的Action都有效 -->
  <result name="login">/jsp/login.jsp</result>
  <result name="exception">/jsp/error.jsp</result>
  </global-results>
  <global-exception-mappings>
  <!-- 指Action拋出AuctionException異常時,轉入名爲exception的結果。 -->
  <exception-mapping
  exception="org.hufei.exception.AuctionException" result="exception" />
  <!-- 指Action拋出Exception異常時,轉入名爲exception的結果。 -->
  <exception-mapping exception="java.lang.Exception"
  result="exception" />
  </global-exception-mappings>


  <action name="index">
  <result name="success">/jsp/main.jsp</result>
  </action>

  <action name="viewItemSu"
  class="org.hufei.action.ViewSuAction">
  <result name="success">/jsp/viewSuccess.jsp</result>
  </action>

  <action name="viewFailItem"
  class="org.hufei.action.ViewFailAction">
  <result name="success">/jsp/viewFail.jsp</result>
  </action>

  <action name="viewBid" class="org.hufei.action.ViewBidAction">
  <result name="success">/jsp/viewBid.jsp</result>
  </action>

  <action name="mgrItem" class="org.hufei.action.MgrItemAction">
  <result name="success">/jsp/mgrItem.jsp</result>
  </action>

  <action name="mgrKind" class="org.hufei.action.MgrKindAction">
  <result name="success">/jsp/mgrKind.jsp</result>
  </action>


  <action name="viewKind"
  class="org.hufei.action.ViewKindAction">
  <result name="success">/jsp/viewKind.jsp</result>
  </action>

  <action name="viewItem"
  class="org.hufei.action.ViewItemAction">
  <result name="input">viewKind.action</result>
  <result name="success">/jsp/viewItem.jsp</result>
  </action>

  <action name="mgrUser" class="org.hufei.action.MgrUserAction">
  <result name="success">/jsp/mgrUser.jsp</result>
  </action>

  <action name="viewDetail"
  class="org.hufei.action.ViewDetailAction">
  <result name="error">/jsp/error.jsp</result>
  <result name="success">/jsp/viewDetail.jsp</result>
  </action>

  <action name="processLogin"
  class="org.hufei.action.LoginAction">
  <result name="input">/jsp/login.jsp</result>
  <result name="success">/jsp/main.jsp</result>
  <result name="failure">/jsp/login.jsp</result>
  <interceptor-ref name="defaultStack" />
  </action>

  <action name="proAddItem"
  class="org.hufei.action.AddItemAction">
  <result name="input" type="chain">mgrItem</result>
  <result name="success" type="chain">mgrItem</result>
  </action>

  <action name="proAddKind"
  class="org.hufei.action.AddKindAction">
  <result name="input" type="chain">mgrKind</result>
  <result name="success" type="chain">mgrKind</result>
  </action>

  <action name="bid" class="org.hufei.action.AddBidAction">
  <result name="input" type="chain">viewDetail</result>
  <result name="success" type="chain">viewBid</result>
  </action>


  <action name="*User" class="org.hufei.action.UserAction"
  method="{1}">
  <result name="add">/jsp/login.jsp</result>
  <result name="input">/jsp/regist.jsp</result>
  <result name="delete" type="redirect-action">jsp/mgrUser.action</result>
  <result name="edit">/jsp/editUser.jsp</result>
  <result name="editsuccess" type="redirect-action">jsp/mgrUser.action</result>
  <result name="editfail">/editUser.jsp</result>
  </action>

 </package>

</struts>

  胡斐
Email: [email protected]
  2009-5-20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章