我创建了一个名为
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>
Struts2 中的包与 Java 中的包略有不同,但用法相同,将代码分成不同的模块,并使用自己的命名空间,因此不会与操作名称冲突。 为了更好地理解包和命名空间的概念,您可以查看Struts 2命名空间配置。
如果您将类保留在源文件夹中并且它不属于该包,迟早您将遇到命名新类和繁重的代码管理的问题。
struts-default
的包,其中包含能够在应用程序配置中使用的所有必要内容,通过将此名称放入 extends
标签的 <package>
属性来扩展包。您还可以包含其他插件中的其他 default 包,即 json-default
等。
只要namespace和包名相关,你对比一下Java语言使用的包名和Struts2框架中的包namespace,你可能会发现很相似,但它们是完全不同的。例如,Struts2 使用的默认命名空间是
""
,当在其他包/命名空间中找不到操作或结果名称时使用。如果您使用应用程序的包根目录namespace="/"
,这几乎是等效的。
如何使用
default
的 root
命名根包并不重要,但不能使用框架已使用的名称,即 struts-default
,如果省略 namespace
属性,则默认命名空间将为用过的。这与Java类似,如果省略包声明,则使用默认包。
默认的概念可能会通过其他术语传播,例如默认操作、默认结果、默认拦截器堆栈等。该框架还使用名称默认来表示已知接口的默认实现,等等。 default 这个词没有单数含义。一般来说,如果您在代码中省略某些内容,那么框架将使用它的默认设置。
包名称完全独立于您的代码工件。
包是...Struts 2默认包。它定义了默认结果类型、拦截器、拦截器堆栈和一些其他默认值。您不需要扩展它,但如果您不这样做,您就需要在自己的包中完成大量手动工作。 我相信你应该将你的动作类放在一个包中,并且想不出任何合理的理由来反对这样做的最佳实践。同样,您的操作类包完全独立于包名称或包扩展的内容(如果有)。
是的,你可以将两者都包含在
<package name="default" extends="json-default,hibernate-default" namespace= "/">