Struts2+Spring+iBatis整合用户管理实例之一:多个Action、service的配置


    自己用来练习的入门级的实例,高手可以直接忽略 哈哈。

    这几天没时间,没加权限控制,前台显示也有些Scriptlet没换成标签,等过些天有空再加吧。

    仨框架的分工就不赘述了,之前的博客里有两两整合的详细记录,主要说说程序。

    

    一:结构

    程序功能主要分为“登录登出”“用户管理”两部分:

    相应的Action和Service也按这两个内容分为相应的LoginActionUserManagerAction两部分。Dao只有一个,也就是action和service在Struts和Spring管理时按业务分为两条线,到iBatis管理时在DAO汇合。

    另外Struts通过Session管理登录、登出信息,文件结构体系如下:

    

    


    二:SSI的配置

    先说大体执行流程,再分析具体实现


1.struts配置

    struts配有俩action:Login和UserManager(当然是靠spring注入进来)

    登录和登出走LoginAction

    用户管理的增删改查走UserManager

<struts>

	<!-- 中文防止乱码 -->  
    <constant name="struts.i18n.encoding" value="GBK"/> 
    
	<package name="struts2-spring" namespace="/" extends="struts-default">
		<!-- 1.Login的Action-->  
		<action name="login" class="Login" method="login"><!-- Login 是Spring注入的LoginAction实例(LoginAction里包含一个LoginService) -->
			<result name="success">loginSuccess.jsp</result>
			<result name="error">loginFail.jsp</result>
		</action>
		<action name="logOut" class="Login" method="logOut"><!-- 同一个实例的不同方法 -->
			<result name="success">index.jsp</result>
		</action>
		<!-- 2.Manager的Action-->
		<action name="register" class="UserManager" method="register"><!-- UserManager是Spring注入的UserManagerAction实例 -->
			<result name="success">operSuccess.jsp</result>
			<result name="error">register.jsp</result>
		</action>
		<action name="queryall" class="UserManager" method="queryall">
			<result name="success">manage.jsp</result>
		</action>
		<action name="update" class="UserManager" method="update">
			<result name="success">operSuccess.jsp</result>
		</action>
		<action name="delete" class="UserManager" method="delete">
			<result name="success">operSuccess.jsp</result>
		</action>
	</package>
</struts>


2.spring配置

    spring配置大体分为四部分:

    1:配置数据源,从ibatis配置改到spring配置

    2:spring的ibatis配制,目的是要SqlMapClientTemplate

    3:Spring 注入过程(这里和struts配合)

    4:事务处理,aop实现的

	<!-- 1:配置数据源(从ibatis配置改到spring配置) -->    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">    
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />    
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />    
        <property name="username" value="scott" />    
        <property name="password" value="890307" />    
    </bean>   
    <!-- 2:spring的ibatis配制,目的是要SqlMapClientTemplate -->    
     <bean id="sqlMapClient"  class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">    
        <property name="configLocation" value="/WEB-INF/SqlMapConfig.xml"/>    
        <property name="dataSource" ref="dataSource" />    
    </bean> 



	<!-- 3.Spring 注入过程 -->
	<bean id="User_SSI" class="vo.User_SSI" />
	<!-- DAOImpl的注入 -->
	<bean name="UserDao" class="dao.UserDaoImpl" >
		<property name="sqlMapClient" ref="sqlMapClient"></property>    
  	</bean> 
	
	<!-- Login的注入 -->
	<bean name="LoginService" class="service.LoginService" >
		<property name="user" ref="User_SSI"></property>
		<property name="dao" ref="UserDao" />
	</bean>	
	<bean name="Login" class="action.LoginAction"><!-- 产生一个叫Login的实例之前,调用set‘Service’方法,注入上一个实例‘LoginService’ -->
		<property name="service" ref="LoginService" />
	</bean>
	<!-- Manager的注入 -->
	<bean name="ManagerService" class="service.ManagerService" >
		<property name="user" ref="User_SSI"></property>
		<property name="dao" ref="UserDao" />
	</bean>
	<bean name="UserManager" class="action.UserManagerAction">
		<property name="service" ref="ManagerService" />
	</bean>



    <!-- 4.事务处理,需要配套的xmlns和schemaLocation -->  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
         <property name="dataSource" ref="dataSource"/>    
    </bean>   
    <tx:advice id="transactionManagerAdivice" transaction-manager="transactionManager">    
       <tx:attributes>    
          <tx:method name="query*" propagation="REQUIRED" read-only="true" rollback-for="java.lang.RuntionException" />    
          <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.RuntionException" />    
       </tx:attributes>    
    </tx:advice>    
    <aop:config>    
       <aop:pointcut id="allManagerMethod" expression="execution( * service.*.*(..))"/>  <!-- 执行的范围 -->  
       <aop:advisor advice-ref="transactionManagerAdivice" pointcut-ref="allManagerMethod"/>    
    </aop:config> 


3.iBatis配置

大部分配置都让spring接管了,

只有命名空间vo的具体配置两项内容了

<sqlMapConfig>   

  <!-- iBatis的命名空间,整合后仍然归此文件管 -->  
  <!-- 但是dataSource配置归spring管了 -->  
  <settings useStatementNamespaces="true"/>   
  
  <!-- 数据库配置都交给applicationContext-common.xml文件管理了  
  <transactionManager type="JDBC">  
    <dataSource type="SIMPLE">  
      <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>  
      <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>  
      <property name="JDBC.Username" value="scott"/>  
      <property name="JDBC.Password" value="890307"/>  
    </dataSource>
  -->  
  
  <!-- 各个表和类对应的配置,这个不变 -->  
  <!-- 具体的配置,也不变,还用ibatis原来的配置 -->     
	<sqlMap resource="User_SSI.xml" />
	
</sqlMapConfig>


4.webApp的web.xml

这里边要指定过滤器是struts2、增加一个spring的监听器 还要配置spring的配置文件位置等

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml,classpath*:applicationContext.xml</param-value>
  </context-param>





































评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值