struts.xml中Struts的默认包名是什么?

时间:2013-05-18 07:52:26

标签: java configuration struts2 package struts-config

我创建了一个名为RegesterAction的新类,但我没有在任何包中保留此类。如何在struts.xml

中配置此课程

以下是struts.xml文件,但我无法理解属性值"default"struts-default

<struts>
    <package name="default" extends="struts-default">
        <action name="*Register" method="{1}" class="RegisterAction">
            <result name="populate">/register.jsp</result>
</package>
</struts>

3 个答案:

答案 0 :(得分:2)

Struts2中的包与Java中的包略有不同,但用法是将代码分离到与自己的命名空间一起使用的不同模块中,因此它不会与动作名称冲突。为了更好地理解包和命名空间的概念,您可以查看Struts 2 Namespace configuration example and explanation教程。

如果您将类保留在源文件夹中并且它迟早不属于该程序包,那么最终会出现命名新类和繁重代码管理的问题。

Struts2框架包含名为struts-default的软件包,其中包含了在应用程序配置中使用的所有必要内容,方法是将此名称放入extends <package属性中来扩展软件包。 } 标签。您还可以包含其他插件中的其他默认包,即json-default等。

只要命名空间与包名称相关,您就可以比较Struts2框架中Java语言和包命名空间使用的包名称,您可能会发现它们类似,但它们完全不同。例如,Struts2使用的默认命名空间是"",在其他包/命名空间中找不到操作或结果名称时使用。如果您使用namespace="/"(应用程序的包根),这几乎是等效的。

如果省略default,如何使用root的{​​{1}}来命名根包,而不是使用框架已经使用的名称struts-default。 1}}属性然后将使用默认命名空间。这与Java类似,如果省略包声明,则使用默认包。

概念默认可能会通过其他术语传播,例如,默认操作,默认结果,默认拦截器堆栈等。框架也使用名称​​默认已知接口的默认实现,等等。默认一词没有单数含义。通常,如果省略代码,框架将使用它的默认设置。

答案 1 :(得分:1)

package name完全独立于您的代码工件。

The struts-default package is... the Struts 2 default package。它定义了默认结果类型,拦截器,拦截器堆栈和一些其他默认值。你不需要来扩展它,但如果你没有,你需要做大量的手工工作在你自己的包中。

我相信你应该将你的行动类放在一个包中,并且可以认为没有合理的论据反对这样做的最佳实践。同样,您的操作类包完全独立于包名称,或包扩展的内容(如果有)。

答案 2 :(得分:0)

是的,你可以在 struts.xml 中包含这两个......就像这里一样

<package name="default" extends="json-default,hibernate-default" namespace= "/">