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
TestNSAction.java
方法一(看张龙老师的视频学习到的):
struts.xml
test.jsp
此时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
test.jsp
方法三(来自于方法二):
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
推荐使用方法一,方法一更简单直观,更好管理。
其间涉及到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>
推荐使用方法一,方法一更简单直观,更好管理。
相关文章推荐
- struts.xml中package元素的namespace属性用法(struts2.2.1.1)
- struts.xml中package的namespace属性
- struts.xml文件中package元素的各大属性讲解
- struts.xml文件中package元素的各大属性讲解
- 3.1.struts.xml中package的namespace属性
- struts.xml中package的namespace属性
- struts2配置中Action的name和package的name和namespace的用法,以及extends属性
- struts.xml文件中package元素的各大属性讲解
- struts.xml配置文件(package,namespace,action)
- Struts配置文件中的action元素属性
- Struts2学习笔记之package元素中的namespace搜索规则
- struts配置文件中action元素属性设置解说
- 【转】Struts2.0 xml文件的配置(package,namespace,action) 留着用
- struts的<package name="login" namespace="/system" extends="struts-default">是什么意思?
- struts配置中 package 各个属性的说明
- Python list 按元素属性排序, key 的用法
- struts.xml配置文件(package,namespace,action)
- struts.xml配置文件(package,namespace,action)
- struts.xml配置文件(package,namespace,action)
- Strutus2配置之配置struts.xml文件(package,namespace,action)