18

目前我有一个 Web 应用程序,我们在其中使用 web.xml 来配置应用程序。web.xml 具有欢迎文件列表。

<web-app>  
   ...
   <welcome-file-list>  
     <welcome-file>home.html</welcome-file>  
   </welcome-file-list>  
</web-app>  

我们计划使用spring框架并使用java类进行应用程序配置。

class MyApplication extends WebApplicationInitializer {
    public void onStartUp(ServletContext context){
        ...
    }
}

如何在这个 java 类中指定welcome-file-list?

4

4 回答 4

19

在使用纯 Java Based Configuration 开发 Spring MVC 应用程序时,我们可以通过使我们的应用程序配置类扩展WebMvcConfigurerAdapter类并覆盖addViewControllers方法来设置主页,我们可以在其中设置默认主页,如下所述。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.myapp.controllers" })
public class ApplicationConfig extends WebMvcConfigurerAdapter {

  @Bean
  public InternalResourceViewResolver getViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/view/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
  }

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");
  }

}

它返回home.jsp可以用作主页的视图。无需创建自定义控制器逻辑即可返回主页视图。

addViewControllers方法的 JavaDoc说 -

配置预先配置了响应状态代码和/或视图以呈现响应正文的简单自动化控制器。这在不需要自定义控制器逻辑的情况下很有用——例如呈现主页、执行简单的站点 URL 重定向、返回带有 HTML 内容的 404 状态、没有内容的 204 等等。

第二种方式- 对于静态 HTML 文件主页,我们可以在我们的配置类中使用下面的代码。它将index.html作为主页返回 -

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

第三种方式- 下面的请求映射“/”也将返回home视图,该视图可用作应用程序的主页。但推荐以上方式。

@Controller
public class UserController {
    @RequestMapping(value = { "/" })
    public String homePage() {
        return "home";
    }
}
于 2015-11-30T09:52:11.357 回答
9

你不能

Java Doc中所述

public interface WebApplicationInitializer

Interface在 Servlet 3.0+ 环境中实现,以便以编程方式配置 ServletContext——与传统的基于 web.xml 的方法相反(或可能结合)。

但是您仍然需要在 web.xml 中进行最少的配置,例如

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
于 2015-06-22T05:45:54.043 回答
5
@EnableWebMvc
@Configuration
@ComponentScan("com.springapp.mvc")
public class MvcConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/*.html").addResourceLocations("/WEB-INF/pages/");
}

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

这可能会有所帮助。

于 2015-06-22T05:48:18.450 回答
0

this works for me...

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
}
于 2020-07-09T20:56:27.650 回答