`

Struts2的命名空间与后缀设置

    博客分类:
  • java
阅读更多
一、怎么用命名空间,为什么要用?
Struts2的命名空间在struts.xml中的package中配制
<package name="semcolon" extends="struts-default" namespace="/userMag">

他的好处在于,当两个不同的应用要用到一个数据库操作时,可以很好的把业务逻辑给区分开

比如BLOG文章的删除,作者可以对该文章可以做删除操作,但是管理员也会有这个权限,哪么我可以定义两个包,分别用于文章管理和系统管理

用户管理
<package name="semcolon.bloagmag" extends="struts-default" namespace="/blogMag">
		<action name="delBlog" class="semcolon.blogmag.BlogMag">
			<result>/WEB-INF/jsp/comm/success.jsp</result>
		</action>
		
	</package>

系统管理
<package name="semcolon.systemmag" extends="struts-default" namespace="/systemMag">
		<action name="delBlog" class="semcolon.systemMag.BlogMag">
			<result>/WEB-INF/jsp/comm/success.jsp</result>
		</action>
		
	</package>


相对DAO来说,不同的是用户管理只能一次删一条,而系统管理可以删多条,这完全可以使用一个DAO的操作来完成,别的事都属于业务层的事了,如使用<include>,哪么就更方便了,我们可以大胆的在每个不同的模块下定义相同的应用名

二、命名空间寻找Action的优先级
在命名空间下如找不到定义的action哪么是不是直接跳到WEB容器中的错误页面中了呢?
我能给的答案是 NO,我也测试过,struts2他自己会先进行处理

先在当前的命名空间中寻找,如没有找到,哪么会直接跳到默认的命名空间中寻找

问题又出现了,默认的命名空间在哪里?
当在package标签下没有设置命名空间时,也就是没有定义namespace时,该package下所有action定义都会存放在默认的命名空间下,OK给个例子吧
<package name="semcolon" extends="struts-default">
		<action name="*" class="com.opensymphony.xwork2.ActionSupport"/>
				<result>/WEB-INF/jsp/test/MyJsp3.jsp</result>
		</action>
	</package>
	
	<package name="test1" extends="struts-default" namespace="/login/test">
		<action name="userLoginAction" class="com.opensymphony.xwork2.ActionSupport">
				<result>/WEB-INF/jsp/test/MyJsp1.jsp</result>
		</action>
	</package>
	
	
	<package name="test2" extends="struts-default" namespace="/login">
		<action name="loginAction" class="com.opensymphony.xwork2.ActionSupport">
				<result>/WEB-INF/jsp/test/MyJsp2.jsp</result>
		</action>
	</package>

当访问http://localhost:8080/test/login/test/loginAction.action时,
会在test1包中找,如没有找到,他不会在test2中找,他会直接跳到semcolon中寻找

注:这里在semcolon中定义的Action中,name定义为“*”,结合命名空间这种机制可以带来很大的方便,因为定义为"*"的action,将接收所有struts2处理的未定义的请求

虽然我在网上也看到过如当前访问的命名空间中没有找到相应的action,他会到上一级的命名空间中寻找(如/login/test中没有找到,会跳到/login中寻找),但经我测试,这种方式不成功,希望看到这文章的人,也来测试下,看看你们的结果是不是和我一样

3、关于后缀设置
访问的后缀设置一般都在struts.xml中或是设置在struts.properties中
<constant name="struts.action.extension" value="do"></constant>

struts.action.extension=do

如想设置多个后缀可以使用“,”分割
但有个问题,如果用户访问了一个错误地址,且没有使用struts2中定义的后缀,哪么会跳转到WEB容器中定义的错误页面,OK,也许我们可以使用手动设置容器的这个页面要解决掉,但是我在使用Spring MVC时,可以不使用后缀,这样也有好处,像安全级别高的,不想给后缀用户(非恶意用户也不需要知道这些),或我想全部请求都要经过struts2来处理。对于这样的需求,这样一定无法满足,后经过我测试,可以这样来设置
<constant name="struts.action.extension" value=""></constant>

对,就是什么也不写,一个空(struts2有默认值的,值为action,所以一定要手动设置一下)
结合默认命名空间定义的名为"*"的action,就可以完成了,如自己在加工一下,可以得到更友好的返回页面


好了,完了,我的文字表达能力不是很好,文章有点流水的意思,见谅
分享到:
评论
1 楼 vincent_joan 2010-07-08  
Struts 2 在当前命名空间下寻找Action,如果没有找到,那么会直接跳到默认的命名空间中寻找

这句话,说的很简洁,比 Struts 2 权威指南上说的简洁多了

相关推荐

    struts2 Action 包 命名空间 servlet API

    struts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 ...

    struts2命名规范

    struts2命名规范,包名,空间名,Action名

    struts2中命名空间的使用

    struts2中命名空间的使用,在web中如果有需要多个同名的action,可以通过命名空间来管理action

    struts2改写url后缀demo

    struts2实现改写在url后缀的方法,如XX.do---&gt;改写为xx.html等,方便试用,一目了然

    Struts2中命名空间问题

    是一个简单的struts2中阐明命名空间的实例

    struts1和struts2的区别

    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...

    struts 2命名规范

    struts 2的命名规范、以及多个struts-xml配置文件(多人员开发)时的配置问题......

    Struts2.0深入学习 命名空间,模型驱动,表单重复提交

    Struts2.0深入学习 命名空间,模型驱动,表单重复提交实例 博文链接:https://zmx.iteye.com/blog/463118

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理.pdf

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...

    Struts2 技术内幕-深入解析Struts2架构设计与实现原理

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    struts2 资料struts2 资料struts2 资料struts2 资料

    struts2 资料struts2 资料struts2 资料struts2 资料

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...

    Struts2之命名空间详解及JSP文件上传了解案例struts009

    参考博文:http://blog.csdn.net/u011638419/article/details/41620213

    struts2技术内幕+struts2权威指南

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...

    struts2帮助文档

    struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2中的零配置与IOC struts2介绍之使用连接标签 struts2入门 struts2进阶学习一 struts2进阶学习二 struts2进阶学习三 struts2进阶...

    Struts升级到Struts2.3.35

    该漏洞可能在两种情况下被触发,第一,当没有为底层xml配置中定义的结果设置namespace 值,并且其上层动作集配置没有或只有通配符命名空间值,可能构成 RCE攻击。第二,当使用没有 value和动作集的url标签时,并且其...

    struts2案例 struts2 struts2源码

    struts2源码 struts2案例 struts2使用包

Global site tag (gtag.js) - Google Analytics