Как настроить Spring Сontroller возвращать либо html, либо jsp

Рейтинг: 1Ответов: 1Опубликовано: 16.02.2015

Мне нужно, чтобы определённые контроллеры возвращали .html, другие же - .jsp. Проблема в InternalResourceViewResolver - у него указан суффикс:

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

Как видно, он всегда приклеит окончание .jsp. Удалил суффикс, добавил

<mvc:resources mapping="/static/**" location="/static/" />

в свой xml конфиг, как сказано здесь, на SO, но страница html не вызывается вообще. Как я ни пытался делать запрос - static/page.html и т.д.

И ещё один вопрос:

В некоторых гайдах в файле-конфиге DispatcherServlet (web.xml) имеется такой маппинг:

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Но а в некоторых элемент <url-pattern>/</url-pattern> имеет значение *.htm вместо слэша. Что означают эти значения и какая разница между ними?

Ответы

▲ 2Принят

Есть, как минимум, два варианта:

1) через view resolver-ы. В этом случае вам нужно определить два разных view resolver-а, один будет искать JSP-файлы (как сейчас), а второй HTML-файлы. И задать им различные приоритеты. Тогда сначала будет вызываться один резолвер и если он не найдет соответствующего файла, то передаст управление другому, тот найдет и вернет что нужно. Но в этом случае для каждого HTML-файла также придется создать по методу в контроллере (либо написать несколько <mvc:view-controller/>)

2) раздавать html-файлы сами по себе, через <mvc:resources/> В этом случае укажите <mvc:resources mapping="/static/**" location="/WEB-INF/static/" /> и положите ваши html-файлы в src/main/webapp/WEB-INF/static

На второй вопрос, вижу, вам уже ответили.