`
8366
  • 浏览: 813233 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第27讲--Struts与Spring集成方案1(Struts集成Spring)

阅读更多

 

Spring2.5+Hibernate3.3+Struts1.3整合开发
 hibernate核心安装包下的:
hibernate3.jar
lib\required\*.jar
lib\optional\ehcache-1.2.3.jar
hibernate 注解安装包下的
lib\test\slf4j-log4j12.jar
Spring安装包下的
dist\spring.jar
dist\modules\spring-webmvc-struts.jar
lib\jakarta-commons\commons-logging.jar、commons-dbcp.jar、commons-pool.jar
lib\aspectj\aspectjweaver.jar、aspectjrt.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j\log4j-1.2.15.jar
Struts
下载struts-1.3.8-lib.zip,需要使用到解压目录下的所有jar,建议把jstl-1.0.2.jar和standard-1.0.2.jar更换为1.1版本。Spring中已经存在一个antlr-2.7.6.jar,所以把struts中的antlr-2.7.2.jar删除,避免jar冲突。
在上节课程的测试用例中,我们为了得到spring容器的业务bean,我们使用以下的代码来实例化spring容器
try {
			ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
			perService = (PerService)applicationContext.getBean("personService");
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
集成步骤:
 
1.而在开发一个MVC的应用的时候,实例化spring容器我们不在需要自己去实例化,而是让web容器来帮助我们实例化,需要在web.xml中配置一个 listener
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  	<context-param>
  	<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找
  	     配置文件有多个的时候可以使用 , 来分隔,ContextLoaderListener 实例化pring容器后,会把它放到Application
  	     范围内
  	 -->

	   <param-name>contextConfigLocation</param-name>
	   <param-value>classpath:beans.xml</param-value>
	</context-param>
	<!-- 对Spring容器进行实例化 -->
	<listener>
	      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>personlist.jsp</welcome-file>
  </welcome-file-list>
</web-app>
 
2.写Action
package cn.com.xinli.web.action;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import cn.com.xinli.service.PerService;

public class PersonAction extends Action
{
	@Resource PerService perService;
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception
	{
		
		//方式1
		WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());
		PerService perService=(PerService)ctx.getBean("personService");
		
		request.setAttribute("persons", perService.getPersons());
		/*方式2 使用依赖注入
		 * 
		
		*/
		return mapping.findForward("list");
		
	}	
	
}
 
3. struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<struts-config>
<action-mappings>   

  	  <action  path="/list"
                  
  	         type="cn.com.xinli.web.action.PersonAction"
  	         scope="request" 
  	         validate="false"
  	  >
		
	<forward name="list" path="/personlist.jsp"></forward>			
  	 </action>
  	 </action-mappings>
  
</struts-config>

 
这种集成的方式项目中几乎不使用,以为要在Struts 的Action中得到bean的方法 和spring 的类紧耦合了,而且得到bean的 方式在别的Action中也是一样的 ,重复代码,一般使用 Spring集成struts,在Action中使用依赖注入的方式得到业务bean,在下一讲。
附件中是Struts集成Spring的项目+hibernate,没有放lib目录,lib中的jar包同上一讲
  • SSH.rar (16.1 KB)
  • 下载次数: 31
分享到:
评论
1 楼 zhangyou1010 2009-10-11  
感谢博主 。
我写beans.xml中的
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

把class=""的类写成了org.springframework.orm.hibernate3.LocalSessionFactoryBean ,junit测试时,死活不报错,也没异常。

相关推荐

Global site tag (gtag.js) - Google Analytics