`
韶音韶乐
  • 浏览: 84841 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

关于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下找,如果找不到话,会在默认命名空间中查找,如果找到的话相应,如果没有报错,相信如果上一个配置明白的话也能知道会报什么错了吧。

以上都是本人一些学习中的一些总结,如果有错误认识的话,欢迎改正,互相学习。

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics