2010-05-04 12 views
6

Estamos en el proceso de migrar una aplicación jsp-only a Spring-MVC. Por diversas razones, no podemos cambiar la extensión de las páginas actuales. (las llamadas a login.jsp necesitan ser manejadas por un controlador de primavera que usará un archivo jsp como vista).¿Cómo puedo asignar un controlador de muelles a una url con la extensión .jsp?

Estamos haciendo esto de forma iterativa, por lo que algunas páginas deben permanecer en los archivos jsp (las llamadas a welcome.jsp no serán manejadas por un controlador).

Para hacer eso asigné tanto el DispatcherDervlet como el HandlerMapping a * .jsp, y configuré el JstlView de la manera estándar.

Por desgracia, si hojeo a //login.jsp me sale un error que dice

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

funciona todo si cambio .jsp a cualquier otra extensión en DispatcherServlet y 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> 

primavera-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> 

muchas gracias.

ACTUALIZACIÓN: Acabo de verificar que si cambio el nombre de mis archivos .jsp a otra cosa (.jst) y actualizo el viewResolver en consecuencia, entonces todo funciona. Aparentemente, si la vista se resuelve en un archivo con extensión .jsp, Spring intenta reenviar la vista a otro controlador.

Respuesta

2

si realmente no funciona con las extensiones .jsp (aunque personalmente no puedo ver ninguna razón para eso), puede intentar usar http://tuckey.org/urlrewrite/ para hacer una reescritura de las urls primero.

3

[robados descaradamente de http://forum.springsource.org/showthread.php?13263-Using-.jsp-extension]

Esto funcionó para mí. Trate de añadir esto a su archivo web.xml:

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

Tenga en cuenta que incluso con la información en el enlace, no entiendo por qué esto está ayudando. Si algún experto de Spring pudiera pasar y explicarlo, me encantaría saberlo.

Tampoco puedo garantizar que no haya problemas potenciales de seguridad/confiabilidad que esto pueda crear, por lo tanto, use bajo su propio riesgo.

Cuestiones relacionadas