2010-02-25 18 views
5

Tengo una aplicación Spring 2.5 que contiene un banner Flash. No tengo la fuente para el componente Flash pero tiene enlaces codificados en ciertas páginas que terminan en .html Quiero poder redirigir esas páginas .html a páginas jsp existentes. ¿Cómo puedo hacer que Spring resuelva unas pocas páginas .html en páginas .jsp?Spring - Reescribe una URL a otra

Mi proyecto se parece a:

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

Quiero localhost:8080/offers.html para redirigir a localhost:8080/sample.jsp

¿Puedo hacer esto con la primavera? Ya tengo un SimpleUrlHandlerMapping y un UrlFilenameViewController definidos en el myapp-servlet.xml que debe continuar sirviendo las páginas en las que ya se encuentra.

En mi web.xml, tengo

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

actualización

Aquí es el mapeador de URL. Si agrego un controlador, ¿cómo devuelvo la vista de jsp que está en el directorio de WebContent ya que la resolución de vista incluye el directorio/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> 
+0

UrlFilenameViewController sólo se resolverá un patrón de una URL a un nombre de archivo, no se puede "mapa" de la ruta de un archivo diferente. Si desea asignar /offers.html a una vista sample.jsp, necesitará un controlador que maneje el patrón /offers.html y devuelva sample.jsp como vista. ¿Puedes publicar tu SimpleUrlHandlerMapping desde myapp-servlet.xml? –

+0

@Rob Beardow - Actualizado con SimpleUrlHandlerMapping y InternalResourceViewResolver – George

Respuesta

16

Creo que podría beneficiarse de la biblioteca de reescritura de URL de código abierto hecha por tuckey.org. Los chicos de SpringSource apoyan esta biblioteca, ya que está configurada para usted automáticamente si utiliza Spring Roo para crear un proyecto, por lo que es de buena calidad. Lo he usado con éxito en una serie de proyectos.

Ver here para su página de inicio. Y Skaffman tiene razón, quiere que 'reenvíe' en lugar de redirigir, que es el comportamiento predeterminado.

configurarlo en web.xml así:

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

Luego, en WEB-INF/urlrewrite.xml tener un elemento de esta manera:

<rule> 
    <from>offers.html</from> 
    <to>offers.jsp</to>  
</rule> 
+0

@ mirror303 - Gracias. Esto funcionó perfectamente y tardó unos 10 segundos en configurarse. – George

1

En primer lugar, asumo que cuando dices "redirigir", realmente quieres decir "adelante". Los redireccionamientos HTTP no serían apropiados aquí.

SO dado que, aquí hay algunas cosas para probar:

  • ¿No puedes mover los archivos JSP de WebContent en /WEB-INF/jsp/? No tendría que cambiar la definición ViewResolver, entonces.

  • Se podría tratar de tener los controladores devuelven un nombre de vista de algo así como ../../another.jsp, y esperan que el contenedor de servlets resuelve a /WEB-INF/jsp/../../another.jsp a /another.jsp.

  • El ViewResolver solo se consulta si los controladores devuelven el nombre de una vista. Sus controladores no tienen para devolver el nombre de una vista, pueden devolver un objeto View directamente, en este caso un JstlView. Esto puede apuntar a cualquier JSP que desee. Puede que algunos controladores devuelvan nombres de vista y devuelvan View objetos.

  • Elimine la propiedad prefix de su resolución de la vista. Esto significa que también deberá cambiar todos los controladores existentes, para agregar un prefijo a cada nombre de vista que devuelvan con /WEB-INF/jsp/. Luego, puede referirse a los JSP bajo WebContent por su nombre.

5

me gustaría utilizar PrettyFaces OCPsoft o OCPsoft reescribir para esto:

Con PrettyFaces:

crear WEB-INF/bastante-config.xml

<url-mapping> 
    <pattern value="/offers.html" /> 
    <view-id value="/offers.jsp" /> 
</url-mapping> 

Con Rewrite:

ConfigurationBuilder.begin() 
    .addRule(Join.path("/offers.html").to("/offers.jsp")); 

espero que esto ayude.

~ Lincoln

+0

También puede usar su configuración Tuckey existente con Rewrite a través del módulo rewrite-integration-tuckey. – Lincoln

+0

Lincoln es el fundador de OCPsoft, el autor de PrettyFaces and Rewrite. Deberías mencionar que tu respuesta es parcial. – Janning

+4

Mi respuesta es parcial. – Lincoln

Cuestiones relacionadas