本文总结了Struts常见错误及原因分析
共记六点
具体如下
异常 javaxservletjspJspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)
可能原因action没有再strutsconfigxml 中定义或没有找到匹配的action例如在JSP文件中使用
处理如果出现上述异常请查看strutsconfigxml中的定义部分有时可能是打错了字符或者是某些不符合规则可以使用struts console工具来检查
异常 orgapachejasperJasperException: Cannot retrieve definition for form bean null
可能原因 这个异常是因为Struts根据strutsconfigxml中的mapping没有找到action期望的form bean大部分的情况可能是因为在formbean中设置的name属性和action中设置的name属性不匹配所致换句话说action和form都应该各自有一个name属性并且要精确匹配包括大小写这个错误当没有name属性和action关联时也会发生如果没有在action中指定name属性那么就没有name属性和action相关联当然当action制作某些控制时譬如根据参数值跳转到相应的jsp页面而不是处理表单数据这是就不用name属性这也是action的使用方法之一
异常 No action instance for path /xxxx could be created
可能原因
特别提示因为有很多中情况会导致这个错误的发生所以推荐大家调高你的web服务器的日志/调试级别这样可以从更多的信息中看到潜在的在试图创建action类时发生的错误这个action类你已经在strutsconfigxml中设置了关联(即添加了标签)
在strutsconfigxml中通过action标签的class属性指定的action类不能被找到有很多种原因例如
定位编译后的class文件失败 Failure to place compiled class file for the action in the classpath (在 web开发中class的的位置在r WEBINF/classes所以你的action class必须要在这个目录下例如你的action类位于WEBINF/classes/action/Loginclass那么在strutsconfigxml中设置action的属性 type时就是actionLogin)
拼写错误这个也时有发生并且不易找到特别注意第一个字母的大小写和包的名称
在strutsconfigxml中指定的action类没有继承自Stuts的Action类或者你自定义的Action类没有继承自Struts提供的Action类
你的action类必须继承自Struts提供的Action类
你的classpath的问题例如web server没有发现你的资源文件资源文件必须在WEBINF/classes/目录下
异常 javaxservletjspJspException: No getter method for property username of bean orgapaclBEAN
可能原因
没有位form bean中的某个变量定义getter 方法
这个错误主要发生在表单提交的FormBean中用struts标记时在FormBean中必须有一个getUsername()方法注意字母U
Exception javaxservletjspJspException: Cannot find ActionMappings or ActionFormBeans collection
可能原因
不是标识Struts actionServlet的标记就是映射do扩展名的标记或者两者都没有在webxml中声明
在strutsconfigxml中的打字或者拼写错误也可导致这个异常的发生例如缺少一个标记的关闭符号/>最好使用struts console工具检查一下
另外loadonstartup必须在webxml中声明这要么是一个空标记要么指定一个数值这个数值用来表servlet运行的优先级数值越大优先级越低
还有一个和使用loadonstartup有关的是使用Struts预编译JSP文件时也可能导致这个异常
Exception
javaxservletjspJspException: Cannot find bean orgapaclBEAN in any scope
Probable Causes
试图在Struts的form标记外使用form的子元素这常常发生在你在后面使用Struts的html标记
另外要注意可能你不经意使用的无主体的标记如这样web 服务器解析时就当作一个无主体的标记随后使用的所有标记都被认为是在这个标记之外的如又使用了
还有就是在使用taglib引入HTML标记库时你使用的prefix的值不是html