Spring视频学习(十二)整合Struts1.3
2009-07-22 15:37
453 查看
1.使用myeclipse来对web添加struts1.3的支持
(2)配置struts配置文件:
原因是通过myeclipse添加的springaop的支持里面有asm-2.2.3.jar,与hibernate里面的asm.jar冲突,删掉asm-2.2.3.jar就可以了。但是若删掉asm.jar还是会报错的,因此只能删掉asm-2.2.3.jar就OK了。
(3)PersonListAction如下:
2.在web容器中实例化spring容器
web.xml如下:<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.5"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!--1.指定spring的配置文件,默认从web的根目录开始查找,可以通过spring提供的classpath前缀来配置从类路径开始查找--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!--2.对Spring容器进行实例化--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--以上2个步骤即实现了在web容器中实例化spring容器的配置,实例化后放到servletContext里面(Application级别)--> <!--下面是集成Struts的配置--> <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>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--以上是集成struts的配置,然后在web-inf下配置struts-config.xml--> </web-app>
3.配置struts-config.xml
(1)新建一个actionpackagecom.persia.struts; /* *GeneratedbyMyEclipseStruts *Templatepath:templates/java/JavaClass.vtl */ importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.struts.action.Action; importorg.apache.struts.action.ActionForm; importorg.apache.struts.action.ActionForward; importorg.apache.struts.action.ActionMapping; importorg.springframework.web.context.WebApplicationContext; importorg.springframework.web.context.support.WebApplicationContextUtils; importcom.persia.service.IPersonService; publicclassPersonListActionextendsAction{ publicActionForwardexecute(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ WebApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext( this.getServlet().getServletContext()); IPersonServiceps=(IPersonService)ctx.getBean("personService"); request.setAttribute("persons",ps.getPersons()); returnmapping.findForward("list"); } }
(2)配置struts配置文件:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans/>
<global-exceptions/>
<global-forwards/>
<action-mappings>
<actionpath="/person/list"type="com.persia.struts.PersonListAction"validate="false">
<forwardname="list"path="/WEB-INF/page/personlist.jsp"></forward>
</action>
</action-mappings>
<message-resourcesparameter="com.persia.struts.ApplicationResources"/>
</struts-config>
(3)编写personlist.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>PersonList</title>
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache">
<metahttp-equiv="expires"content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description"content="Thisismypage">
<!--
<linkrel="stylesheet"type="text/css"href="styles.css">
-->
</head>
<body>
<c:forEachitems="${persons}"var="person">
ID=${person.id},name=${person.name}<br/>
</c:forEach>
</body>
</html>
其中使用了jstl-1.2
4.测试集成
部署时,tomcat6启动出错:2009-07-2215:32:11,531ERROR[org.springframework.web.context.ContextLoader]-Contextinitializationfailed
org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'dataSource'definedinclasspathresource[applicationContext.xml]:Initializationofbeanfailed;nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'org.springframework.transaction.config.internalTransactionAdvisor':Cannotcreateinnerbean'(innerbean)'oftype[org.springframework.transaction.interceptor.TransactionInterceptor]whilesettingbeanproperty'transactionInterceptor';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'(innerbean)':Cannotresolvereferencetobean'txManager'whilesettingbeanproperty'transactionManager';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'txManager'definedinclasspathresource[applicationContext.xml]:Cannotresolvereferencetobean'sessionFactory'whilesettingbeanproperty'sessionFactory';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sessionFactory'definedinclasspathresource[applicationContext.xml]:Invocationofinitmethodfailed;nestedexceptionisjava.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:478)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
atjava.security.AccessController.doPrivileged(NativeMethod)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
atorg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
atorg.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
atorg.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
atorg.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
atorg.apache.catalina.core.StandardHost.start(StandardHost.java:719)
atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
atorg.apache.catalina.core.StandardService.start(StandardService.java:516)
atorg.apache.catalina.core.StandardServer.start(StandardServer.java:710)
atorg.apache.catalina.startup.Catalina.start(Catalina.java:566)
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)
atjava.lang.reflect.Method.invoke(UnknownSource)
atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Causedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'org.springframework.transaction.config.internalTransactionAdvisor':Cannotcreateinnerbean'(innerbean)'oftype[org.springframework.transaction.interceptor.TransactionInterceptor]whilesettingbeanproperty'transactionInterceptor';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'(innerbean)':Cannotresolvereferencetobean'txManager'whilesettingbeanproperty'transactionManager';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'txManager'definedinclasspathresource[applicationContext.xml]:Cannotresolvereferencetobean'sessionFactory'whilesettingbeanproperty'sessionFactory';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sessionFactory'definedinclasspathresource[applicationContext.xml]:Invocationofinitmethodfailed;nestedexceptionisjava.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
atorg.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:230)
atorg.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1244)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
atjava.security.AccessController.doPrivileged(NativeMethod)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
atorg.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:87)
atorg.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:98)
atorg.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:84)
atorg.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:66)
atorg.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:345)
atorg.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:309)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1342)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
...38more
原因是通过myeclipse添加的springaop的支持里面有asm-2.2.3.jar,与hibernate里面的asm.jar冲突,删掉asm-2.2.3.jar就可以了。但是若删掉asm.jar还是会报错的,因此只能删掉asm-2.2.3.jar就OK了。
5.改进--使用依赖注入action
需要四处配置:
(1)applicationContex.xml新加如下:<!--将Struts的action交给Spring容器来管理-->
<beanname="/person/list"class="com.persia.struts.PersonListAction">
<!--1.这里要求name和struts-config里面的action的path名称一致,因为id不允许有特殊字符-->
<!--2.还得在Struts-config文件里面添加Spring的请求处理器,该处理器会根据action的path属性到Spring容器里面寻找这个bean,若找到了则用这个bean来处理用户的请求-->
<!--3.然后去掉action的type标签和值(可选),当Spring处理器找不到该bean时,才会使用Struts的action-->
<!--4.最后在action里面使用Spring的注入方式来注入业务bean—>
(2)Struts-config.xml如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans/>
<global-exceptions/>
<global-forwards/>
<action-mappings>
<actionpath="/person/list"validate="false">
<forwardname="list"path="/WEB-INF/page/personlist.jsp"></forward>
</action>
</action-mappings>
<!--定义Spring的请求处理器,来根据action的path属性到Spring容器里面寻找这个bean,若找到了则用这个bean来处理用户的请求-->
<controller>
<set-propertyproperty="processorClass"value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
<!--配置完Spring的请求处理器后,去掉action的type属性和值,因为已经交给Spring容器来处理(可选)当Spring处理器找不到该bean时,才会使用Struts的action-->
<message-resourcesparameter="com.persia.struts.ApplicationResources"/>
</struts-config>
(3)PersonListAction如下:
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importorg.springframework.web.context.WebApplicationContext;
importorg.springframework.web.context.support.WebApplicationContextUtils;
importcom.persia.service.IPersonService;
publicclassPersonListActionextendsAction{
@ResourceIPersonServiceps;
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
// WebApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(
// this.getServlet().getServletContext());
// IPersonServiceps=(IPersonService)ctx.getBean("personService");
request.setAttribute("persons",ps.getPersons());
returnmapping.findForward("list");
}
}
相关文章推荐
- web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子
- web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-5]
- Spring 3.0整合Struts 1.3
- spring2.5整合struts1.3注意地方
- Spring4第五讲学习笔记,整合Spring,Struts,Mybatis框架
- SSH学习笔记之关于struts-spring-hibernate整合配置问
- SSH(Spring+Struts+Hibernate)框架学习之ajax技术和struts的整合
- struts与spring整合学习笔记
- Struts1.3 +hibernate3.2+Spring2.5整合
- SSH学习之——Spring、Struts和Hibernate整合开发
- Spring的基础学习(十二)——Spring与Junit的整合
- SSH学习之——Spring、Struts和Hibernate整合开发
- Struts 1.3、Hibernate 3、Spring 2.5、Jpa整合所需jar包
- struts1.3 整合 spring 2.5 MVC 框架
- MyBatis学习笔记(十二)spring与Mybatis整合事务
- Spring框架学习(5)spring整合struts2
- MyEclipse 7.0M1 SSH 整合开发问题解决:Spring2.5+hibernate3.1+Struts1.3 +Tomcat6.0