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

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