栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用maven搭建struts2项目时发生There is no Action mapped for action name XX错误

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用maven搭建struts2项目时发生There is no Action mapped for action name XX错误

这两天在学struts2应付考试时遇到了一个令我怀疑人生的bug。那就是访问action的方法时提示There is no Action mapped for action name XX的错误信息。我检查了struts.xml的文件名、存放的位置(我是使用maven搭建所以位置在resources下,若不用maven应该放在src下),继承的package为struts-default。完全找不到是因为自己的配置出的错,莫名其妙。
首先我说一下我最开始对于错误的分析。因为是使用maven搭建的开发环境,于是本着什么东西都是高版本的爽歪歪的思想,jdk要配置1.8的,什么jar包都去中央仓库找最新版本的坐标,我严重怀疑是因为我使用了struts2.5.22的最新版本导致我报的错,查阅资料后发现不是这个问题。

但是我发现当我把

namespace="test"

的属性去掉后,我的网页竟然成功跳转了!

于是我认真的去看了有关struts2命名空间namespace和访问路径的关系,以下是我对于namespace的理解。

比如我的struts.xml配置文件中一个action配置如下:


    
        /welcome.jsp
    

那么我直接可以通过 http://localhost:8080/struts2/login.action进行访问,这个的访问过程是这样的,在没有定义namespace的时候,由于在struts中,我们的package继承了struts-default,也就拥有了struts的根空间,在这里我们没有指明namespace属性,但其实此时我们的namespace属性相当于namespace="",或者namespace="/"。由于我们没有指定命名空间,struts直接在根空间中寻找name=testMap的action,根空间有这个action,所以我们能访问。
假设配置文件中action配置中加入了namespace属性值,如下:


    
        /welcome.jsp
    

那么我们必须通过http://localhost:8080/struts2/test/login.action这个路径进行访问,如果再用http://localhost:8080/struts2/login.action或其他路径,就会出现异常。因为此时struts首先在命名空间为test中寻找,如果没有找到,会继续在根空间寻找,而现在根空间已经没有名为login的action了。

在理解了以上知识后,我发现原来是因为我将namespace的值写错了,namespace="test" 的test的前面应该加上/,也就是/test,这个问题非常的小,但是却牵扯出了我在学习中非常多的问题,因为篇幅的问题我就不细细分享了,总之,我愿称之为一条斜杠引发的血案。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号