2009-12-04 15 views
6

In Struts 1 si potrebbe avere, in struts-config.xml, una dichiarazione del tipo:C'è un modo per mappare un URL a un altro URL in primavera?

<action path="/first" forward="/second.do"> 

è qualcosa di simile anche possibile, in primavera, o posso mappare un URL solo per un controllore? Sto usando Spring 2.5.x.

ho potuto fuori rotta mappare l'URL per lo stesso controller come:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/first.do">theController</prop> 
     <prop key="/second.do">theController</prop> 
     ... 

O forse utilizzare il org.springframework.web.servlet.mvc.ParameterizableViewController e avere qualcosa di simile:

<bean id="theDummyController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
    <property name="viewName" value="forward:second.do"/> 
</bean> 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/first.do">theDummyController</prop> 
     <prop key="/second.do">theController</prop> 
     ... 

So che potrei essere complicare le cose e io dovrei limitarmi alle cose semplici che fanno il lavoro, ma vorrei che fosse più simile a una dichiarazione del tipo: "questo URL è in realtà una scorciatoia (o pseudonimo) a questo altro URL" (non chiedere perché ... lunga storia ...) che è in qualche modo visibile con lo ParameterizableViewController ma non completamente.

Quindi, è possibile?

Grazie!

risposta

1

fine ho finito per creare un mapping del gestore URL separato dove ho raggruppato insieme gli alias URL. Ho poi fatto ricorso ad una descrizione molto dettagliata di ciò che le mappature contenute sono tutti circa, qualcosa come:

<bean id="aliasUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <description> 
    <![CDATA[ 
     The following URLs are in fact shortcuts (or aliases) 
     to other URLs etc etc (...I'll spare you the ugly part) 
    ]]> 
    </description> 
    <property name="mappings"> 
    <props> 
     <prop key="/first.do">theController</prop> 
     ... 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/second.do">theController</prop> 
     ... 
0

Non ho familiarità con Spring MVC per conoscere il modo più semplice per fare ciò che si desidera. Tuttavia, lo UrlRewriteFilter project semplifica l'impostazione delle regole per l'inoltro di un URL a un altro URL.

0

È possibile creare facilmente qualcosa che consente di specificare "questo URL è in realtà un collegamento (o un alias) a questo altro URL" implementando HandlerInterceptor e la propria implementazione contiene una proprietà che è una mappa di URL che devono essere reindirizzati, o avanti, ad altri URL.

Nel proprio XML è sufficiente aggiungere un bean per questo intercettore e configurarlo quali URL devono reindirizzare a cosa e aggiungere un riferimento all'intercettore alla proprietà di intercettatori di SimpleUrlHandlerMapping.

+0

Pensavo anche di aggiungere un intercettore che cattura un URL e lo inoltra ad un altro, poi tornare falso di rompere il catena di esecuzione. Ma il mapping del gestore non deve risolvere una catena di esecuzione per la richiesta in entrata? Solo allora il DispatcherServlet eseguirà il gestore e gli intercettori trovati nella catena restituita. Quindi devo mappare l'URL a "qualcosa" e quindi lasciare che l'intercettatore gestisca il resto. Ma a cosa lo mappo? –

+0

In realtà non sono sicuro che il gestore debba avere una mappatura per ogni URL prima che tu possa farlo a un intercettore, ma se lo fa: mappa * su una pagina 404 (non trovata) e dovresti essere bravo ... –

0

Consiglierei di gestire le regole basate su URL al di fuori dei file di configurazione di Spring? Mantieni i file di configurazione di Spring puliti e riscrivi/gestisci i tuoi URL all'esterno. Dai uno sguardo a http://tuckey.org/urlrewrite/.

Spero che aiuta,

-florin

Problemi correlati