Spring mvc 如何将Spring MVC webapp设置为使用DispatcherServlet并具有index.html的默认页面

Spring mvc 如何将Spring MVC webapp设置为使用DispatcherServlet并具有index.html的默认页面,spring-mvc,welcome-file,Spring Mvc,Welcome File,好吧,这太荒谬了 几天前我问过了,结果一无所获。我尝试过各种各样的网页上的各种建议,但没有一个能让我达到我想要的目的。我已经阅读了所有令人讨厌的Spring文档,这些文档使复杂的事情变得越来越简单 现在我学到了一些东西,也许我可以再尝试一次表达自己的机会,希望能更清楚 我想要以下内容:一个使用DispatcherServlet的SpringMVC4.0Web(不是SpringBoot)应用程序,只要在浏览器中输入基本URL,它也会显示默认的index.html页面 这是一个要求,一个人不应该有类

好吧,这太荒谬了

几天前我问过了,结果一无所获。我尝试过各种各样的网页上的各种建议,但没有一个能让我达到我想要的目的。我已经阅读了所有令人讨厌的Spring文档,这些文档使复杂的事情变得越来越简单

现在我学到了一些东西,也许我可以再尝试一次表达自己的机会,希望能更清楚

我想要以下内容:一个使用DispatcherServlet的SpringMVC4.0Web(不是SpringBoot)应用程序,只要在浏览器中输入基本URL,它也会显示默认的index.html页面

这是一个要求,一个人不应该有类型进入这一页

DispatcherServlet将映射URL,如和 到适当配置的控制器

我知道这个问题已经在网络上被反复问过了,答案都在春天的细节中丢失了,而且在我的情况下,它们似乎都不起作用

换句话说,我希望在非Spring webapp中具有欢迎页面的功能,在同一应用程序中具有Spring MVC dispatcher的功能。它不必在web.xml中配置。只要它能像上面那样工作

哦,我更喜欢使用Spring注释的解决方案

简单的问题。我希望有人能给我一个简单的答案

更新:以下问题的答案: @JB_Nizet:你的建议是,使用spring文档中推荐的代码,在web.xml中定义欢迎页面,这是我一直在尝试的,但它不起作用。这是有道理的。Spring文档方法允许从/提供静态html文档。但它仍然阻止根url显示欢迎页面。您可以通过在url中提供index.html来访问index.html,但不会发生从/到/index.html的映射

@Aeseir:是的,我也更喜欢Java配置方法,我在上面称之为“Spring注释”


@莱茵兹:我会用我自己的一个问题来回答你的“愚蠢的问题”:我尝试了不同的方法来添加一个“只是映射到”的控制器/“,但我不明白这个控制器要做什么。如何编写一个只为index.html服务的控制器

如果您的
index.html
文件被用作静态资源,那么您可以使用以下配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:index.html");
  }

}

如果您的
index.html
文件被用作静态资源,则可以使用以下配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:index.html");
  }

}

答案是web.xml中有一些安全过滤器。我以为我已经通过注释掉SpringXML文件中包含的安全性来关闭所有这些,但我想我必须关闭过滤器。直到我花时间从应用程序中删除所有XML以响应请求,我才意识到这一点。找到所有等价的Java配置注释需要一段时间,但一旦我找到了,它仍然不起作用,就很容易发现过滤器是罪魁祸首并将其注释掉。当我们准备好加强安全时,我们会把它放回去


我不得不说,我发现在一个或两个java类中查找配置问题比在各地的几个xml文件中查找配置问题更容易。

答案是web.xml中有一些安全过滤器。我以为我已经通过注释掉SpringXML文件中包含的安全性来关闭所有这些,但我想我必须关闭过滤器。直到我花时间从应用程序中删除所有XML以响应请求,我才意识到这一点。找到所有等价的Java配置注释需要一段时间,但一旦我找到了,它仍然不起作用,就很容易发现过滤器是罪魁祸首并将其注释掉。当我们准备好加强安全时,我们会把它放回去


我不得不说,我发现在一个或两个java类中查找配置问题比在各地的几个xml文件中查找配置问题更容易。

谢谢。虽然我看过这一页,但它仍然让我困惑。我看不出在这个页面的何处显示了将默认应用程序url映射到index.html的内容。它丢失了一些信息,说明我虚弱的大脑没有在摸索。您必须编写一个定制的servlet来服务index.html吗?不需要。您只需使用文档中的代码(XML或Java配置),Spring就会将静态资源委托给默认的servlet。因此,它将提供来自webapp的静态资源,就像您根本没有使用Sring一样。默认页面在web.xml文件中配置,如servlet规范所述。默认情况下,index.html是默认页面之一。@SteveCohen在XML或Java配置中设置Spring MVC的格式是什么?我个人推荐Java Config,因为它的启动和运行变得非常简单,并提供了更大的灵活性。这可能是一个愚蠢的问题,但假设您的默认主页的控制器只映射到/?谢谢。虽然我看过这一页,但它仍然让我困惑。我看不出在这个页面的何处显示了将默认应用程序url映射到index.html的内容。它丢失了一些信息,说明我虚弱的大脑没有在摸索。您必须编写一个定制的servlet来服务index.html吗?不需要。您只需使用文档中的代码(XML或Java配置),Spring就会将静态资源委托给默认的servlet。因此,它将提供来自webapp的静态资源,就像您根本没有使用Sring一样。默认页面在web.xml文件中配置,如servlet规范所述。默认情况下,index.html是默认页面之一。@SteveCohen在XML或Java配置中设置Spring MVC的格式是什么?我个人推荐JavaConfig,因为它的启动和运行变得非常简单,并提供了更大的灵活性