Spring - Переписывает один URL другому

У меня есть приложение Spring 2.5, которое содержит баннер Flash. У меня нет источника для компонента Flash, но он имеет ссылки hardcoded к определенным страницам тот конец в .html Я хочу смочь перенаправить те .html страницы к существующим jsp страницам. Как у меня может быть твердость Spring несколько .html страниц к .jsp страницам?

Мой проект похож:

WebContent
 |
 -sample.jsp
 -another.jsp
  WEB-INF
  |
  -myapp-servlet.xml
  -web.xml

Я хочу localhost:8080/offers.html перенаправить к localhost:8080/sample.jsp

Я могу сделать это с Spring? У меня уже есть SimpleUrlHandlerMapping и UrlFilenameViewController, определенный в myapp-servlet.xml, который должен продолжить служить страницам, которые это уже.

В моем web.xml я имею

<servlet-mapping>
  <servlet-name>myapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

Обновление

Вот картопостроитель URL. Если я добавляю контроллер, как я возвращаю представление jsp, которое находится в каталоге WebContent, поскольку сопоставитель представления включает/WEB-INF/jsp каталог.

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <props>
      <prop key="/page1.htm">page1Controller</prop>
      <prop key="/page2.htm">page2Controller</prop>
    </props>
  </property>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
</bean>
5
задан Lincoln 26 November 2011 в 16:32
поделиться

2 ответа

Я думаю, вы могли бы извлечь выгоду из библиотека для перезаписи URL с открытым исходным кодом, созданная tuckey.org. Ребята из SpringSource одобряют эту библиотеку, поскольку она настраивается автоматически, если вы используете Spring Roo для создания проекта, поэтому она хорошего качества. Я успешно использовал его в ряде проектов.

См. здесь для его домашней страницы. И Скаффман прав, вы хотите, чтобы он «пересылал», а не перенаправлял, что является поведением по умолчанию.

Настройте его в web.xml следующим образом:

<filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

Затем в WEB-INF / urlrewrite.xml добавьте такой элемент:

<rule>
    <from>offers.html</from>
    <to>offers.jsp</to>     
</rule>
16
ответ дан 18 December 2019 в 07:08
поделиться

Во-первых, я предполагаю, что когда вы говорите «перенаправить», вы действительно имеете в виду «вперед». HTTP-перенаправления здесь не подходят.

Итак, вот несколько вещей, которые стоит попробовать:

  • Не могли бы вы просто переместить файлы JSP из WebContent в / WEB-INF / jsp / ? Тогда вам не придется изменять определение ViewResolver .

  • Вы можете попытаться заставить контроллеры возвращать имя представления, например ../../ another.jsp , и надеяться, что контейнер сервлета преобразуется в / WEB-INF / jsp /../../another.jsp - /another.jsp .

  • ViewResolver используется только в том случае, если контроллеры возвращают имя представления. У ваших контроллеров нет для возврата имени представления, они могут напрямую возвращать объект View , в данном случае JstlView . Это может указывать на любой понравившийся вам JSP. Некоторые контроллеры могут возвращать имена представлений, а некоторые - объекты View .

  • Удалите свойство префикса из преобразователя представлений. Это означает, что вам также придется изменить каждый существующий контроллер, чтобы каждое возвращаемое имя представления было префиксом / WEB-INF / jsp / . Затем вы можете ссылаться на JSP в WebContent по имени.

1
ответ дан 18 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: