Struts应用在Linux下的tomcat运行,运行时出错

kinglovar 2006-02-28 01:54:51
为何我把Struts应用拷到apache/tomcat5.5/webapps/下,然后启动tomcat,/opt/apache/tomcat5.5/bin/startup.sh之后,我在IE中访问该Struts应用会出现以下异常?
谁能告诉我!是否还需要配什么?这个应用我在windows下运行是正常的!

org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.login_jsp._jspService(org.apache.jsp.login_jsp:88)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kinglovar 2006-02-28
  • 打赏
  • 举报
回复
引用 ncowboy(我们虽然很有实力,但是我们还是要谦虚,这就叫做涵养)
----------
TOMAT_HOME\conf\server.xml文件,找到在上面提到过的加入WEB应用的那一行:

<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
----------

可惜我的tomcat是5.5.15,在TOMCAT_HOME/conf/server.xml下是没有<Context>元素
以上方法我都试过,但还是解决不了问题,还有高人指教一下吗?
ncowboy 2006-02-28
  • 打赏
  • 举报
回复
再参考

http://groups.google.com/group/comp.lang.java.programmer/msg/ac832536664fbad8
ncowboy 2006-02-28
  • 打赏
  • 举报
回复
http://dev.csdn.net/article/46/46353.shtm

2.访问JSP页面:http://127.0.0.1:8080/mystruts/index.jsp ,出现如下的错误提示:

“org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”

解决办法:

*1*

对应\jakarta-struts-1.1\lib\中的*.jar文件(struts1.1共有10个*.jar文件),看看\StrutsWeb\WEB-INF\lib\中的*.jar文件是否完整。
如果在\StrutsWeb\WEB-INF\lib\中只有一个struts.jar,那么将其他的*.jar文件也copy到\StrutsWeb\WEB-INF\lib\中。
然后重新启动Apache Tomcat即可访问。
struts.jar是一个重要的文件,它包含了struts中的所有Java类。

*2*

如果经过上面的一步还没有搞定,那么请耐心的检查或修改\StrutsWeb\WEB-INF\中的struts-config.xml配置文件。
看看struts配置情况是否写错,action-mappings的配置是否写错。
一定要注意区分字母的大小写。
请再检查一遍。
然后请再检查一遍。
不要烦躁,一定要像对待初恋情人一样对待它,不然会死的很难堪!
一定要好好检查。
这个MVC中的C很要命的,流程控制全靠它了,一定要小心呵护的。[:D]
还有,记得修改完毕后重新启动Apache Tomcat。

*3*

我在网上看到有人对这个问题说“试了千百回,改了千百次,就是不知道什么原因”。
如果你也恰好和struts是初恋,也恰好试了千百回,改了千百次,
“Cannot find ActionMappings or ActionFormBeans collection”的错误仍然涛声依旧,
那么,请不要灰心,
相信我,胜利的喜悦你马上就能体会到!

因为,这里有一个毕杀绝技!!!!!

请按照如下操作:

打开TOMAT_HOME\conf\server.xml文件,找到在上面提到过的加入WEB应用的那一行:

<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>

然后对其修改成为:

<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>

这样就加上一个参数:privileged="true",这个参数是至关重要的。
(我花N多时间找了N多帖子问了N个人才搞定的,可见struts的初恋有多辛苦了!! [:(])

然后重新启动Apache Tomcat,这样访问JSP页面就没有问题了。[:D]

*4*

我在网上查找了一些struts应用的配置说明资料,一些配置资料上只提到把struts.jar这个文件copy到\WEB-INF\lib\中,
而并没有说需要把sturts的全部*.jar文件进行copy。
上面提到过,struts.jar包含了struts中的所有Java类。故我有此一试。
(当然,如果连struts.jar都没有了,那就没有搞头了。[:(] )

我只把struts.jar文件copy到\StrutsWeb\WEB-INF\lib\中,然后启动Apache Tomcat(当然,web.xml和struts-config.xml已经配置完毕)。
一试,果然不爽。

访问JSP页面时,看到提示错误:

“org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”

傻眼了。

又折腾了半天,发现上面提到的privileged="true"在这种情况下也可以发挥作用,
即修改server.xml文件,在<Context>的描述中加上参数privileged="true",使之变成这样:

<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>

这样就可以访问JSP页面并且运行无误,没有错误提示了。[^ō^]

所以可以得出这样一个东东:
如果在\StrutsWeb\WEB-INF\lib\中只有一个struts.jar而没有其他的*.jar文件,那么,在server.xml文件中把相对的WEB应用的描述进行修改,在其中加入privileged="true"参数,就可以使struts项目的应用正常运行且访问无误。
benq998 2006-02-28
  • 打赏
  • 举报
回复
apache/tomcat5.5/webapps/这个目录我一直也迷弄明白他到底是服务器更目录还是他的子目录是服务器根目录,所以我每次都是直接把服务器程序放弃奥其他文件夹下,给tomcat配置虚拟主机,然后就什么问题都没了。
kinglovar 2006-02-28
  • 打赏
  • 举报
回复
这个应用我在windows下运行是正常的,配置文件应该没错
infowain 2006-02-28
  • 打赏
  • 举报
回复
Cannot find ActionMappings or ActionFormBeans collection
你的配置文件里面ActionMappings or ActionFormBeans找不到,检查一下配置文件了
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。 8、运行异常与一般异常有何异同?  异常表示程序运行过程中可能出现的非正常状态,运行异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行异常,但是并不要求必须声明抛出未被捕获的运行异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 10、说出ArrayList,Vector, LinkedList的存储性能和特性  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Ses
logo 设计不会,就这样先凑合了写道 Fuseblog预备开发带在线SHOP功能的个人博客系统.仿照Appfuse 提供一个完全自动化的ant构建脚本.在线SHOP的数据库建模图例已经 在博客中贴出.感兴趣的和我一起搭建,嘻嘻 文档博客地址: http://forum.sinomagazine.com 开发环境: Jcreator-4.5 JDK-1.5 Ant-1.6.1 MYSQL-5 Tomcat-5.5 Spring-2.5.6 Ibatis-2.3.4 问题事项: 1.在windows系统中,命令行中执行ant命令时,当指定的 构建脚本文件中包含中文字符,而构建脚本文件的编码是UTF-8时将会 Invalid byte 1 of 1-byte UTF-8 sequence. 的错误.这个问题尚未 知解决,故先采用GBK的编码. 2.在Jcreator中创建的项目,不支持UTF-8编码,缺省GBK. 以下先列出初步的的ant构建文件的代码: build.xml 应用 ... 通过 activityCreator.py --out myproject your.package.name.ActivityName 命令可以生成一个project ,生成project下面有个bulid.xml 文件,那个东西就可以帮你打包生成了。 来看下ant是怎么做的。 应用程序框架,无一例外的要求花费大量的时间与精力后才可投入生产。对于大多数开发人员来说想要的东西很简单:友好,易于学习并且还具有生产力。因此我们开发了JSPX。 JSPX的主要目标就是打造成为一个“友好的开发者”框架。因为JSPX只基于标准的HTML标签和简单的Java POJO: 1. JSP ... by kyo100900 2009-01-07 回复 (42) NetBeans Struts2 插件更新 NetBeans Struts 2 插件(http://nbstruts2support.dev.java.net)很长时间没有更新了,我对原插件进行了少量修改,并在 NetBeans 6.7 上测试通过,其中修改包括:1.包含了最新的 Struts 2.1.6 库文件。2.更新至最新的 web framework API。3.重新设计了配置面板,支持更加灵活的最初配置。4.少量针对的 ... by gml520 2009-08-27 回复 (4) 新版本的PrettyTools发布,支持 ... PrettyFaces: EL API访问PrettyContext 支持JSF 1.1 增强了错误页面和servlet重定向 PrettyFaces是一个JSF1.2和JSF2.0的扩展,用来创建便于书签收藏、漂亮的网址。 PrettyFaces优雅的解决了这个问题,包括诸如功能:网页装载行动,无缝的跟faces的导航整合,动态视图的ID分配和管理参数分析,无需配置,兼容其他JSF框架。P ... by zly06 2009-09-09 回复 (0) 相关博客 ant模板 < ? xml version = "1.0" ?> < project name= "tax-calculator" default= "package" > < property name= "src.dir" location= "src" / > ... by article2008 2008-07-30 回复 (0) 代码备份build.xml

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧