Struts2的namespace

1.先说一个action配置文件里的namespace,看下例

package name="user" namespace="/user" extends="struts-default">
         <action name="logon" class="cn.net.cipe.ots.user.actions.UserAction" method="logon">
            <result name="success">/JSP/main.jsp</result>
            <result name="input">/JSP/login.jsp</result>
            <result name="error">/JSP/login.jsp</result>
        </action>

</package>

 

那么如果在jsp里这样三种写法:

第一种

 <form action="logon.action" >

 .....

 </form>

 

第二种

 <form action="/user/logon.action" >

 .....

 </form>

 

第三种

 <s:form action="logon" namespace="/user" >

 .....

 </s:form>

 

注意:这两种写法:

action="HelloWorld" namespace="/tt" 等价于action="/tt/HelloWorld.action"

 

2.如果在struts.xml中设定某action的命名空间 namespace="/test",如:

<package name="mywork" extends="struts-default" namespace="/test">

将s:form标签中的指向某action的地址设为:

 (a)

<s:form action="test/login.action">

 则生成的相应页面代码为:

<form id="login" οnsubmit="return true;" action="test/login.action" method="post">

 当多次执行这一页面时(如每次登陆验证都不通过),则浏览器url地址中的namespace将会重复出现,如:

http://localhost:8080/webAppName/test/test/test/test/login.action

 

 

(b)

<s:form action="/test/login.action">

 生成的相应页面代码为:

<form id="login" οnsubmit="return true;" action="/webAppName/test/login.action" method="post">

 此时多次执行这一页面url地址中的namespace也不会重复出现,浏览器url地址为

http://localhost:8080/webAppName/test/login.action,   运行正常.

 

 实例:

 

struts.xml配置

<package name="default" namespace="/" extends="struts-default">
		<action name="struts2/namespace/test">
			<result name="success">/app/namespace/reput3.jsp</result>
		</action>
		
	</package>

	<package name="struts2" namespace="/struts2" extends="struts-default">
		<action name="namespace/test">
			<result name="success">/app/namespace/reput.jsp</result>
		</action>
	</package>
	
	<package name="spring" namespace="/spring" extends="struts-default">
		<action name="namespace/test">
			<result>/app/namespace/reput2.jsp</result>
		</action>
	</package>
	
	
	<package name="/struts2/namespace" namespace="/struts2/namespace" extends="struts-default">
		<action name="test">
			<result>/app/namespace/reput4.jsp</result>
		</action>
	</package>

 jsp代码1:

<s:form action="namespace/test" namespace="/struts2">
	<s:submit value="struts2"></s:submit>
</s:form>

 url为:

http://localhost:8090/ssh2/struts2/namespace/test.action

 

jsp代码2:

<s:form action="namespace/test.action" namespace="/spring" method="post">
	<s:submit value="spring"></s:submit>
</s:form>

 url为:

http://localhost:8090/ssh2/struts2/namespace/test.action

 

jsp代码3:

<s:form action="struts2/namespace/test">
      <s:submit value="struts2-1-1"></s:submit>
</s:form>

url为: namsespace 为空 ,最终url为http://localhost:8090/ssh2/struts2/namespace/test ,url路径加上默认 namespace: /

 

jsp代码4:

<s:form action="struts2/namespace/test.action">
	<s:submit value="struts2-1-2"></s:submit>
</s:form>

 最终url为http://localhost:8090/ssh2/struts2/namespace/test.action

 

jsp代码5:

<s:form action="struts2/namespace/test" namespace="/">
	<s:submit value="struts2-1-3"></s:submit>
</s:form>

 url为:http://localhost:8090/ssh2/struts2/namespace/test.action

 

jsp代码6:

<s:form action="namespace/test" namespace="/hibernate">
	<s:submit value="hib1"></s:submit>
</s:form>

 namespace = /hibernate不存在,url路径不加上 定义的/namcespace,url为http://localhost:8090/ssh2/namespace/test

 

总结:

1、如果jsp标明的namespace不存在,url不会加标明的namespace值;

2、若jsp标明的namespace存在,jsp定义的action加后缀.action,则url前缀则不会添加标明的namespace值;

 

3.Action名称的搜索顺序:

(a)获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

(b)首先寻找namespace/path1/path2/path3package,如果存在这个package,则在这个package中寻找名字为testaction,如果不存在这个package则转步骤c

(c)寻找namespace/path1/path2package,如果存在这个package,则在这个package中寻找名字为testaction,如果不存在这个package,则转步骤d

(d)寻找namespace/path1package,如果存在这个package,则在这个package中寻找名字为testaction,如果仍然不存在这个package,就去默认的namaspacepackage下面去找名字为testaction(默认的命名空间为空字符串"" ),如果还是找不到,页面提示找不到action

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值