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
ssh框架學習
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.