关于Struts2的namespace的一些总结2
? ?对于初学者来说struts2的namespace的配置是个疑惑点,配置不好就容易出现找不到action或者相关的页面,今天做个几个简单测试来说明一下namespace的相关知识点:
?
最初始配置:
?
?
<package name="struts2" extends="struts-default"><action name="FirstActoin" method="execute"><result name="success">index.jsp</result></action></package>
?
?这个采用的是struts2的默认命名空间,相当于namespace="";访问action是在浏览器中输入http://localhost:8080:/项目名/FirstAction,就可以访问到index.jsp页面,注意了 ?这里index.jsp前面没有加上“/”,说明采用的相对路径,这个相对路径是相对于当前浏览器输入的url的,例如浏览器输入的url是http://localhost:8080:/项目名/hello/FirstAction
那个Struts2就会在http://localhost:8080:/项目名/hello/index.jsp这个地址找index.jsp。所以建议显示页面采用绝对路径,这个绝对路径是当前项目的url,再来看一个配置:
?
?
<package name="struts2-01" namespace="/" extends="struts-default"><action name="FirstActoin" method="execute"><result name="success">/index.jsp</result></action></package>
这个的命名空间是“/” 其实这个命名空间我一直很疑惑,当你在浏览器中输入http://localhost:8080:/项目名/FirstAction这个url是其实采用就是这个命名空间“/” 那为什么在上一个配置中会正确访问呢,这是由于当strut2找不到“/”这个命名空间时会去默认命名空间中找相关的acton,如果找到响应,如果没有找到的话会出现这个错误信息说是找个不action。
验证我的说法可以采取以下配置
<package name="struts2-01" extends="struts-default">
<action name="FirstActoin" method="execute"><result name="success">/index.jsp</result></action></package>
??
但在浏览器中输入http://localhost:8080/项目名/second.action ,会出现下面的提示There is no Action mapped for namespace / and action name second ,可见采用的就是"/"这个命名空间。这个是由于浏览器会在项目名后自动补上“/”,所以会有以上的结果。
?
再讲一个很重要的知识点,如果采取以下配置
?
?
<package name="struts2-01" extends="struts-default"><action name="FirstActoin" method="execute"><result name="success">/index.jsp</result></action></package>
?浏览器中输入http://localhost:8080/项目名/hello/struts2/FirstAction.action这个url,也会正确相应,这是由于当struts2在当前url的命名空间中找不到FirstAction.action时,会自动在http://localhost:8080/项目名/hello这个url下找,如果找不到话,会在默认命名空间中查找,如果找到的话相应,如果没有报错,相信如果上一个配置明白的话也能知道会报什么错了吧。
以上都是本人一些学习中的一些总结,如果有错误认识的话,欢迎改正,互相学习。
?
?
?
?
?
?