📜  Spring – 更改 DispatcherServlet 上下文配置文件名

📅  最后修改于: 2022-05-13 01:55:32.423000             🧑  作者: Mango

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 上下文配置文件名吗?让我们通过一个例子来看看。

实施:项目

设置项目

  • 第 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

文件:frontcontroller-dispatcher-servlet.xml

XML



 

项目文件结构将如下所示:

项目结构

第 6 步:现在再次运行您的应用程序。现在在控制台中,您可以看到我们的 DispatcherServlet 已成功初始化,并且初始化完成,没有任何异常或错误。

但是我们可以提供另一个名字吗?是的,可以,但是如果要更改 DispatcherServlet 上下文配置文件名,则必须编写以下代码行。假设我们已将名称从frontcontroller-dispatcher-servlet.xml更改为dispatcher-servlet.xml那么我们必须编写类似这样的内容


     contextConfigLocation
       /WEB-INF/dispatcher-servlet.xml

输出说明:

是存储在 web.xml 文件中的静态参数。如果您有任何不经常更改的数据,您可以将其存储在其中一个中。如果要存储限制在特定 servlet 范围内的特定数据,则可以使用 。您在 中声明的任何内容都只能由该特定 servlet 访问。 init-param 在 标记内声明。

例如,对于这个项目,我们可以编写如下内容:


      
    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 已成功初始化,并且初始化完成,没有任何异常或错误。