学习struts2——常见问题与处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习struts2.2.1遭遇滑铁卢~~~~~好多异常~~~~~好多bug~~~~好多问题~~~~~~好多困难~~~好多肥羊~~~
一、
Filter mapping specifies an unknown filter name ----filter标签在web.xml 里的顺序
<filter-mapping>
<filter-name>adminOperateLogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>adminOperateLogFilter</filter-name>
<filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class>
</filter>
这样写启动服务器时报错 Filter mapping specifies an unknown filter name
adminOperateLogFilter
将这两块换个顺序就没问题了,web.xml信息的加载是有顺序的,filter在mapping之前必须要让服务
器找到其定义。
<filter>
<filter-name>adminOperateLogFilter</filter-name>
<filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminOperateLogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二、
ng.IllegalArgumentException: Filter mapping specifies an unknown filter name
Struts2
答:“Struts2”?大写的?are you sure?我猜你一定是看了某struts2.0的权威指南(那是一个
chm文件电子书,而且你看的可能是翻译成中文的),我不知道英文版的有没有写错,但是我检查了
很久后才发现中文版存在这个大小写错误。
让我们看看我们复制的内容:
<!-- 定义Struts 2的FilterDispatcher的Filter -->
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-
class>org.apache.Struts2.dispatcher.FilterDispatcher
</ filter-class>
</filter>
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的
Web请求 -->
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
显然,上下两个filter-name不一致!改正它!
三、
ng.ClassNotFoundException:
org.apache.Struts2.dispatcher.FilterDispatcher异常错误
?
答:“Struts2”?大写?OK,很明显,我们又复制了错误内容了,包名怎么会是大写呢?改正它!
四、顺便附上一些有用的内容:
Deployment Error Messages
FAIL - Application already exists at path /myNewApp If this message appears, the
/myNewApp application has already been deployed. This may have happened because of
Tomcat's autoDeployfeature, or because you have already deployed the application
yourself.
The application will be listed in Applications list.
FAIL - Invalid context path myNewApp was specified This can happen if you forget the
leading slash on the application name (myNewApp instead of /myNewApp), or if the folder
does not exist.
Check the folder, especially capitilisation of any letters.
FAIL - Failed to deploy application at context path /myNewApp This typically indicates
an error in your web.xmlfile. Check the Tomcat logs to see more information about the
error.
参考网址:
/wiki/TroubleshootingApplicationDeploymentOnT omcat
五、
ng.RuntimeException:
ng.reflect.InvocationTargetException异常?!!
注意到这句话:Caused by: ng.IllegalArgumentException: Javassist library is
missing in classpath! Please add missed dependency!
答:经过findjar查询需要加入javassist.jar包,一般这个包在struts2.2.1包下的apps\struts2-
blank-2.2.1的web-inf下的lib中。
提示:war文件可以用rar解压!
2010-9-24 23:59:30
monsLogger error
严重: Dispatcher initialization failed
ng.RuntimeException:
ng.reflect.InvocationTargetException
at
com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject
(ContainerImpl.java:295)
at
com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.cons truct
(ContainerImpl.java:431)
at com.opensymphony.xwork2.inject.ContainerBuilder$5.create
省略若干行……
(ContainerImpl.java:293)
... 41 more
Caused by: ng.ExceptionInInitializerError
at
com.opensymphony.xwork2.ognl.OgnlValueStackFactory.setContainer
(OgnlValueStackFactory.java:85)
... 46 more
Caused by: ng.IllegalArgumentException: Javassist library is missing in
classpath! Please add missed dependency!
at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:165)
... 47 more
Caused by: ng.ClassNotFoundException: javassist.ClassPool
at org.apache.catalina.loader.WebappClassLoader.loadClass
(WebappClassLoader.java:1360)
at org.apache.catalina.loader.WebappClassLoader.loadClass
(WebappClassLoader.java:1206)
at
ng.ClassLoader.loadClassInternal(ClassLoader.java:319)
at ng.Class.forName0(Native Method)
at ng.Class.forName(Class.java:169)
at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:162)
... 47 more
六、
2010-9-25 0:23:06 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting filter struts2
Class: com.opensymphony.xwork2.spring.SpringObjectFactory
File: SpringObjectFactory.java
Method: getClassInstance
Line: 220 -
com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
at
org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)
at org.apache.struts2.dispatcher.FilterDispatcher.init
省略若干行…………
(DelegatingMethodAccessorImpl.java:25)
at ng.reflect.Method.invoke(Method.java:597)
at
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: ng.NullPointerException
at
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance
(SpringObjectFactory.java:220)
at
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.ver ifyResultType
(XmlConfigurationProvider.java:530)
at
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.add ResultTypes
(XmlConfigurationProvider.java:501)
at
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.add Package
省略若干行…………
(Dispatcher.java:371)
at
org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:415)
... 28 more
#1楼得分:0回复于:2010-05-30 13:53:17空指针捏, LZ集成struts2和spring 的时候出问题了.?
有没有加struts2-spring-plugin的包?
答:经检查此方法不可行,因为这个项目只是使用struts2.2.1,并没有与spring 整合。
网上有人提到:
“解决方法:
1.lib中多导入包的大原因,去掉struts2-spring-plugin-
2.1.8包即可,因为在项目中没有用到
spring。
2.还有的项目中用到spring,在web.xml中却没配置监听器,所以在web.xml 里面加上
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
”
答:同上。
我无奈之下,想到应该看看,里面的例子是怎么做的,于是打开
F:\struts2-2.2.1-all\struts-
2.2.1\apps中的例子,查看它们的web.xml.
发现:
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
但是问题没有解决。
我又参照网上的说法:把struts2-spring-plugin包放了回去(之前听信他们说
什么不能加太多包,
于是只加了必要的包,如今又把这个包放了回去,但是个人认为这些异常不应该
是由“加太多包”引
起的,因为这样好像不合逻辑。
)
无奈中又留意到了下面的话:
严重: ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION
**********
Looks like the Spring listener was not configured for your web app! Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.
You might need to add the following to web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoader Listener</listener
-class>
</listener>
于是加了listener进去。
出现了新的提示:
java.io.FileNotFoundException: Could not open ServletContext resource (感觉像在做推理 = =!)
Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 错误如下:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML
document from resource [/WEB-INF/applicationContext.xml] of ServletContext; nested
exception is java.io.FileNotFoundException: Could not open resource [/WEB-
INF/applicationContext.xml] of ServletContext
java.io.FileNotFoundException: Could not open resource
[/WEB-INF/applicationContext.xml]
of ServletContext
加载spring的配置文件时在默认位置/WEB-INF/下找不到applicationContext.xml文件,看了下,
myeclipse自动生成的applicationContext.xml放在/WEB-INF/classes下,难怪找不到,终于发现问
题了,下面在web.xml中做如下配置即可解决:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value >
</context-param>
((例子中的配置好像跟实际遇到的问题不一致?))
exception is java.io.FileNotFoundException: Could not open ServletContext resource
建个新的applicationContext.xml?
尝试建一个!
放在web-inf下面。
<listener>
<listener-class>org.springframework.web.context.ContextLoader Listener</listener
-class>
</listener>
applicationContent.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context" xmlns:tx="/schema/tx"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-2.5.xsd /schema/context
/schema/context/spring-context-2.5.xsd /schema/tx
/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.service*" />
</beans>
Caused by: org.xml.sax.SAXParseException: Premature end of file applicationContext.xml
实在看不下去了,在网上搜了搜,发现解答已经扯远了。
正想放弃,换用myeclipse时,开始准备复制内容转移,忽然发现</beans>写成了</beans>>。
难道是因为这个?
果然重新运行后,发现“</beans>”标签,写多一个“>”都不可以!
(好像拿个砖头拍死自己-_-!)
问题还没完呢?
下面又来了新东西:
严重: Actual exception
Could not load class
org.apache.struts2.jsf.ProcessValidationsInterceptor. Perhaps it exists but certain dependencies are not available? - interceptor -
jar:file:/F:/netbeans%20workspace/netbeans%206.9/testStruts2/build/we b/WEB-
INF/lib/struts2-jsf-plugin-2.2.1.jar!/struts-plugin.xml:38:108
at com.opensymphony.xwork2.ObjectFactory.buildInterceptor
(ObjectFactory.java:213)
Caused by: ng.NoClassDefFoundError:
javax/faces/context/FacesContext
Caused by: ng.ClassNotFoundException:
javax.faces.context.FacesContext
在网上查到了一篇文章:
“““
当你的工程放了struts2.0.11/lib下的所有jars但没放log4j.jar会如何?
我们总是需要开始,总是需要尝试,总是不断地去发现,去改进!
我只是想让struts2跑起来,很低的要求,我大约用了4个晚上的时间,菜,好菜!好多波折啊
,好多辛酸!
这是一篇写给超级才鸟的文章,因此坚决不会发到论坛里去!
其实发到论坛里的动机很单纯,一个是容易被更多人看到,一个是升级为能投票的会员,行使
人间的正义权利!但此篇仅仅发表在blog里,如果某天有人遇到的这样的情况(可能性很小的),可
以翻阅此文!
首先,下载struts2,地址为:/,这里看到的是2.0.11GA,就用这
个版本!
随便在硬盘上找个地方建立ROOT /WEB-INF/,classes和lib目录,当然可以在ROOT下建立个
index.htm什么的文件,欢迎一下!好,开始动手了,把struts2.0.11/lib下面的jar包都拷贝到
ROOT/WEB-INF/lib目录里,都拷贝进去!这还不够,再找点spring的文件,把spring/的常用的那几
个jar也拷贝到lib目录去,包括:spring.jar,spring-aop.jar,
spring-beans.jar,spring-
context.jar,spring-core.jar,spring-mock.jar,spring-support.jar,spring-web.jar;然后
在ROOT/WEB-INF/ 下建立web.xml文件,内容如下:
xml 代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
xmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web
-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext-*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
然后到ROOT/WEB-INF/classes/下建立struts.xml文件,内容如下:
xml 代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="false" />
<!-- Add packages here -->
</struts>
ok,工作做完了,接下来把此目录部署到tomcat里成一个站点,补充一下:tomcat 用5.5.25,jdk用
5.0.
好了,你可以启动你的tomcat了,启动tomcat,看
tomcat/logs/catalina.2007-12-03.log,当然是你
运行时的日期,呵呵!
发现了什么,我想你一定会发现以下的错误:
Actual exception
Could not load class org.apache.struts2.jsf.FacesSetupInterceptor. Perhaps it exists but
certain dependencies are not available? - interceptor -
jar:file:/D:/website/MedicalChina/ROOT/WEB-INF/lib/struts2-jsf-plugin
-
2.0.11.jar!/struts-plugin.xml:36:97 ..............................................
Caused by: ng.NoClassDefFoundError:
javax/faces/lifecycle/Lifecycle(这句很重要,
重要个屁,这句一点用也没有)
,貌似缺少jar包,但不知道缺少哪一个,呵呵!
在下经过详细的考证,发现缺少的是log4j.jar,呵呵,你再把log4j.jar放到lib里,重起tomcat就
一切正常了!
很简单吧,是简单,但你能从包错信息“Caused by:
ng.NoClassDefFoundError:
javax/faces/lifecycle/Lifecycle”想到缺少的是log4j.jar这个包吗?我花了n个小时才明白了这
个事情!
所以,我把它记录下来,供以后查阅,更供大家参考!
赶兴趣的,可以去查源码,看为啥如此,呵呵!
”””
log4j为何这名字这么眼熟?忽然想起了前段时间使用hibernate3.5.5时也要弄这个包,而当时它的
final文件夹内缺了两个包:log4j-1.2.13.jar、slf4j-log4j12-1.5.2.jar,估计版本号影响不是很
大。
而这次我把上次的log4j包导入项目中,看看效果如何?提示:文章中说到了导入太多包会出现这个
问题,但是我只导入了必要的包。
又出新问题了:
org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Class: com.opensymphony.xwork2.spring.SpringObjectFactory
File: SpringObjectFactory.java
Method: getClassInstance
Caused by: ng.NullPointerException
at
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance
(SpringObjectFactory.java:209)
at
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.ver ifyResultType
又参见了一篇文章:
“““
at
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance
(SpringObjectFactory.java:2092010-07-19 18:27启动服务器时出现异常:
警告: Failed startup of context
com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@1242b11
{/,E:\workspace\uploadPhoto\war}
Class: com.opensymphony.xwork2.spring.SpringObjectFactory
File: SpringObjectFactory.java
Method: getClassInstance
Line: 209 -
com/opensymphony/xwork2/spring/SpringObjectFactory.java:209:-1 Caused by: ng.NullPointerException at
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance
(SpringObjectFactory.java:209)
原因两个:
1.lib中多导入包的大原因:去掉struts2-spring-plugin-
2.1.8包即可,因为没有用到spring。
2.还有的原因是用spring了,却没加监听器,在web.xml里面加上
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
”””
之前我是看了一些文章:加上了struts2-spring-plugin包的,而且还加上了<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
难道做错了???????
我把上面的删去了,但是还是有错。
2010-9-25 10:36:54 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.xml.XmlBeanDefinitionStoreException: Line 14 in XML
document from ServletContext resource [/WEB-INF/applicationContext.xml] is invalid;
nested exception is org.xml.sax.SAXParseException: Content is not allowed in trailing
section.
2010-9-25 10:44:15 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Class: com.opensymphony.xwork2.spring.SpringObjectFactory
File: SpringObjectFactory.java
Method: getClassInstance
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
Caused by: ng.NullPointerException
左思右想还是想不到为什么,换了一些关键词,搜到了:
“““
最佳答案 7481086_582 - 大副十二级
你可能把不要的包也导进去了或是哪个必需的包没导入,以下是必需包:
Spring包(9个):
commons-dbcp.jar、commons-pool.jar、spring.jar、spring-beans.jar、spring-context.jar、spring-core.jar、spring-dao.jar、
spring-hibernate3.jar、spring-web.jar。
struts2.0包(6个):commons-logging-api-1.1.jar、freemarker-2.3.8.jar ognl-2.6.11.jar、struts2-core-2.0.8.jar、
struts2-spring-plugin-2.0.11.2.jar、xwork-2.0.3.jar
hibernate包:myeclipse工具自动添加生成导入。
还有就是数据库驱动包。
”””
无奈之下,我把所有的包又导了进去,因为在所有的包中,里面含有了部分需要的spring的包。
还把
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
补了回去。
这次错误只剩下一个!!!!!!!!!!!!!
2010-9-25 12:36:24 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2010-9-25 12:36:31 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Class: org.apache.struts2.osgi.OsgiConfigurationProvider
File: OsgiConfigurationProvider.java
Method: init
Line: 70 - org/apache/struts2/osgi/OsgiConfigurationProvider.java:70:-1
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:428)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher
(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter .init
省略若干行…………
(DefaultConfiguration.java:214)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration
(ConfigurationManager.java:66)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration
(Dispatcher.java:371)
at
org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:415) ... 27 more
2010-9-25 12:36:31 org.apache.catalina.core.ApplicationContext log 信息: Closing Spring root WebApplicationContext
在网上找到了两种答复
“““
原因没有找到,不过解决方法找到了,删除struts2-osgi-plugin-2.1.8.jar
, struts2-osgi-admin-bundle-2.1.8.jar
”””
“““
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</fil ter-class>
<init-param>
<param-name>configProviders</param-name>
<param-value>org.apache.struts2.osgi.OsgiConfigurationProvide r</param-value>
</init-param>
</filter>
”””
我试了一下第二种:
Caused by: ng.ClassCastException:
org.apache.struts2.osgi.OsgiConfigurationProvider cannot be cast to
com.opensymphony.xwork2.config.ConfigurationProvider
动了一下脑筋~~~~~
改成了:
<filter>
<!-- 定义核心Filter的名字 --> <filter-name>struts2</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecute Filter</filter-
class>
<init-param>
<param-name>configProviders</param-name>
<param-
value>com.opensymphony.xwork2.config.ConfigurationProvider</param-val ue>
</init-param>
</filter>
异常更多了~~~~~~
~~~~(>_<)~~~~
改了回去~~~~~~
试一下第一种~~~~~~~~~
一样出错:
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of
element 'Context'.
找不到定义?还是声明?
我把
<context:annotation-config />
<context:component-scan base-package="com.service*" />
删了。
还是很多错误~~~~~~~~
崩溃了~~~~~~~~~~~~~~
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~
+_+!!
下个插件试试~~~~~~~
/PluginPortal/faces/PluginDetailPage.jsp?p luginid=23467
外面下着细雨~~~~~~中秋节刚过完后的秋雨~~~~~~~~~
哥下午没课~~~~~~~~其实哥很纠结~~~~~~~~~~~~~~~~~
哥大四了~~~~~~~~~~哥得找工作的~~~~~~~~~~~~~~~~~
哥分心了~~~~~~~~~~继续学习!继续继续!!!!!!
下完安装后,运行它里面自带的helloworld~~~~~~~
发现提示没有META-INF下的context.xml,于是从其他地方复制了一个过来,加以修改。
发现可以运行了~~~~
= =!你大爷的!!!!!它里面的tomcat日志也会报错!而且跟我之前报的那些错误差不多!!!
o(╯□╰)o
怎么可以这样捏?
它的程序可以正常运行嘢!
对比了一下我的程序后,我进行了一些改动:
1、删去apllicationContext.xml
2、把struts.xml从WEB-INF下的classes移出到源包下的缺省包中
3、把web.xml中的listener去掉
4、将我之前设定的Struts2.2.1库的包修改为:
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-fileupload-1.
2.1.jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-io-1.3.2.jar! /
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-logging-1.0.4 .jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/freemarker-2.3.16.jar !/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/ognl-3.0.jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/struts2-core-2.2.1.ja r!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/xwork-core-2.2.1.jar! /
(这里我必须提示一下:我所测试的内容是关于struts2.2.1的,不与hibernate、spring它们整合,
之前犯了很多错误,一方面是自己经验不足,另一方面是受到网上的人的解答的误导)
看来插件确实是个好东西~~~~~~~~~~~
(*^__^*)
在netbeans的输出栏,一个是run,一个是apache tomcat,还有一个是apache tomcat 日志。
看来以后可以不管“apache tomcat 日志”了。
页面还是显示404错误,找不到/testStruts2/Login.jsp(路径没出错哦!!!)。
仔细检查struts.xml后发现: <!-- Struts 2的Action必须放在指定的包空间下定义 -->
于是将原来的package标签的name的值改为actionPackage (自己定义的包名)即<package name="actionPackage" extends="struts-default">
留意一下:“““
插件中struts.xml是这样的:
<struts>
<include file="example.xml"/>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
</package>
</struts>
难道表示example.xml的定义?
而example.xml是这样的:
<struts>
<package name="example" namespace="/example" extends="struts-default">
<action name="HelloWorld" class="example.HelloWorld">
<result>/example/HelloWorld.jsp</result>
</action>
</package>
</struts>
”””
先不管那么多,清理并生成后运行,生成失败可能是因为有未结束的java.exe 占用了资源,打开任务
管理器消除即可。
貌似“清理并生成”是经常要做的事情,好像是在修改了xml之后需要???
出现了:Caused by: ng.IllegalArgumentException: Javassist library is missing in
classpath! Please add missed dependency!
二话不说,补回包。
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
成功了!!!!!!!!!!!!!!!
肉牛满面!!!!!!!!!!!!!!
大肥羊!!!!!!!!!!!!!!!
~~~~~~~~》_《~~~~~~~~~
呜呜呜~~~~~~~
总结一下:
零、在netbeans的输出栏,一个是run,一个是apache tomcat,还有一个是apache tomcat 日志。
以后不要被“apache tomcat 日志”里的exception迷惑到了。
一、使用netbeans6.9.1进行struts2.2.1开发时,可以下载插件。
也可以直接下载那个struts2-
2.2.1-all文件。
解压后必需包为:
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-fileupload-1.
2.1.jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-io-1.3.2.jar! /
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/commons-logging-1.0.4 .jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/freemarker-2.3.16.jar !/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/ognl-3.0.jar!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/struts2-core-2.2.1.ja
r!/
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/xwork-core-2.2.1.jar! /
jar:file:/F:/struts2-2.2.1-all/struts-2.2.1/lib/javassist-3.7.ga.jar! /
(javassist-3.7.ga.jar在哪找的?看前面!!!)
二、无需applicationContext.xml、web.xml中无需listener(即
org.springframework.web.context.ContextLoaderListener)
估计在使用spring时才会用到~~~~
三、不知道struts.xml是不是必需放到缺省包下面?
四、需要有/META-INF/context.xml、/WEB-INF/web.xml、/缺省包/struts.xml。
其中web.xml为:(注意filter-class的值,注意标签的顺序!!!)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 定义Struts 2的FilterDispatcher的Filter -->
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>struts2</filter-name> <!-- 定义核心Filter的实现类 -->
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecute Filter</filter-
class>
</filter>
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的
Web请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
context.xml为:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/testStruts2"/>
struts.xml为:(注意package的name!!!!!)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"/dtds/struts-2.0.dtd">
<!-- struts是Struts 2配置文件的根元素 -->
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="actionPackage" extends="struts-default">
<!-- 定义login的Action,该Action 的实现类为
actionPackage.LoginAction类 -->
<action name="Login"
class="actionPackage.LoginAction">
<!-- 定义处理结果和资源之间映射关系。
-->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
五、注意所有xml的标签不要写错!!!多一个<、>都不行!!!!标签内多一个空格都不行!!!
注意不要写错!!!!!!!!注意<>要与</>匹配!!!!!!!
六、教训:以后多用插件,另外那些chm电子书经常错漏百出,以后切不可尽信之!!!!!
弄了好久~~~~~~~
囧!!!!!!!
o(╯□╰)o~~~~~~~~~~
不要迷恋哥~~~哥只是一个杯具~~~~
(完)
后记:如果想使用<s:datetimepicker>标签,须导入struts2-dojo-plugin.jar
解决方法(三步走):
1、在jsp文件中加入<%@ taglib uri="/struts-dojo-tags" prefix="sx"%>和<sx:head/>
2、将<s:datetimepicker label="XXXX" name="XXXX"></s:datetimepicker>改为<sx:datetimepicker label="XXXX" name="XXXX"></sx:datetimepicker>
3、将struts2-dojo-plugin.jar拷贝到/web-inf/lib下。