最近在做项目的时候遇到了一个头疼的问题,所有的struts2的配置都是正确的,这我可以保证,但是就是一直报错,说找不到action,弄了很久今晚终于找到原因了,现在来模拟一下我的测试:
struts2的配置文件如下所示:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="login" extends="struts-default"> <action name="login" class="login.TestAction"> <result name="success">/index.jsp</result> </action> </package> </struts>
很简单,就是在默认命名空间下配置了一个名为login的action,实现的是当url为
http://localhost:8080/login
的时候进行处理,这里没有带后缀名.action也是可以的:
这是登录页面中的一个链接:
<a href="login">登陆</a>
但是奇怪的是这样配置以后一直报错:
这个报错很奇怪,而且地址栏的URL变得也很奇怪:
看到没有后面无缘无故多了一个"/",这就奇怪了,对这个问题弄了很久最后终于找出一点线索了,我的WEB-ROOT下,建了一个名为login的文件夹:
结果我测试了一下如果删掉这个与action同名的文件夹后可以正常显示,加上以后又会报这样的错误。经过测试后我得出了结论:
就是WebRoot目录下不能有与action同名的文件夹!!!
各位看了我这个问题后,可以自己去测试一下,说实在为什么会有这样的错误,我还没找出原因,只知道结论就是这样,希望各位看了我这篇文章并且自己 测试以后如果发现我的结论不正确可以指正,前提是自己通过测试了,没有测试就没有发言权,为了节省各位的时间,我把我的测试代码放在下面了。