struts中package元素的namespace属性用法

struts中package元素的namespace属性几乎在所有的项目中都会使用到,开始总是不知道怎么用,后来在百度了一下,找到了一些解法,但是我自己尝试的时候却不能成功。后来我自己在他们的基础上做了些改动,发现能用了。本文基本上和网上的相同,但是改了一些内容,因为按照网上的解法我不能成功。

其间涉及到4个文件:struts.xml配置文件、test.jsp页面、testSuccess.html页面以及TestNSAction.java(test.jsp和testSuccess.html两个文件在WebRoot/nameSpace目录下)。
testSuccess.html

<html>
    	<head>
       	 	<title>testSuccess</title>
    	</head>
    	<body>
		test Success...
    	</body>
</html>

TestNSAction.java

public class TestNSAction extends ActionSupport
{
	@Override
	public String execute() throws Exception
	{
		return SUCCESS;
	}
}


方法一(看张龙老师的视频学习到的):

struts.xml
<struts>
	<package name="testNS" extends="struts-default" namespace="/nameSpace">
		<action name="test" class="com.kqygww.action.TestNSAction">
			<result type="success">testSuccess.html</result>
	</action>
	</package>
</struts>

test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    	<head>
		<title>test</title>
    	</head>
<body>
	<form action="test.action">
		<input type="submit" value="submit" />
	</form>
</body>
</html>

此时struts.xml中package元素的namespace属性值与此文件夹theNamespace同名。在这种情况下,在浏览器中输入 http://localhost:8080/struts2/theNamespace/test.jsp将访问输入页面test.jsp(此URL中struts2是我为此项目设置的Context path,而此中的theNamespace为文件夹的名字,下URL同),然后再点击test.jsp中的提交按钮,则转到 http://localhost:8080/struts2/theNamespace/test.action(此中strut2同上,而theNamespace则为namespace属性值)。此处页面跳转后的URL基于的原理是:test.jsp中的action值(“test.action”)并末在前面添加“/”符号(“/test”)。因为,若添加“/”则在形成URL(上面第二个)时,会以“服务器路径”为地址(http://localhost:8080),并把action值看成是绝对路径,得到的URL为 http://localhost:8080/test.action。显然是不对的。而不加”/“则不同,这时会以当前路径( http://localhost:8080/struts2/theNamespace/)<本来此中的theNamespace由文件夹名取得,但在URL中被当作namespace属性值看待,因为它们同名,完成了这一巧妙的转换>为地址,并加上action值,这就得到了正确的URL。

 

方法二(来自于方法一):

同样首先是struts.xml,同上的主要区别在于namespace的属性值与文件夹不同名,我用的是"/ns"。
而test.jsp中当然也需相应的改动,与上面的区别是action值,现为"/struts2/ns/test.action"(分别代表的是Context path、namespace属性值、最终的action名)。从第一种方法的分析可知,这里action的值中前面有加”/“符号,故为”服务路径“(http://localhost:8080),加上action值。得http://localhost:8080/struts2/ns/test.action。此为正确的URL。在struts.xml文件中也要改文件的访问路径。
struts.xml

<struts>
	<package name="testNS" extends="struts-default" namespace="/ns">
		<action name="test" class="com.kqygww.action.TestNSAction">
			<result type="success">/nameSpace/testSuccess.html</result>
		</action>
	</package>
</struts>

test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    	<head>
		<title>test</title>
    	</head>
<body>
	<form action="/struts2/ns/test.action">
		<input type="submit" value="submit" />
	</form>
</body>
</html>

 

方法三(来自于方法二):

struts.xml与方法二中的一样。
在test.jsp求URL的方法上,略有不同。需在test.jsp的<head>与<title>标签之间添加代码<base href="<%=basePath%>">。当添加此base标签之后,计算URL的方法就有所变化,添加之后,在此例中action的值就需改为"ns/test.action”(分别代表的是namespace属性值、最终的action名)。因为当添加base标签之后,URL就是以base为相对路径,从test.jsp顶部的JSP代码中的path和basePath可知,此时的base值为http://localhost:8080/struts2/。因此从第二种方法中正确的URL可知,我们只需将action值写为"ns/test.action”就行,因为base中只缺此部分。
test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<html>
	<head>
		<base href="<%=basePath%>">	
		<title>test</title>
	</head>
	<body>
		<form action="ns/test">
			<input type="submit" value="submit" />
		</form>
	</body>
</html>


推荐使用方法一,方法一更简单直观,更好管理。

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值