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

В настоящее время у меня есть веб-приложение, в котором мы используем 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?


person user2032118    schedule 22.06.2015    source источник
comment
Я не верю, что ты сможешь.   -  person Sotirios Delimanolis    schedule 22.06.2015


Ответы (4)


При разработке приложения 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 без содержимого и многое другое.

Второй способ. Для домашней страницы статического 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";
    }
}
person Omkar Puttagunta    schedule 30.11.2015

Ты не можешь

Как указано в Документ Java

public interface WebApplicationInitializer

Interface, который будет реализован в средах Servlet 3.0+ для программной настройки ServletContext - в отличие от (или, возможно, в сочетании с) традиционным подходом на основе web.xml.

но вам все еще нужна минимальная конфигурация в web.xml, например, для

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
person Neeraj Jain    schedule 22.06.2015
comment
Хотя это правильный ответ (нельзя :)). Возможно, вы захотите добавить, что это на самом деле не связано со Spring, но тот факт, что он не реализован в `` ServletContext '', то есть подходе к настройке на основе Java для контейнеров сервлетов. Даже если не использовать Spring и использовать простой ServletContainerInitializer, это будет невозможно, по крайней мере, не зависимо от контейнера сервлетов. - person M. Deinum; 22.06.2015

@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");
}
...
}

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

person Kartik Mavani    schedule 22.06.2015

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

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