Как указать список файлов приветствия в 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");
}