`
yxwang0615
  • 浏览: 560859 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

struts2 包和命名空间理解

阅读更多

今天在使用DMI做一个测试的时候,用到了默认命名空间,出现一点问题,在此记录并复习一下相关知识:

 

struts 2 使用包来组织Action,因此,在Action定义放在包下完成,定义Action 通过使用package下的action节点完成。 

配置package元素时必须指定name属性,这个属性是引用该包的唯一标识。除此之外,还可以指定一个可选的extends属性,extends属性值必须是另一个包的name属性。指定extends属性表示让该包继承另一个包。子包可以从一个或多个父包中集成到拦截器、拦截器栈、action等配置。

EG: struts-2.1.8\apps\struts2-blank-2.1.8\WEB-INF\src\java\example.xml  

<package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
</package>

 这个名为default的包继承了struts-default的包,这个包在struts2-core-2.1.8.jar/struts-default.xml中定义。

 struts-default.xml是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。

 

定义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的action。

 

本来想针对namespace做一个测试,如下:

   <package name="example" namespace="/" extends="struts-default">
        <action name="userAction" class="com.wyx.dmi.LoginAction">
            <result name="loginSuccess">/index.jsp</result>
        </action>
    </package>
    
    <package name="default"  extends="struts-default">
        <action name="userAction" class="com.wyx.dmi.LoginAction">
            <result name="loginPage">/login.jsp</result>
        </action>
    </package>  

 

这里名为default的包中的action name属性 ,和example包中的相同,报出了:找不到action或result的错误,

所以namespace=""的包中的action,不要和其他包的action 元素下的name 属性重名。

从namespace=""设计的本意来看,指定action的名字与其他包中的名字相同也没有任何意义。

 

注意: struts2的form标签中namespace和action属性要分开写,不要省略namespace,直接写成action="/namespace/action"的形式。

分享到:
评论

相关推荐

    struts2中命名空间的使用

    1. **配置文件**:Struts2的配置文件通常为`struts.xml`,在这个文件中可以定义多个包,并为每个包指定命名空间。 2. **示例**: ```xml &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts ...

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

    在实际应用中,熟练掌握Struts2的命名空间、模型驱动和表单重复提交处理不仅可以提高开发效率,还能提升应用的稳定性和用户体验。通过不断实践和学习,你将能够更自如地运用这些技术解决实际问题。

    struts2命名规范

    2. **空间名(Namespace)**:在Struts2中,命名空间用于区分不同的URL路径,每个Action都可以关联一个或多个命名空间。空间名通常与包名保持一致,但并不强制。例如,如果Action类位于`com.example.myapp.actions`...

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

    在Struts2中,命名空间(Namespace)是一个重要的概念,用于组织和分隔应用程序的不同部分,使得配置更加清晰和模块化。文件上传功能则是Struts2提供的一种方便用户上传文件的机制,对于处理如图片、文档等上传需求...

    struts 2命名规范

    根据描述中的内容,我们可以进一步了解 Struts 2 中 Action 接口的应用及命名空间配置的相关知识点。 1. **Action 接口介绍** - **接口定义**:`com.opensymphony.xwork2.Action` 接口中定义了一系列的标准字符串...

    Struts2教学视频

    标签在struts.xml中定义一个配置包,可以包含多个Action,每个Action都有自己的命名空间和配置。包还可以继承其他包,重用配置。 **五、Action** Action是Struts2中的核心组件,负责处理用户的请求,执行业务逻辑,...

    struts2与webwork2

    - **包结构**:Struts2对WebWork2的包结构进行了重新组织,将其纳入到Struts的命名空间下,这不仅仅是简单的名称更改,更是为了统一框架内部结构,便于开发者理解和使用。 - **社区与生态**:Struts2凭借其更广泛的...

    struts2_namespace代码

    4. **实际应用示例**:压缩包中的代码可能包含不同命名空间下的Action类,以及对应的视图(JSP页面)和结果配置,帮助初学者理解Namespace的实际应用。 总之,Namespace是Struts2框架中用于组织和管理Action的重要...

    struts2 xml

    在这个例子中,`qiujy`包和`my`包都有一个名为`login`的Action,但由于它们分别位于"/"和"/manage"的命名空间下,因此可以同时存在且互不影响。 **3. Action配置** Action是处理用户请求的核心组件,它通过`...

    Struts2课堂学习总结

    接着,将必要的Struts2库文件(jar包)添加到项目的类路径中,通常这包括Struts2的核心库和其他依赖库。`struts.xml`配置文件不应放在`WEB-INF`目录下,而是应该放在`src`目录下,以便于构建过程中的处理。 2. **...

    Struts2的配置文件的详细说明

    关于命名空间配置,当需要在同一个Web应用中定义同名Action时,Struts2通过命名空间进行区分。通过为`package`元素设置`namespace`属性,可以为包下的所有Action指定共同的命名空间。例如,将上面的配置改为: ```...

    Struts2(一)

    - **开发包目录结构**:了解Struts2开发包的目录结构有助于更好地理解和使用框架资源。 - **必要JAR包**:通常情况下,会将`struts-blank`示例项目中位于`\WEB-INF\lib`目录下的所有JAR包复制到项目的`classpath`中...

    struts包下载

    Struts是Java Web开发中的一个开源框架,特别版本为Struts 2,它极大地简化了MVC(模型-视图-控制器)架构的实现。...通过理解并熟练掌握Struts 2的各个核心概念,开发者能够更高效地构建和维护MVC架构的应用程序。

    Struts2小程序源代码

    `Struts2_0200_Namespace`可能展示了如何在struts.xml配置文件中定义和使用命名空间,以及如何根据命名空间来映射Action。Namespace使得大型项目中的路由管理更加有序和灵活。 3. **ActionMethod**: `Struts2_0500_...

    struts2 跳转至404 页面的解决方案

    总之,解决Struts2跳转至404页面的问题需要对整个应用的配置进行仔细检查,从Action、命名空间、拦截器到结果类型、资源路径,甚至包括服务器和IDE的设置。理解Struts2的工作原理,结合日志信息,通常可以找出导致...

    struts2学习笔记(完美总结)——转自OPEN经验库

    总之,Struts2作为一款成熟的Web框架,提供了许多强大的特性,如Action、Result、OGNL、Tags以及灵活的配置和命名空间管理。熟练掌握这些核心概念,有助于开发者构建高效、稳定的Java web应用。

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    3. **命名空间隔离**:在配置文件中,可以使用命名空间来区分不同应用的配置,比如在Struts2的action配置中使用namespace属性。 4. **使用Maven或Gradle**:构建工具可以帮助管理依赖关系,避免引入不必要的库,同时...

    Struts2注解开发jar

    为了使用Struts2的注解开发,开发者需要在项目的类路径下包含`struts2-convention-plugin`的jar包,并在Struts2的配置文件`struts.xml`中启用该插件。例如: ```xml &lt;struts&gt; &lt;package name="default" extends="...

    struts2 自定义标签

    1. 创建标签库描述文件(TLD,Tag Library Descriptor):这是定义自定义标签的关键文件,用于描述标签的属性、命名空间等信息。例如,`struts-tags.tld`。 2. 编写标签处理类(Tag Class):这个类负责处理标签的...

    struts2标签api

    - 标签的命名空间:通常以`s:`开头,表示它是Struts2提供的标签。 - 动态属性:很多标签都支持动态属性,允许我们根据Action类的状态动态设置属性值。 - 表单标签的生命周期:它们会自动处理参数的传递,包括表单的...

Global site tag (gtag.js) - Google Analytics