Как настроить ResourceBundleViewResolver в Spring Framework 2.0
-
01-07-2019 - |
Вопрос
Куда бы я ни посмотрел, везде всплывают одни и те же объяснения.
Настройте распознаватель представлений.
<bean id="viewMappings"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views" />
</bean>
А затем поместите файл в classpath с именем view.properties с некоторыми парами ключ-значение (не обращайте внимания на имена).
logout.class=org.springframework.web.servlet.view.JstlView
logout.url=WEB-INF/jsp/logout.jsp
Что делает logout.class
и logout.url
в смысле?
Как это происходит ResourceBundleViewResolver
использует пары ключ-значение в файле?
Моя цель состоит в том, чтобы, когда кто-то вводит URI myserver/myapp/logout.htm
файл logout.jsp
его обслужат.
Решение
ResourceBundleViewResolver использует ключ /vals в views.properties для создания компонентов представления (фактически созданных во внутреннем контексте приложения).Имя компонента view в вашем примере будет "logout", и это будет компонент типа JstlView.JstlView имеет атрибут с именем URL, которому будет присвоено значение "WEB-INF/jsp/logout.jsp".Аналогичным образом вы можете установить любой атрибут в классе view.
Чего вам, похоже, не хватает, так это вашего уровня контроллера / обработчика.Если вы хотите, чтобы /myapp/logout.htm обслуживал logout.jsp, вы должны сопоставить контроллер с /myapp/logout.htm, и этот контроллер должен возвращать имя представления "logout".Затем к ResourceBundleViewResolver будет обращен запрос на компонент с таким именем и вернет ваш экземпляр JstlView.
Другие советы
Чтобы ответить на ваш вопрос logout
это имя представления, полученное из объекта ModelAndView, возвращаемого контроллером.Если у вас возникли проблемы, вам, возможно, потребуется следующая дополнительная настройка.
Вам нужно добавить сопоставление сервлетов для *.htm
в вашем web.xml
:
<web-app> <servlet> <servlet-name>htm</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <oad-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>htm</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
И если вы хотите сопоставить непосредственно с *.jsp
без создания пользовательского контроллера вам нужно добавить следующий компонент в ваш контекст Spring:
<bean id="urlFilenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />