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;
}