我使用 Spring MVC 已经有一段时间了,现在我在 Glassfish 服务器上运行的 Netbeans 中创建了我的项目。虽然一切正常,但我觉得我对每个 XML 文件中应该包含的内容缺乏了解 - 在某些情况下,这导致我只是在每个文件中一个接一个地尝试一大块 XML,直到它工作为止。
我无法在 Google 上找到任何明确的描述,我已经尝试了几次。
我将在这里详细说明我目前的理解,如果有人可以跟进更详细的解释或让我知道我在哪里弄错了,我将不胜感激。
web.xml
这似乎是通过告诉它使用哪些类来处理查询来配置 servlet 容器。困惑似乎是,虽然在这里配置 Spring 不起作用 - 您需要在此处放置一些配置来安装 Spring,即
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
您在 web.xml 中添加它以使 Spring Security 工作 - 但实际上您在另一个文件中配置 Spring Security。
调度程序-servlet
这似乎与 web.xml 相似,因为它是关于配置 servlet 容器以启用 Spring - 但在我的项目中,它大部分是空的,只包含一个 viewResolver
.这里应该放什么,它与 web.xml 有何不同?
beans.xml
目前这个文件是空的,除了一个 xml 根标签 <beans>
以及我所有项目中的一些命名空间/模式定义。它真的需要什么吗?
是 bean-discovery-mode="annotated">
在根标签中它是空的原因是什么?
applicationContext
这似乎是所有实际 Spring 配置的位置,例如 <mvc:annotation-driven />
, <context:component-scan />
等等
您也可以将此配置拆分为多个文件并使用 <import />
将这些文件链接到应用程序上下文中。
玻璃鱼网
我大部分时间都忽略了这个文件,有什么理由不应该?
问题
所以问题是:
- 我在上面遗漏了什么?
- 为什么有一个单独的 beans.xml 似乎什么都不做?它是在引入注释驱动之前遗留下来的吗?
- 为什么同时存在dispatcher-servlet.xml和web.xml,它们有什么区别?
- glassfish-web.xml 与这两个有何不同?
- 如何判断一个 xml 片段是否应该进入这些文件中的哪个而不在它们中全部尝试直到它工作? (到目前为止,我开发的粗略经验法则是“applicationContext.xml 中的 spring 配置,web.xml 中安装 spring 组件,忽略其他文件”!)
提前致谢,
提姆
最佳答案
web.xml 是一个应该驻留在所有 J2EE Web 应用程序中的文件。其规范由 J2EE 规范定义。您可以在此处配置应用程序的一般行为。例如 servlet、过滤器、安全策略等。
dispatcher-servlet 是 Spring MVC 框架中一个特殊的 servlet。您必须在 web.xml 中定义其映射,才能在您的网络应用中启用 Spring。
beans.xml 是用于配置某些 CDI 设置的文件。例如 bean-discovery-mode="annotated"
意味着只有使用 CDI 范围注释注释的类才会被视为 CDI 托管 bean。
applicationContext.xml 你说得对。它是主 Spring 配置文件的通用名称。您可以在这里设置很多东西,例如创建和连接一些 Spring bean。
glassfish-web.xml 通常是 GlassFish 服务器的 web.xml 的扩展。它并不总是需要。如果要专门为 GlassFish 服务器配置一些设置,则需要它。例如,如果您在 web.xml 中配置安全部分,则必须将用户角色从 web.xml 映射到 GlassFish 领域角色。
希望对你有帮助。
关于java - web.xml、beans.xml、applicationContext.xml等的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539842/