一、怎么用命名空间,为什么要用?
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,就可以完成了,如自己在加工一下,可以得到更友好的返回页面
好了,完了,我的文字表达能力不是很好,文章有点流水的意思,见谅
分享到:
相关推荐
Struts2 Convention Plugin允许开发者通过注解来配置Action名称、拦截器、命名空间等,极大地简化了配置过程。 ##### 2.7 默认Action及结果 当用户访问特定路径时,如果没有显式定义Action,则Convention Plugin会...
- `struts.convention.package.locators`:定义Action的根包,影响Action的命名空间映射。 - `struts.convention.action.packages`:除了默认的四个包(action, actions, struts, struts2),这个常量可以指定额外...
通过在配置文件中设置 `”struts.action.extension” value=”do”/>` 可以改变Struts2的请求后缀,如改为`.do`。若要指定多个后缀,可以使用逗号分隔,如`value=”do,action”`。 5. 常用的Struts2常量: - `...
Struts2是一个强大的Java web应用程序框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式。拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和规范化响应的重要角色。在这个"struts2...
`struts.convention.package.locators`定义了Action的根包,影响Action的命名空间;`struts.convention.action.packages`则可以指定额外的包,让Convention去搜索Action类。 4. **Action名称映射**:Action类的名字...
这些配置项可以帮助开发者更好地控制Struts2的行为,比如国际化编码设置、请求处理后缀等。本文将详细解析给定的Struts2配置项,并探讨其作用与应用场景。 #### 二、Struts2常量配置项详解 ##### 1. struts.i18n....
- `struts.convention.package.locators`:此常量定义了Action的搜索根包,可以自定义Action的命名空间。 - `struts.convention.action.packages`:用于指定额外的包,Convetion插件会在这个包及其子包中寻找...
详细介绍了可通过属性控制的Convention行为,包括但不限于Action后缀、默认结果路径、命名空间和包的关联等。 #### 七、总结 Struts2 Convention Plugin极大地简化了Struts2应用的开发和维护过程,通过遵循约定...
2. `struts.convention.package.locators`: 定义Action的根包,影响Action的命名空间映射。例如,如果设置为`fore`,那么`actions.fore.LoginAction`将映射到`/login`而不是`/fore/login`。 3. `struts.convention....
5. **请求后缀配置**:默认情况下,Struts2处理的请求后缀是`.action`,但可以通过修改`struts.action.extension`常量来改变,比如设置为`.do`或`.jsp`。 6. **常量定义**:Struts2有一系列预定义的常量,用于全局...
- `namespace`:命名空间 - `extends`:继承的包 以上是对Struts2框架的详细介绍,包括了其工作原理、开发步骤以及核心配置等方面的内容。通过这些内容的学习,可以更好地理解和掌握Struts2框架的应用。
3. `struts.mapper.alwaysSelectFullNamespace`: 当设为`false`时,Struts2将自动省略Action的完整命名空间,简化URL。 在处理静态资源时,通常希望它们直接由Web服务器提供,而不是经过Struts2框架。这样可以减少...
例如,可以在`struts.xml`中设置`struts.convention.action.suffix`来改变Action类的后缀,或者设置`struts.convention.default.parent.package`来指定默认的父包。 **从Codebehind迁移到Convention** 如果你的...
其中`name`属性定义了包的名字,`extends`属性指定继承自哪个包,`namespace`属性定义了命名空间。 - `<action>`:定义了一个具体的Action,`name`属性指定了Action的名称,`class`属性指定了Action类的全限定名。 -...
- 业务逻辑层:放在`biz`包下,类名后缀为`Biz`,命名空间后缀为`BLL`。 - 数据访问层:放在`dao`包下,类名后缀为`DAO`,命名空间后缀为`DAL`。 - 实体对象:放在`entity`包下,命名空间后缀为`Models`。 总结:本...
Struts包的概念类似于其他框架中的模块或命名空间,但更专注于控制层的逻辑组织。 #### 三、示例代码解析 给定的代码片段展示了如何处理上传的文件,并验证其类型是否符合预期: ```java FormFile formFile = ...
此外,convention-plugin还支持通过注解来增强功能,如`@Result`用于指定Action执行后的结果页面,`@ActionParams`用于映射请求参数,`@Namespace`用于指定Action的命名空间等。 在处理模型对象时,convention-...
ConventionPlugin不仅简化了基本的Action定位和结果渲染,还提供了基于注解的高级功能,如Action命名、拦截器定义、命名空间设置以及XWork包管理等,极大地丰富了框架的应用场景和灵活性。 - **Action Annotation**...