﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-176142998-随笔分类-struts2</title><link>http://www.blogjava.net/176142998/category/33521.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 Aug 2008 09:10:01 GMT</lastBuildDate><pubDate>Thu, 07 Aug 2008 09:10:01 GMT</pubDate><ttl>60</ttl><item><title>MyEclipse下struts2、spring、hibernate整合</title><link>http://www.blogjava.net/176142998/archive/2008/08/06/220333.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Wed, 06 Aug 2008 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/176142998/archive/2008/08/06/220333.html</guid><wfw:comment>http://www.blogjava.net/176142998/comments/220333.html</wfw:comment><comments>http://www.blogjava.net/176142998/archive/2008/08/06/220333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/176142998/comments/commentRss/220333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/176142998/services/trackbacks/220333.html</trackback:ping><description><![CDATA[<p align="left"><font size="2">1、MyEclipse下建立新的Web Porject <br />
<br />
2、Copy Struts2的lib文件到工程的WEB-INF/lib下非*-plugin-2.0.6.jar的所有的包加上struts2-spring- plugin-2.0.6.jar，最小的包可以在struts-2.0.6\apps\struts2-blank-2.0.6\WEB-INF\ lib下找到，不过因为使用Spring、Hiberate那点包是不够用的 <br />
<br />
3.1、工程名上右键-&gt;MyEclipse-&gt;Add Spring Capabilities点击出现对话框 <br />
<br />
3.2、由于我用的MyEclipse中Spring的插件是1.2的，所以没使用MyEclipse下的包，不选择MyEclipse Libraries <br />
<br />
3.3、选中Copy checked library contents to project folder (TLDs always copied) <br />
<br />
3.4、使用默认的Library Folder:/WebRoot/WEB-INF/lib，Next <br />
<br />
3.5、Folder点周Brower选中项目的WebRoot/WEB-INF/ <br />
<br />
3.6、点击Finish <br />
<br />
4、配置MyEclipse数据库设置 <br />
<br />
4.1、菜单Windows-&gt;Preferences-&gt;MyEclipse-&gt;Database Explorer-&gt;Drivers <br />
<br />
4.2、点击New设置数据库连接，例： <br />
Driver template : Oracle (Thin driver) <br />
Driver name : Oracle (Thin driver) <br />
Connection URL : jdbc:oracle:thin:@&lt;server&gt;[:&lt;1521&gt;]:&lt;database_name&gt; <br />
Driver JARs: ojdbc14.jar <br />
Dirver classname : oracle.jdbc.driver.OracleDriver <br />
<br />
4.3、点击OK、OK <br />
<br />
5、忘了Copy Spring 2的jar包到工程中了，不过没关系，现在Copy也一样，Copy spring-framework-2.0.3\dist\spring.jar 到/WebRoot/WEB-INF/lib下就可以了，如果想Copy专用的包可以Copy spring-framework-2.0.3\dist\modules下的 <br />
<br />
5.1、菜单Windows-&gt;Open perspective-&gt;MyEclipse Database Explorer <br />
<br />
5.2、在DB Brower点右键-&gt;New <br />
<br />
5.3、配置例子如下： <br />
Profile name: test <br />
Driver: Oracle (Thin driver) <br />
URL: jdbc:oracle:thin:@127.0.0.1:1521:test <br />
User name: test <br />
Password: test <br />
选中Save password <br />
<br />
5.4、点击Finish <br />
<br />
6.1、配置Hibernate <br />
<br />
6.2 工程名上右键-&gt;MyEclipse-&gt;Add Hiberate Capabilities点击出现对话框 <br />
<br />
6.3、选中Copy checked Library Jars to project forlder and add to build-path 点击Next <br />
<br />
6.4、选中Spring configuration file (applicationContext.xml)点击Next <br />
<br />
6.5、选中Existing Spring configuration file，MyEclipse会帮你自动找到Spring Config文件的 <br />
<br />
6.6、SessionFactory ID填写sessionFactory点击Next <br />
<br />
6.7、Bean Id填写dataSource，选中DB Profile下刚才建好的test，点击Next <br />
<br />
6.8、不选择Create SessionFactory class?点击Finish <br />
<br />
7、这时候会提示你某些类没发现，Copy commons-dbcp-1.2.1.jar到lib下就OK了 <br />
</p>
<br />
8&nbsp;配置struts.properties文件，指定spring作为struts的IoC容器<br />
struts.objectFactory = spring<br />
(1)默认的autowiring模式是：by name<br />
即如果applicationContext.xml文件中的bean id与struts.xml文件中的action name相同，就<br />
(2)如果要改为其他模式：<br />
struts.objectFactory.spring.autoWire = name|type|auto|constructor<br />
<br />
例:<br />
<p>struts.i18n.encoding=ISO-8859-1<br />
struts.locale=de_DE<br />
struts.objectFactory=spring<br />
### Load custom default resource bundles<br />
struts.custom.i18n.resources=testmessages<br />
### XSLT Cache<br />
struts.xslt.nocache = true</p>
<br />
9配置web.xml文件，启动Spring侦听器<br />
&lt;listener&gt;<br />
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
&lt;/listener&gt;<br />
<br />
10&nbsp;在WEB-INF目录下的applicationContext.xml文件<br />
例：<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;<br />
&lt;beans default-autowire="autodetect"&gt;<br />
&lt;bean id="personManager" class="com.acme.PersonManager"/&gt;<br />
&lt;/beans &gt;<br />
<br />
11 设置由Spring来初始化action<br />
11.1&nbsp; 在Spring的applicationContext.xml文件中配置bean（即action类）<br />
11.2&nbsp; 将struts.xml中的action的class属性，由class名改为Spring中定义的bean名<br />
例如：<br />
(1)applicationContext.xml中，定义bean id是bar<br />
&lt;beans default-autowire="autodetect"&gt;<br />
&lt;bean id="bar" class="com.my.BarClass" singleton="false"/&gt;<br />
...<br />
&lt;/beans&gt;<br />
(2)struts.xml中，action的class="bar"，而不是通常的类名<br />
&lt;package name="secure" namespace="/secure" extends="default"&gt;<br />
&lt;action name="bar" class="bar"&gt;<br />
&lt;result&gt;bar.ftl&lt;/result&gt;<br />
&lt;/action&gt;<br />
&lt;/package &gt;<br />
<br />
启动运行：<br />
报错<br />
log4j:<span style="color: red">WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).<br />
</span>log4j:WARN Please initialize the log4j system properly.<br />
2008-8-6 9:29:16 org.apache.catalina.core.ApplicationContext log<br />
信息: Initializing Spring root WebApplicationContext<br />
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext listenerStart<br />
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener<br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; <span style="color: red">nested exception is java.lang.NoClassDefFoundError: </span><span style="color: red">org/apache/commons/pool/impl/GenericObjectPool</span><br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)<br />
&nbsp;at java.security.AccessController.doPrivileged(Native Method)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)<br />
&nbsp;at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)<br />
&nbsp;at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)<br />
&nbsp;at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)<br />
&nbsp;at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)<br />
&nbsp;at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)<br />
&nbsp;at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)<br />
&nbsp;at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)<br />
&nbsp;at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)<br />
&nbsp;at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)<br />
&nbsp;at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)<br />
&nbsp;at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)<br />
&nbsp;at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)<br />
&nbsp;at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)<br />
&nbsp;at org.apache.catalina.core.StandardService.start(StandardService.java:516)<br />
&nbsp;at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)<br />
&nbsp;at org.apache.catalina.startup.Catalina.start(Catalina.java:566)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)<br />
&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br />
&nbsp;at java.lang.reflect.Method.invoke(Unknown Source)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)<br />
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool<br />
&nbsp;at java.lang.Class.getDeclaredConstructors0(Native Method)<br />
&nbsp;at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)<br />
&nbsp;at java.lang.Class.getConstructor0(Unknown Source)<br />
&nbsp;at java.lang.Class.getDeclaredConstructor(Unknown Source)<br />
&nbsp;at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)<br />
&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)<br />
&nbsp;... 40 more<br />
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext start<br />
严重: Error listenerStart<br />
2008-8-6 9:29:18 org.apache.catalina.core.StandardContext start<br />
严重: Context [/ssh] startup failed due to previous errors<br />
<br />
<strong>原因：<br />
</strong>找不到 Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool<br />
就Apache所提供的基本对象池。<br />
<br />
<strong>解决：<br />
</strong>到这里<a href="http://commons.apache.org/downloads/download_pool.cgi">http://commons.apache.org/downloads/download_pool.cgi</a>下载包，然后,把里面的commons-pool-x.jar复制到项目的lib文件夹下<br />
<br />
<strong>错误:</strong><br />
log4j:<span style="color: red">WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).<br />
</span>log4j:WARN Please initialize the log4j system properly.<br />
<br />
<strong>解决:</strong><br />
在WEB-INF/class 目录下建立一个log4j.properties文件,内容如下: <br />
log4j.rootLogger=DEBUG,stdout <br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n <br />
<span style="color: red"><br />
警告:</span><br />
信息: Starting Servlet Engine: Apache Tomcat/6.0.13<br />
<span style="color: red">log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).</span><br />
log4j:WARN Please initialize the log4j system properly.<br />
2008-8-6 9:40:09 org.apache.catalina.core.ApplicationContext log<br />
信息: Initializing WebApplicationContext for Struts ActionServlet 'action', module ''<br />
2008-08-06 09:40:29,859 DEBUG (CollectionFactory.java:195) - Creating [java.util.concurrent.ConcurrentHashMap]<br />
&nbsp;2008-8-6 9:40:29 org.apache.catalina.core.ApplicationContext log<br />
信息: Initializing Spring root WebApplicationContext<br />
2008-08-06 09:40:29,906&nbsp; INFO (ContextLoader.java:189) - Root WebApplicationContext: initialization started<br />
&nbsp;2008-08-06 09:40:30,203&nbsp; 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<br />
&nbsp;2008-08-06 09:40:30,406 DEBUG (CollectionFactory.java:195) - Creating [java.util.concurrent.ConcurrentHashMap]<br />
<br />
<br />
index.jsp<br />
<br />
<p>&lt;%@ page language="java" pageEncoding="GBK"%&gt;<br />
&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;<br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&lt;title&gt;登录&lt;/title&gt;<br />
&nbsp;&nbsp;&lt;style type="text/css"&gt;<br />
.label {<br />
&nbsp;font-style: italic;<br />
}</p>
<p>.errorLabel {<br />
&nbsp;font-style: italic;<br />
&nbsp;color: red;<br />
}</p>
<p>.errorMessage {<br />
&nbsp;font-weight: bold;<br />
&nbsp;color: red;<br />
}<br />
&lt;/style&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;s:head theme="ajax" /&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp;&lt;s:debug&gt;<br />
&nbsp;&nbsp;&lt;s:form action="First"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;s:textfield name="username" label="用户名" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;s:textfield name="password" label="密码" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;s:submit value="登录" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;s:a href="First.action"&gt;登录&lt;/s:a&gt;<br />
&nbsp;&nbsp;&lt;/s:form&gt;<br />
&lt;/s:debug&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
</p>
<br />
<br />
<span style="color: red">BUG:</span><br />
2008-8-6 10:58:02 org.apache.catalina.core.StandardWrapperValve invoke<br />
严重: Servlet.service() for servlet jsp threw exception<br />
The Struts dispatcher cannot be found.&nbsp; 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]<br />
&nbsp;at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)<br />
&nbsp;at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:52)<br />
&nbsp;at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:49)<br />
&nbsp;at org.apache.jsp.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:126)<br />
&nbsp;at org.apache.jsp.index_jsp._jspService(index_jsp.java:94)<br />
&nbsp;at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)<br />
&nbsp;at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />
&nbsp;at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)<br />
&nbsp;at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)<br />
&nbsp;at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)<br />
&nbsp;at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />
&nbsp;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br />
&nbsp;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)<br />
&nbsp;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)<br />
&nbsp;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)<br />
&nbsp;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)<br />
&nbsp;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br />
&nbsp;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)<br />
&nbsp;at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)<br />
&nbsp;at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)<br />
&nbsp;at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)<br />
&nbsp;at java.lang.Thread.run(Unknown Source)<br />
<br />
解决:web.xml添加<br />
&lt;filter&gt;<br />
&nbsp;&nbsp;&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&lt;filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.FilterDispatcher<br />
&nbsp;&nbsp;&lt;/filter-class&gt;<br />
&nbsp;&lt;/filter&gt;<br />
&nbsp;&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;<br />
<br />
<br />
</font>
<img src ="http://www.blogjava.net/176142998/aggbug/220333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/176142998/" target="_blank">飞飞</a> 2008-08-06 09:07 <a href="http://www.blogjava.net/176142998/archive/2008/08/06/220333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>