Вопрос

Куда бы я ни посмотрел, везде всплывают одни и те же объяснения.
Настройте распознаватель представлений.

<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" />

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top