文章来源:http://hi.baidu.com/liuzhe041/blog/item/e12251dcf2ffe053ccbf1ad2.html
spring 和struts整合 有3种方式,推荐用第三种。
下面一一介绍,不管使用哪种方式,都需要在web.xml 中配置 spring的 监听器
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
第一种:使用 Spring 的 ActionSupport 类整合 Struts
a.在struts-config.xml中
- <action path="/login" name="loginForm" scope="request"
- type="com.demo.struts.actions.LoginAction"
- input="/login.jsp">
- <forward name="success" path="/welcome.jsp" />
- <forward name="failure" path="/login.jsp" />
- </action>
-
-
b.在applicationContext.xml中
- <bean id="userDAO" class="com.demo.hibernate.dao.UserDAO">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
-
- <bean name="/login" class="com.demo.struts.actions.LoginAction">
- <property name="userDAO">
- <ref local="userDAO" />
- </property>
- </bean>
-
c.在action中 使用下面的方式得到bean
- UserDAO userDAO=(UserDAO)getWebApplicationContext().getBean("userDAO");
第二种:使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor
a.在struts-config.xml中
- <action path="/login" name="loginForm" scope="request"
- input="/login.jsp">
- <forward name="success" path="/welcome.jsp" />
- <forward name="failure" path="/login.jsp" />
- </action>
-
-
- <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
b.在applicationContext.xml中
- <bean id="userDAO" class="com.demo.hibernate.dao.UserDAO">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
-
- <bean name="/login" class="com.demo.struts.actions.LoginAction">
- <property name="userDAO">
- <ref local="userDAO" />
- </property>
- </bean>
c.在action中 使用下面的注入属性的方式得到bean ,直接使用 userDAO.xxx 调用userDAO中的方法
- protected UserDAO userDAO;
-
- Logger log = Logger.getLogger(this.getClass());
-
- public UserDAO getUserDAO() {
- return userDAO;
- }
-
- public void setUserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
第三种:将 Struts Action 管理委托给 Spring 框架
a.在struts-config.xml中
- <action path="/login" name="loginForm" scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy"
- input="/login.jsp">
- <forward name="success" path="/welcome.jsp" />
- <forward name="failure" path="/login.jsp" />
- </action>
b.在applicationContext.xml中
- <bean id="userDAO" class="com.demo.hibernate.dao.UserDAO">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
-
- <bean name="/login" class="com.demo.struts.actions.LoginAction">
- <property name="userDAO">
- <ref local="userDAO" />
- </property>
- </bean>
c.在action中 使用下面的注入属性的方式得到bean ,直接使用 userDAO.xxx 调用userDAO中的方法
- protected UserDAO userDAO;
-
- Logger log = Logger.getLogger(this.getClass());
-
- public UserDAO getUserDAO() {
- return userDAO;
- }
-
- public void setUserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
Gavin