在使用基于纯Java的配置而不是web.xml开发spring mvc应用程序时如何设置welcome-file?

Omk*_*kar 2 configuration spring spring-mvc welcome-file

我正在使用Spring MVC开发一个Web应用程序,它基于纯Java,没有web.xml配置.我编写了下面的类来加载bean并设置url模式.如何设置welcome-file?

public class MyAppWebAppIntializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext appCtx = new AnnotationConfigWebApplicationContext();
        appCtx.register(ApplicationContextConfig.class);

        Dynamic dispatcher = servletContext.addServlet(
                "SpringDispatcher", new DispatcherServlet(appCtx));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}
Run Code Online (Sandbox Code Playgroud)

Omk*_*kar 5

在使用纯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");
  }

}
Run Code Online (Sandbox Code Playgroud)

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

用于addViewControllers方法的JavaDoc 说 -

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

第二种方式 - 对于静态HTML文件主页,我们可以在配置类中使用以下代码 -

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

第三种方式 - 下面的请求映射"/"也将返回home.jsp,它可以作为应用程序的主页.但建议采用上述流程.

@Controller
public class UserController {

    @RequestMapping(value = { "/" })
    public String homePage() {
        return "home";
    }

}
Run Code Online (Sandbox Code Playgroud)