您的位置:首页 > 编程语言 > Java开发

struts中package元素的namespace属性用法

2013-03-19 20:47 435 查看
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>


推荐使用方法一,方法一更简单直观,更好管理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: