Как указать список файлов приветствия в WebApplicationInitializer.onStartup()

В настоящее время у меня есть веб-приложение, в котором мы используем web.xml для настройки приложения. В файле web.xml есть список файлов приветствия.

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

Мы планируем использовать Spring Framework и использовать класс Java для конфигурации приложения.

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

Как мне указать welcome-file-list в этом Java-классе?

3 ответа

При разработке приложения Spring MVC с использованием исключительно конфигурации на основе Java мы можем установить домашнюю страницу, сделав наш класс конфигурации приложения расширяющим класс 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 просмотр, который может быть использован в качестве домашней страницы. Не нужно создавать собственную логику контроллера для возврата к просмотру домашней страницы.

Метод JavaDoc для addViewControllers говорит:

Сконфигурируйте простые автоматизированные контроллеры, предварительно сконфигурированные с кодом состояния ответа и / или представлением для отображения тела ответа. Это полезно в тех случаях, когда нет необходимости в настраиваемой логике контроллера - например, рендеринг домашней страницы, выполнение простого перенаправления URL-адреса сайта, возвращение статуса 404 с содержимым HTML, 204 без содержимого и многое другое.

2-й способ - для домашней страницы статического HTML-файла мы можем использовать приведенный ниже код в нашем классе конфигурации. Он вернется index.html в качестве домашней страницы -

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

3-й способ - отображение запроса "/" ниже также вернет home просмотр, который может быть использован в качестве домашней страницы для приложения. Но вышеперечисленные способы рекомендуются.

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

Ты не можешь

Как указано в 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>
@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");
}
...
}

Это может помочь.

Это работает для меня...

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
}
Другие вопросы по тегам