1ã€MyEclipse下å¾ç«‹æ–°çš„Web Porject
2ã€Copy Struts2çš„libæ–‡äšg到工½E‹çš„WEB-INF/lib下éž*-plugin-2.0.6.jarçš„æ‰€æœ‰çš„åŒ…åŠ ä¸Šstruts2-spring- plugin-2.0.6.jaråQŒæœ€ž®çš„包å¯ä»¥åœ¨struts-2.0.6\apps\struts2-blank-2.0.6\WEB-INF\ lib下找刎ͼŒä¸è¿‡å› äØ“ä½¿ç”¨Springã€Hiberate那点包是ä¸å¤Ÿç”¨çš„
3.1ã€å·¥½E‹å上å³é”?>MyEclipse->Add Spring Capabilitiesç‚¹å‡»å‡ºçŽ°å¯¹è¯æ¡?
3.2ã€ç”±äºŽæˆ‘用的MyEclipseä¸Springçš„æ’件是1.2的,所以没使用MyEclipse下的包,ä¸é€‰æ‹©MyEclipse Libraries
3.3ã€é€‰ä¸Copy checked library contents to project folder (TLDs always copied)
3.4ã€ä‹É用默认的Library Folder:/WebRoot/WEB-INF/libåQŒNext
3.5ã€Folder点周Brower选丙å¹ç›®çš„WebRoot/WEB-INF/
3.6ã€ç‚¹å‡»Finish
4ã€é…¾|®MyEclipseæ•°æ®åº“设¾|?
4.1ã€èœå•Windows->Preferences->MyEclipse->Database Explorer->Drivers
4.2ã€ç‚¹å‡»New讄¡½®æ•°æ®åº“连接,例:
Driver template : Oracle (Thin driver)
Driver name : Oracle (Thin driver)
Connection URL : jdbc:oracle:thin:@<server>[:<1521>]:<database_name>
Driver JARs: ojdbc14.jar
Dirver classname : oracle.jdbc.driver.OracleDriver
4.3ã€ç‚¹å‡»OKã€OK
5ã€å¿˜äº†Copy Spring 2çš„jar包到工程ä¸äº†åQŒä¸˜q‡æ²¡å…³ç³»åQŒçŽ°åœ¨Copyä¹Ÿä¸€æ øP¼ŒCopy spring-framework-2.0.3\dist\spring.jar åˆ?WebRoot/WEB-INF/lib下就å¯ä»¥äº†ï¼Œå¦‚果想Copy专用的包å¯ä»¥Copy spring-framework-2.0.3\dist\modules下的
5.1ã€èœå•Windows->Open perspective->MyEclipse Database Explorer
5.2ã€åœ¨DB Brower点å³é”?>New
5.3ã€é…¾|®ä¾‹å如下:
Profile name: test
Driver: Oracle (Thin driver)
URL: jdbc:oracle:thin:@127.0.0.1:1521:test
User name: test
Password: test
选ä¸Save password
5.4ã€ç‚¹å‡»Finish
6.1ã€é…¾|®Hibernate
6.2 工程å上å³é”®->MyEclipse->Add Hiberate Capabilitiesç‚¹å‡»å‡ºçŽ°å¯¹è¯æ¡?
6.3ã€é€‰ä¸Copy checked Library Jars to project forlder and add to build-path 点击Next
6.4ã€é€‰ä¸Spring configuration file (applicationContext.xml)点击Next
6.5ã€é€‰ä¸Existing Spring configuration fileåQŒMyEclipseä¼šå¸®ä½ è‡ªåŠ¨æ‰¾åˆ°Spring Configæ–‡äšgçš?
6.6ã€SessionFactory ID填写sessionFactory点击Next
6.7ã€Bean Id填写dataSourceåQŒé€‰ä¸DB Profile下刚æ‰å¾å¥½çš„teståQŒç‚¹å‡»Next
6.8ã€ä¸é€‰æ‹©Create SessionFactory class?点击Finish
7ã€è¿™æ—¶å€™ä¼šæç¤ºä½ æŸäº›ç±»æ²¡å‘玎ͼŒCopy commons-dbcp-1.2.1.jar到lib下就OKäº?
8 é…ç½®struts.propertiesæ–‡äšgåQŒæŒ‡å®šspringä½œäØ“strutsçš„IoC容器
struts.objectFactory = spring
(1)默认的autowiringæ¨¡å¼æ˜¯ï¼šby name
å›_¦‚æžœapplicationContext.xmlæ–‡äšgä¸çš„bean id与struts.xmlæ–‡äšgä¸çš„action name相åŒåQŒå°±
(2)å¦‚æžœè¦æ”¹ä¸ºå…¶ä»–模å¼ï¼š
struts.objectFactory.spring.autoWire = name|type|auto|constructor
ä¾?
struts.i18n.encoding=ISO-8859-1
struts.locale=de_DE
struts.objectFactory=spring
### Load custom default resource bundles
struts.custom.i18n.resources=testmessages
### XSLT Cache
struts.xslt.nocache = true
9é…ç½®web.xmlæ–‡äšgåQŒå¯åЍSpring侦å¬å™?br />
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
10 在WEB-INF目录下的applicationContext.xmlæ–‡äšg
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
<beans default-autowire="autodetect">
<bean id="personManager" class="com.acme.PersonManager"/>
</beans >
11 讄¡½®ç”±Springæ¥åˆå§‹åŒ–action
11.1 在Springçš„applicationContext.xmlæ–‡äšgä¸é…¾|®beanåQˆå³action¾c»ï¼‰
11.2 ž®†struts.xmlä¸çš„actionçš„class属性,由classåæ”¹ä¸ºSpringä¸å®šä¹‰çš„beanå?br />
例如åQ?br />
(1)applicationContext.xmlä¸ï¼Œå®šä¹‰bean id是bar
<beans default-autowire="autodetect">
<bean id="bar" class="com.my.BarClass" singleton="false"/>
...
</beans>
(2)struts.xmlä¸ï¼Œactionçš„class="bar"åQŒè€Œä¸æ˜¯é€šå¸¸çš„ç±»å?br />
<package name="secure" namespace="/secure" extends="default">
<action name="bar" class="bar">
<result>bar.ftl</result>
</action>
</package >
å¯åЍ˜q行åQ?br />
报错
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
2008-8-6 9:29:16 org.apache.catalina.core.ApplicationContext log
ä¿¡æ¯: Initializing Spring root WebApplicationContext
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext listenerStart
严é‡: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
... 40 more
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext start
严é‡: Error listenerStart
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext start
严é‡: Context [/ssh] startup failed due to previous errors
åŽŸå› åQ?br />
找ä¸åˆ?Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
ž®±Apache所æä¾›çš„åŸºæœ¬å¯¹è±¡æ± ã€?br />
解决åQ?br />
到这é‡?a >http://commons.apache.org/downloads/download_pool.cgi下è²åŒ…,然åŽ,把里é¢çš„commons-pool-x.jarå¤åˆ¶åˆ°é¡¹ç›®çš„libæ–‡äšg夹下
错误:
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
解决:
在WEB-INF/class 目录下å¾ç«‹ä¸€ä¸ªlog4j.propertiesæ–‡äšg,内容如下:
log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
è¦å‘Š:
ä¿¡æ¯: Starting Servlet Engine: Apache Tomcat/6.0.13
log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
log4j:WARN Please initialize the log4j system properly.
2008-8-6 9:40:09 org.apache.catalina.core.ApplicationContext log
ä¿¡æ¯: Initializing WebApplicationContext for Struts ActionServlet 'action', module ''
2008-08-06 09:40:29,859 DEBUG (CollectionFactory.java:195) - Creating [java.util.concurrent.ConcurrentHashMap]
2008-8-6 9:40:29 org.apache.catalina.core.ApplicationContext log
ä¿¡æ¯: Initializing Spring root WebApplicationContext
2008-08-06 09:40:29,906 INFO (ContextLoader.java:189) - Root WebApplicationContext: initialization started
2008-08-06 09:40:30,203 INFO (AbstractApplicationContext.java:412) - Refreshing org.springframework.web.context.support.XmlWebApplicationContext@1df59bd: display name [Root WebApplicationContext]; startup date [Wed Aug 06 09:40:30 CST 2008]; root of context hierarchy
2008-08-06 09:40:30,406 DEBUG (CollectionFactory.java:195) - Creating [java.util.concurrent.ConcurrentHashMap]
index.jsp
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>ç™Õd½•</title>
<style type="text/css">
.label {
font-style: italic;
}
.errorLabel {
font-style: italic;
color: red;
}
.errorMessage {
font-weight: bold;
color: red;
}
</style>
</head>
<s:head theme="ajax" />
<body>
<s:debug>
<s:form action="First">
<s:textfield name="username" label="用户å? />
<s:textfield name="password" label="密ç " />
<s:submit value="ç™Õd½•" />
<s:a href="First.action">ç™Õd½•</s:a>
</s:form>
</s:debug>
</body>
</html>
BUG:
2008-8-6 10:58:02 org.apache.catalina.core.StandardWrapperValve invoke
严é‡: Servlet.service() for servlet jsp threw exception
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:52)
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:49)
at org.apache.jsp.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:126)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
解决:web.xmlæ·ÕdŠ
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>