Как я могу сопоставить пружинный контроллер с URL-адресом с расширением .jsp? - PullRequest
6 голосов
/ 04 мая 2010

Мы находимся в процессе миграции приложения только для jsp в Spring-MVC. По разным причинам мы не можем изменить расширение текущих страниц. (вызовы login.jsp должны обрабатываться контроллером Spring, который будет использовать файл jsp в качестве представления).

Мы делаем это итеративно, поэтому на некоторых страницах должны оставаться файлы jsp (вызовы welcome.jsp не будут обрабатываться контроллером).

Для этого я сопоставил DispatcherDervlet и HandlerMapping с * .jsp и настроил JstlView стандартным способом.

К сожалению, если я перехожу на //login.jsp, я получаю сообщение об ошибке

<No mapping found for HTTP request with URI [/<context>/WEB-INF/jsp/login.jsp] in DispatcherServlet with name 'spring'>

Все это работает, если я изменяю .jsp на любое другое расширение в DispatcherServlet и HandlerMapping.

web.xml:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

весна-servlet.xml:

<!-- View resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!-- URL Mapping -->
<bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
        <map>
            <entry key="/login.jsp" value-ref="loginController"/>
        </map>
    </property>
</bean>

Большое спасибо.

ОБНОВЛЕНИЕ : Я только что проверил, что если я переименую мои файлы .jsp во что-то другое (.jst) и соответствующим образом обновлю viewResolver, то все это будет работать. Очевидно, если представление разрешено в файл с расширением .jsp, Spring пытается переслать представление на другой контроллер.

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

[явно украдено у http://forum.springsource.org/showthread.php?13263-Using-.jsp-extension]

Это сработало для меня. Попробуйте добавить это в свой файл web.xml:

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/jsp/*</url-pattern>
</servlet-mapping>

Обратите внимание, что даже с информацией в ссылке, я не понимаю, почему это помогает. Если бы какой-нибудь весенний эксперт мог зайти и объяснить это, я бы хотел знать.

Я также не могу гарантировать отсутствие потенциальных проблем с безопасностью / надежностью, поэтому используйте на свой страх и риск.

2 голосов
/ 04 мая 2010

если он действительно не работает с расширениями .jsp (хотя я лично не вижу никакой причины для этого), вы можете попробовать использовать http://tuckey.org/urlrewrite/, чтобы сначала переписать URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...