Struts2+Spring+iBatis整合用户管理实例之一:多个Action、service的配置
2013-01-16 14:09
549 查看
原帖地址:http://blog.csdn.net/ruantao1989/article/details/8143899
感谢原作者
自己用来练习的入门级的实例,高手可以直接忽略 哈哈。
这几天没时间,没加权限控制,前台显示也有些Scriptlet没换成标签,等过些天有空再加吧。
仨框架的分工就不赘述了,之前的博客里有两两整合的详细记录,主要说说程序。
相应的Action和Service也按这两个内容分为相应的LoginAction和UserManagerAction两部分。Dao只有一个,也就是action和service在Struts和Spring管理时按业务分为两条线,到iBatis管理时在DAO汇合。
另外Struts通过Session管理登录、登出信息,文件结构体系如下:
登录和登出走LoginAction,
用户管理的增删改查走UserManager
[html]
view plaincopyprint?
<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>
1:配置数据源,从ibatis配置改到spring配置
2:spring的ibatis配制,目的是要SqlMapClientTemplate
3:Spring 注入过程(这里和struts配合)
4:事务处理,aop实现的
[html]
view plaincopyprint?
<!-- 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>
只有命名空间和vo的具体配置两项内容了
[html]
view plaincopyprint?
<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>
[html]
view plaincopyprint?
<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>
[html]
view plaincopyprint?
<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>
感谢原作者
自己用来练习的入门级的实例,高手可以直接忽略 哈哈。
这几天没时间,没加权限控制,前台显示也有些Scriptlet没换成标签,等过些天有空再加吧。
仨框架的分工就不赘述了,之前的博客里有两两整合的详细记录,主要说说程序。
一:结构
程序功能主要分为“登录登出”和“用户管理”两部分:相应的Action和Service也按这两个内容分为相应的LoginAction和UserManagerAction两部分。Dao只有一个,也就是action和service在Struts和Spring管理时按业务分为两条线,到iBatis管理时在DAO汇合。
另外Struts通过Session管理登录、登出信息,文件结构体系如下:
二:SSI的配置
先说大体执行流程,再分析具体实现1.struts配置
struts配有俩action:Login和UserManager(当然是靠spring注入进来)登录和登出走LoginAction,
用户管理的增删改查走UserManager
[html]
view plaincopyprint?
<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>
<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实现的
[html]
view plaincopyprint?
<!-- 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>
<!-- 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的具体配置两项内容了
[html]
view plaincopyprint?
<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>
<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的配置文件位置等[html]
view plaincopyprint?
<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>
<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>
[html]
view plaincopyprint?
<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>
<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>
相关文章推荐
- Struts2+Spring+iBatis整合用户管理实例之一:多个Action、service的配置
- Struts2+Spring+iBatis整合用户管理实例之二:登录和登出
- Struts2+Spring+iBatis整合用户管理实例之二:登录和登出
- Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查
- Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查
- Struts2+Spring+Ibatis用户注册、登录、管理入门学习实例源码下载
- debian/ubuntu LAMP配置实例+VSFTPD虚拟用户管理网站
- 关于搭建restful web service + springMVC + ibatis/hibernate的整合和XML配置意思和ssh+springMVC框架搭建
- ubuntu LAMP配置实例+VSFTPD虚拟用户管理网站
- SSM整合SpringSecurity实现权限管理实例 javaconfig配置方式
- SSM整合SpringSecurity实现权限管理实例 javaconfig配置方式
- ubuntu LAMP配置实例+VSFTPD虚拟用户管理网站
- SSH整合开发实例:用户管理系统
- User profile synchronization service starting issues 用户配置文件同步服务启动问题
- mysq多实例安装和管理 [一] -- 多配置文件方式安装管理
- Cisco3550三层交换机配置与管理(实例)
- 由Spring管理的Struts2的Action的单实例问题
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)
- SSI整合以及缓存的配置(struts2.2.1.1 + spring3.0.1 + ibatis2.3.0.677)
- mongodb 3.2 用户权限管理配置