Spring – 更改 DispatcherServlet 上下文配置文件名
DispatcherServlet充当基于 Spring 的 Web 应用程序的前端控制器。那么现在什么是前端控制器?所以这很简单。任何请求都将进入我们的网站,前端控制器将站在前面并接受所有请求,一旦前端控制器接受该请求,那么这就是前端控制器的工作,它将做出决定谁是处理该请求的正确控制者。例如,请参阅下图。假设我们有一个名为student.com的网站,客户端通过点击以下 URL“ student.com/save”请求保存学生数据,它首先到达前端控制器,一旦前端控制器接受该请求,它就会当该控制器处理 /save 操作的请求时,将分配给 Controller_1。然后它将响应返回给客户端。
在这篇文章中什么是 Spring 中的 Dispatcher Servlet?我们已经看到我们必须在src > main > webapp > WEB-INF中创建一个 DispatcherServlet 上下文配置文件。并且文件名必须是这种格式
YourServletName-servlet.xml
但是,如果我们将此格式名称更改为另一个格式名称会发生什么。我们可以更改 DispatcherServlet 上下文配置文件名吗?让我们通过一个例子来看看。
实施:项目
设置项目
Note: We are going to use Spring Tool Suite 4 IDE for this project. Please refer to this article to install STS in your local machine How to Download and Install Spring Tool Suite (Spring Tools 4 for Eclipse) IDE?
- 第 1 步:在您的 STS IDE 中创建一个动态 Web 项目。您可以参考这篇文章在 STS中创建动态 Web 项目:如何在 Spring Tool Suite 中创建动态 Web 项目?
- 第 2 步:从此链接下载 spring JAR 文件,然后转到src > main > webapp > WEB-INF > lib文件夹并通过这些 JAR 文件。
- 第 3 步:请参阅本文配置 Apache Tomcat 服务器并使用您的应用程序配置 Tomcat 服务器。现在我们准备好了。
配置 Dispatcher Servlet
第 4 步:现在转到src > main > webapp > WEB-INF > web.xml文件,在这里我们必须在
frontcontroller-dispatcher
org.springframework.web.servlet.DispatcherServlet
现在让我们告诉这个 servlet,嘿 servlet,你必须处理所有来到我们称为 student.com 的网站的请求(对于这个例子)。所以我们要告诉上面的 servlet 的方式是我们可以写这样的东西
frontcontroller-dispatcher
/student.com/*
所以这确实意味着 servlet “frontcontroller-dispatcher” 将处理从 student.com/anything 开始的所有请求,可能是 student.com/save 或 student.com/get,任何东西。但它必须从 student.com 开始。这样我们就完成了 Dispatcher Servlet 的创建。
文件:web.xml
XML
myfirst-mvc-project
index.html
index.jsp
index.htm
default.html
default.jsp
default.htm
frontcontroller-dispatcher
org.springframework.web.servlet.DispatcherServlet
frontcontroller-dispatcher
/student.com/*
XML
XML
myfirst-mvc-project
index.html
index.jsp
index.htm
default.html
default.jsp
default.htm
frontcontroller-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
frontcontroller-dispatcher
/student.com/*
现在,让我们运行我们的应用程序。要运行您的 Spring MVC 应用程序,请右键单击您的项目 > 运行方式 > 在服务器上运行并运行您的应用程序,如下图所示。
在这种情况下,您将获得以下异常
IOException parsing XML document from ServletContext resource [/WEB-INF/frontcontroller-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/frontcontroller-dispatcher-servlet.xml]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
所以从第一行,你可以看到它是一个Java.io.FileNotFoundException ,这意味着 Spring 正在里面寻找这个特定的文件frontcontroller-dispatcher-servlet.xml WEB-INF目录。所以现在让我们创建这个文件。
第 5 步:现在转到src > main > webapp > WEB-INF并创建一个 XML 文件。实际上,这是一个 Spring 配置文件,如 beans.xml 文件。并且文件名必须是这种格式。
YourServletName-servlet.xml
例如,对于这个项目,文件的名称必须是
frontcontroller-dispatcher-servlet.xml
So either you can create a Spring Configuration File or you can just create a simple XML file add the below lines of code inside that file.
文件:frontcontroller-dispatcher-servlet.xml
XML
项目文件结构将如下所示:
第 6 步:现在再次运行您的应用程序。现在在控制台中,您可以看到我们的 DispatcherServlet 已成功初始化,并且初始化完成,没有任何异常或错误。
但是我们可以提供另一个名字吗?是的,可以,但是如果要更改 DispatcherServlet 上下文配置文件名,则必须编写以下代码行。假设我们已将名称从frontcontroller-dispatcher-servlet.xml更改为dispatcher-servlet.xml那么我们必须编写类似这样的内容
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
输出说明:
例如,对于这个项目,我们可以编写如下内容:
frontcontroller-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
文件:web.xml
XML
myfirst-mvc-project
index.html
index.jsp
index.htm
default.html
default.jsp
default.htm
frontcontroller-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
frontcontroller-dispatcher
/student.com/*
修改后的项目文件结构如下。
第 7 步:现在再次运行您的应用程序。现在在控制台中,您可以看到我们的 DispatcherServlet 已成功初始化,并且初始化完成,没有任何异常或错误。