web.xml,beans.xml,applicationContext.xml等之间的区别


问题内容

我一直在使用Spring
MVC一段时间,现在在运行于Glassfish服务器上的Netbeans中创建我的项目。尽管一切正常,但我感觉我对每个XML文件中的内容缺乏了解-
在某些情况下,这导致我只是逐个尝试每个文件中的XML块,直到工作为止。

我在Google上找不到任何明确的说明,并且尝试了几次。

我将在此处详细说明我目前的理解,然后,如果有人可以跟进更详细的解释,或者让我知道我在哪里弄错了,将不胜感激。

web.xml

这似乎是通过告诉servlet容器使用哪些类来处理查询来配置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。

调度程序

这似乎与 web.xml 相似,因为它是关于配置servlet容器以启用Spring的-
但是在我的项目中,它大部分是空的,只包含一个viewResolver。这里应该输入什么,它与 web.xml 有何不同?

beans.xml

目前,除了<beans>我的所有项目中的xml根标记和一些命名空间/架构定义之外,此文件都为空。实际需要什么吗?

bean-discovery-mode="annotated">在根标签是空的原因是什么?

applicationContext

这似乎是所有实际Spring配置去如<mvc:annotation-driven /><context:component-scan />等。

您也可以将此配置拆分为多个文件,并用于<import />将这些文件链接到应用程序上下文中。

玻璃鱼网

我大部分时间都忽略了此文件,有什么我不应该的理由吗?

问题

所以实际上问题是:

  • 从上面我错过了什么?
  • 为什么会有单独的 bean.xml 似乎什么也不做?它是引入注释驱动之前的遗产吗?
  • 为什么同时存在 dispatcher-servlet.xmlweb.xml ,它们之间有什么区别?
  • 如何 与GlassFish web.xml中 来自这两个有什么不同?
  • 我如何确定xml片段是否应该进入这些文件中的哪个文件而不在所有文件中都尝试直到它起作用?(到目前为止,我开发的粗略经验法则是“在 applicationContext.xml中 配置spring config,在 web.xml中 安装spring组件,忽略其他文件”!)

提前致谢,

提姆


问题答案:

web.xml 是应驻留在所有J2EE
Web应用程序中的文件。其规范由J2EE规范定义。在这里,您可以配置应用程序的常规行为。例如servlet,过滤器,安全策略等。

dispatcher-servlet 是Spring MVC框架中的特殊servlet。您必须在 web.xml中
定义其映射,才能在Web应用程序中启用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领域角色。

希望能帮助到你。