`
jeelee
  • 浏览: 637080 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts 的struts.xml 中的namespace

阅读更多
Struts2 的 struts.xml 中是分 package 配置的,可以为 package 设置 namespace 属性,如

<package namespace="/secure"   ....>
    ......
</package>

如果没有指定 namespace 属性,默认 namespace 是 ""。使用 namespace 可以方便于按不同目的规划对应用的访问规则。比如不同 namespace 下配置了不同的拦截器就可以实现权限的控制,如 "/secure" 下已登陆用户才能访问,"/public" 下可公开访问的。

配置了 namespace 直接就是反应在访问 URL 上,例如 namespace="/secure"  name="test" 的 action

<package namespace="/secure"   ....>
       <action name="test"  ....
</package>

访问它的 URL 就是 http://ip:port/context/secure/test.action,那如果在 namespace "/secure" 下没有 test action 会出现什么情况呢?Struts 还会尝试在默认 namespace,即 "" 下找 test。

再举个例子,URL 是 http://ip:port/context/some/path/test.action 时,如果在 "/some/path" namespace 下找不到 test action,也是到 "" (default namespace) 下找 test action,但不会去 "/some" 下找的。

用标签 <s:url value="/secure/test.action"/>  对应页面源文件是 /context/secure/test.action

稍有麻的就是 <s:form action="/secure/test.action" .... 对应的源文件是 <form action="/context/secure/test.action" ...

但是后台会有警告:

警告: No configuration found for the specified action: '/secure/test.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

Struts2 把 action 属性值当整一个 Action Name 了,但这也不影响使用,这个 URL 正好能与 (package namespace) + (action name) 合上拍。

但是对于使用了动态方法调用(struts.enable.DynamicMethodInvocation = true)就没这么幸运了。很容易想当然的

<s:form action="/secure/test!update.action" ....  生成的 HTML 源文件却是 action="/TestStruts2/om/test"

同时后台的警告信息是:

警告: No configuration found for the specified action: '/secure/test' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

很显然对于这个 action="/TestStruts2/om/test",提交时是会得到 HTTP Status 404 - /context/secure/test  错误。

正确的用法是 <s:action...> 也有一个 namespace 属性,对了,就是

<s:form namespace="/secure" action="test!login">  生成的 HTML 源文件是:<form action="/TestStruts2/om/test!login.action" ....>

我们要的就是这个。

如果不配置 namespace 属性,我们能不能在访问 action 时也用上目录层次呢?可以,那是在 struts1 习惯的做法,配置 <action name="secure/test" ....> name 中使用斜杠,但在 Struts2 中 Action Name 中使用斜杠需要设置

struts.enable.SlashesInActionNames=true                      默认为 false

可是 Struts2 大概不赞同这种做法,力挺 namespace 的作用。

对于上面使用了斜框的 Action Name,<s:form 中的写法要用

<s:form action="secure/test">                 生成 HTML 源文件:<form action="/context/secure/test.action" .....

<s:form action="secure/test!update">            生成 HTML 源文件:<form action="/context/secure/test!login.action" .....

----------------------------------------------------------------------
上面的 action 后加不加 .action 无所谓,只是要保证 <s:form>  的 action 属性一定要与 struts.xml 中的 <action> 的 name 匹配上,如果你自作多情的在前面加个斜杠,如写成了

<s:form action="/secure/test!update"> 、 <s:form action="/secure/test">  或者 <s:form action="/secure/test!update.action">   生成的 HTML 源文件就都成了:<form action="/context/secure/test" .....

这也是从 Struts1 带来的弊病,因为 Struts1 中 <html:form> action 属性对应的是 <action> 的 path,而 Struts2 中 <s:form> 的 action 属性对应的是 <action> 的 name;name 要完全匹配,path 可以加些层次。

我为何以费这么些功夫来搞清楚这个呢,也就是因为使用 <s:form action=""> 是时而行,时而不行,很似迷惑,一度怀疑是应用服务器在从中作梗。坦白的说,就是写本篇日志完成红线以上的内容时仍未能知晓就理,这也正好映证了写下来的意义。因为在这过程中你在试图让别人更好的理解,倘若自己都说不清,他人只能是云里雾里了。
分享到:
评论

相关推荐

    Struts2的DTD配置文件struts-2.3.dtd

    在Struts2中,`struts.xml`是核心配置文件,它定义了应用的行为、动作、结果和其他组件。为了在Eclipse这样的集成开发环境中获得代码提示和自动完成,我们需要引入DTD(文档类型定义)文件,例如`struts-2.3.dtd`。 ...

    Struts2中Struts.xml配置文件详解

    "Struts2 中 Struts.xml 配置文件详解" Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、...

    去掉.action去掉.do字样 隐藏struts2 URL地址action, strus1的扩展名do也是同理.zip

    &lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;action name="temp" class="com.example.TempAction"&gt; &lt;result&gt;/temp.jsp ``` 在上面的例子中,用户可以通过访问`/temp`来调用`TempAction...

    Dom4j解析struts2框架的struts.xml

    在Struts2中,`struts.xml`是核心配置文件,它定义了应用的各个组件,如动作(Actions)、结果(Results)、拦截器(Interceptors)等。本篇文章将深入探讨如何使用Dom4j这个XML处理库来解析`struts.xml`,以便...

    struts.xml文件详解示例代码

    下面将详细介绍Struts.xml文件中的关键元素和它们的作用。 1. **&lt;struts&gt;根元素**: - `&lt;struts&gt;` 是整个配置文件的起始标签,包含了所有其他配置元素。 2. **元素**: - `&lt;package&gt;` 定义了一个包,可以看作是...

    dom4j解析struts.xml需要的包装类

    在Struts2中,配置文件`struts.xml`扮演着核心角色,它定义了动作(Action)、包(Package)和结果(Result)等关键组件的行为。为了方便地解析和处理这些配置,开发者常常会创建自定义的包装类(Wrapper Class),...

    struts2.0中struts.xml配置文件详解

    在深入探讨Struts2.0框架中的`struts.xml`配置文件之前,我们先来了解一下Struts2.0框架的基本概念。Struts2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用...

    Struts2手动搭建所有的jar包及相应的struts.xml和web.xml

    现在,当用户访问匹配Action的URL时,Struts2框架会解析`struts.xml`文件中的配置,执行对应的Action,然后根据结果类型返回相应的视图。你可以在此基础上扩展配置,比如添加更多的Action、结果类型、拦截器,以满足...

    struts.xml配置详解

    比如在大型项目中,可以将用户管理、商品管理和订单管理等不同的功能模块分别配置在不同的xml文件中(如user.xml、goods.xml和order.xml),然后通过struts.xml中的标签将这些模块配置文件引入主配置文件中。...

    struts2.5.16升级过程中遇到问题详述

    - **原因**:在Struts2.5.16版本中,所有的映射必须配置在struts.xml文件中,而非通过注解方式实现。这是因为新版本对某些配置项进行了调整,以提高安全性和稳定性。 ##### 3.2 配置示例 在src目录下新增加文件...

    Struts2.5版本struts.xml与web.xml配置的更改方法

    在Struts2框架中,配置文件`struts.xml`和`web.xml`是核心部分,它们定义了应用程序的行为和路由规则。随着版本的更新,配置方式也会有所改变。以下是Struts2.5版本中`struts.xml`和`web.xml`配置的更改方法: **1....

    struts2 使用注解现在零配置不需要在使用struts.xml配置文件,可以直接跑

    在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...

    struts.xml详解.doc

    `&lt;include file="struts-default.xml"&gt;`允许你引入其他XML配置文件,这样可以将配置分散到多个文件中,提高可维护性。`struts-default.xml`通常包含了Struts2的默认配置,包括一些预定义的拦截器和Action。 4. **...

    struts2的struts.xml文件的元素结构

    在Struts2中,`struts.xml`文件是核心配置文件,用于定义应用的行为、动作映射、结果类型、拦截器等。这篇博文主要探讨了`struts.xml`文件的元素结构,下面我们将详细解析这些关键元素。 首先,`struts.xml`文件...

    struts.xml 配置

    这篇博文详细介绍了如何理解和配置Struts2框架中的struts.xml文件,以实现MVC(Model-View-Controller)设计模式的高效应用。 在Struts2框架中,struts.xml文件主要包含以下几个部分: 1. **包(package)定义**:...

    struts.xml配置文件详解

    在Struts框架中,`struts.xml`配置文件扮演着极其重要的角色。它主要用于定义应用中的各种配置信息,包括但不限于包(Package)、拦截器(Interceptor)、Action以及结果(Result)等。 #### 二、Struts配置文件的...

    struts.xml详细说明.doc

    例如,`namespace`属性定义了Action的命名空间,`extends`属性继承自其他包(如`struts-default`),这样可以重用父包的配置。 7. **拦截器配置**: 在`&lt;package&gt;`内,可以通过`&lt;interceptors&gt;`和`...

    struts2配置2.5版

    &lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;action name="helloworld" class="com.mytest.HelloWorldAction"&gt; &lt;result&gt; /result.jsp &lt;package name="LoginForm" extends="...

    struts2 xml

    在Struts2中,XML配置文件(通常命名为struts.xml)是整个框架的基石,它负责设置Action、拦截器、结果页面以及其他关键组件。 **1. 包配置(Package Configuration)** 包在Struts2中扮演着组织和管理的角色,它...

    struts-2.3.4.1所需的jar文件

    接触新版本出了问题后,解决了把jar文件上传上来供大家分享, 一共9个jar文件,我试过没问题 ...&lt;package name="default" namespace="/" extends="struts-default"&gt; /helloWorld.jsp &lt;/struts&gt;

Global site tag (gtag.js) - Google Analytics