1

好吧,这越来越荒谬了。

几天前我基本上问了这个问题,但无济于事。我已经尝试了来自各种网页的各种建议,但没有一个能让我到达我想去的地方。我一直在阅读令人讨厌的 Spring 文档,它让复杂的事情变得简单,让简单的事情变得复杂。

现在我学到了更多,也许我可以再一次表达自己的机会,希望更清楚。

我想要以下内容:一个使用 DispatcherServlet 的 Spring MVC 4.0 Web(不是 SpringBoot)应用程序,只要在浏览器中输入 基本 URL http://myserver.mycompany.com:8080/myapp ,它也会显示默认的 index.html 页面。

要求不必键入http://myserver.mycompany.com:8080/myapp/index.html即可访问此页面。

DispatcherServlet 会将诸如http://myserver.mycompany.com:8080/myapp/dothishttp://myserver.mycompany.com:8080/myapp/do/that之类的 URL 映射 到适当配置的控制器。

我知道这个问题已经在网上被问了一遍又一遍,答案都在 Spring 的细节中丢失了,而且在我的情况下似乎都没有。

换句话说,我想要非 Spring webapp 中的欢迎页面功能和同一个应用程序中的 Spring-MVC 调度程序功能。它不必在 web.xml 中配置。只要它像上面那样工作。

哦,最好我想要使用 Spring Annotations 的解决方案。

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

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

@Aeseir:是的,我也更喜欢 Java Config 方法,我在上面将其称为“Spring Annotations”。

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

4

2 回答 2

4

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

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

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

}
于 2015-06-27T20:38:18.720 回答
1

答案是 web.xml 中有一些安全过滤器。我以为我已经通过注释掉 spring xml 文件中的安全包含来关闭所有这些,但我想我必须关闭过滤器。直到我花时间从应用程序中删除所有 XML 以响应@JB_Nizet 的好示例时,我才意识到这一点。找到所有等效的 Java Config 注释需要一段时间,但是一旦我这样做了,它仍然不起作用,很容易发现过滤器是罪魁祸首并将其注释掉。当我们准备好安全措施时,我们会将其放回原处。

我不得不说,我发现在一个或两个 java 类中定位配置问题比在遍布各处的多个 xml 文件中定位更容易。

于 2015-06-30T11:54:53.853 回答