struts2命名空间namespace和访问路径的关系
2015-07-31 14:56
344 查看
我是在看了别人的博客之后,对namespace和访问路径的关系算是搞明白了,故记录下来供大家参阅和自己以后进行查看。
假设我的struts.xml配置文件中一个action配置如下:
那么我直接可以通过http://localhost:8089/struts2/testMap.action进行访问,这个的访问过程是这样的,在没有定义namespace的时候,由于在struts中,我们的package继承了struts-default,也就拥有了struts的根空间,在这里我们没有指明namespace属性,但其实此时我们的namespace属性相当于namespace="",或者namespace="/"。由于我们没有指定命名空间,struts直接在根空间中寻找name=testMap的action,根空间有这个action,所以我们能访问。
假设配置文件中action配置中加入了namespace属性值,如下:
那么我们必须通过http://localhost:8089/struts2/test/testMap.action这个路径进行访问,如果再用http://localhost:8089/struts2/a/testMap.action或其他路径,就会出现异常。因为此时struts首先在命名空间为test中寻找,如果没有找到,会继续在根空间寻找,而现在根空间已经没有名为demo的action了。
如果路径嵌套很多处理方式:
假设访问的路径为http://localhost:8089/struts2/path1/path2/path3/test.action,访问过程如下:
1、首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤2;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“” ) ,如果在默认namaspace的package里面还寻找不到该action,页面提示找不到action
2.寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
3.寻找namespace为/path1的package,如果不存在这个package则执行步骤4;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
4.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。
可以理解为从里往外去找。
Action配置中,配置项的默认值
1.如果没有指定Action的class,默认值为ActionSupport。
2.如果没有指定Action的method属性,默认值为execute()方法。
3.如果没有指定result的name属性,默认值为“success“
struts配置文件中包的使用说明
在Struts2中使用包来管理Action的,包的作用于java中包的作用非常类似,主要管理一族业务功能相关的action。在实际应用中,我们把一族业务功能相关的action放在同一个包下。
假设我的struts.xml配置文件中一个action配置如下:
<package name="/user" extends="struts-default"> <action name="testMap" class="com.sh.action.MapAction" method="testMap"> <result name="success">/index.jsp</result> </action> </package>
那么我直接可以通过http://localhost:8089/struts2/testMap.action进行访问,这个的访问过程是这样的,在没有定义namespace的时候,由于在struts中,我们的package继承了struts-default,也就拥有了struts的根空间,在这里我们没有指明namespace属性,但其实此时我们的namespace属性相当于namespace="",或者namespace="/"。由于我们没有指定命名空间,struts直接在根空间中寻找name=testMap的action,根空间有这个action,所以我们能访问。
假设配置文件中action配置中加入了namespace属性值,如下:
<package name="/user" extends="struts-default" namespace="/test"> <action name="testMap" class="com.sh.action.MapAction" method="testMap"> <result name="success">/index.jsp</result> </action> </package>
那么我们必须通过http://localhost:8089/struts2/test/testMap.action这个路径进行访问,如果再用http://localhost:8089/struts2/a/testMap.action或其他路径,就会出现异常。因为此时struts首先在命名空间为test中寻找,如果没有找到,会继续在根空间寻找,而现在根空间已经没有名为demo的action了。
如果路径嵌套很多处理方式:
假设访问的路径为http://localhost:8089/struts2/path1/path2/path3/test.action,访问过程如下:
1、首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤2;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“” ) ,如果在默认namaspace的package里面还寻找不到该action,页面提示找不到action
2.寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
3.寻找namespace为/path1的package,如果不存在这个package则执行步骤4;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
4.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。
可以理解为从里往外去找。
Action配置中,配置项的默认值
1.如果没有指定Action的class,默认值为ActionSupport。
2.如果没有指定Action的method属性,默认值为execute()方法。
3.如果没有指定result的name属性,默认值为“success“
struts配置文件中包的使用说明
在Struts2中使用包来管理Action的,包的作用于java中包的作用非常类似,主要管理一族业务功能相关的action。在实际应用中,我们把一族业务功能相关的action放在同一个包下。
相关文章推荐
- 关于springmvc上传图片
- java学习基础
- 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示
- 爸爸和儿子的故事带你理解java线程
- Spring MVC 学习 之 - URL参数传递
- Java进阶(九)正则表达式
- Java进阶(九)正则表达式
- GitHub for Windows客户端使用(Eclipse开发环境)
- Eclipse下Android开发环境配置以及如何快速更新Android SDK
- java工具类(二)之java正则表达式表单验证
- java工具类(二)之java正则表达式表单验证
- spring常用注解
- Java的位运算符与二进制转换
- Java内存模型
- java程序执行过程及静态块、非静态块执行顺序
- 在springmvc中通过过滤器获取request和response
- 使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
- 关于java读取clob字段的几种方法
- struts2标签遍历各种形式数据集合
- 4种java复制文件的方式