2012-04-19 19 views
5

Ho impostato il servlet spring-mvc in modo che corrisponda alle richieste * .pag.. Ho installato il benvenuto-file-list in web.xml per essere index.pagefile di benvenuto in web.xml con molla non funzionante?

Questo funziona quando vado alla radice del mio webserver:

http://me.com venga reindirizzato correttamente http://me.com/index.page.

Tuttavia, non reindirizza quando uso subdirectoris:

http://me.com/dashboard fa non reindirizzati http://me.com/dashboard/index.page

Esiste un modo per ottenere questo lavoro di mappatura?

Il mio file web.xml (estratto):

<welcome-file-list> 
    <welcome-file>index.page</welcome-file> 
</welcome-file-list> 

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

mio webdefault.xml (dal molo):

<init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>welcomeServlets</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>redirectWelcome</param-name> 
     <param-value>false</param-value> 
    </init-param> 

risposta

3

Esso funziona solo per i reali, directory fisiche, non non lo farà lavoro per mappature servlet arbitrarie che simulano la struttura delle directory.

Spring MVC permette mappature URL molto complessi, quindi è meglio gestire questo scenario con @RequestMapping

+0

Ciao Bozho. Sei sicuro? La documentazione http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html#1026980 fa sembrare che le directory debbano essere supportate. –

+0

potrebbe essere il modo in cui sono stati implementati in WebLogic. Ma i moli probabilmente stanno interpretando lo standard in modo diverso. Provalo in un'applicazione completamente nuova, senza molla, solo per testare – Bozho

+0

Ha funzionato in una nuova applicazione di primavera. Tuttavia, la differenza è che avevo i file reali nelle directory reali, invece di puntare ai servlet. Forse questo è il problema ... –

0

Questo è qualcosa che è necessario probabilmente per impostare nel server web, e così, forse server specifico

Per Apache HTTP Server è possibile raggiungere questo impostando la direttiva DirectoryIndex in questo modo: DirectoryIndex index.page

a quanto pare, qualcuno ha già fatto questa domanda, ed ha accettato una risposta a web.xml default file in directory (for jetty, or tomcat)? - vedere se funziona per voi.

+0

Ciao Ryan. Questo è quello che sto facendo al momento, ma sfortunatamente funziona solo alla radice del contesto, e non nelle sottodirectory. –

12

Il <welcome-file> devono rappresentare un file fisicamente esistente in una cartella arbitraria che si desidera servire ogni volta che l'utente finale richiede una cartella (ad esempio la radice /, ma può anche essere una qualsiasi altra cartella come /foo/). Devi solo capire che il servlettaintainer testerà la sua esistenza fisica prima di eseguire un forward, se non esiste allora verrà restituito un errore HTTP 404 non trovato nella pagina.

Nel tuo caso particolare, non hai un file fisico index.page nella cartella principale. Hai effettivamente un file index.jsp nella cartella principale. Il index.page è semplicemente un URL virtuale. Così il servletcontainer non sarà in grado di trovare il file fisico index.page e quindi errore fuori con un 404.

È possibile risolvere questo ingannare il servletcontainer posizionando un file fisicamente esistente index.page accanto al file index.jsp nella stessa cartella . Quel file può essere semplicemente tenuto completamente vuoto. Il servlettaintainer troverà il file e quindi inoltrerà a index.page, che invocherà quindi il servlet controller che a sua volta servirà effettivamente come index.jsp come vista. Funzionerà bene.

+0

Ciao BalusC. C'è un parametro speciale in webdefault.xml nel molo chiamato welcomeServlets. Se si imposta su true, quindi Jetty cercherà un servlet che soddisfi il file di benvenuto se non esiste un file fisico. Ho impostato su true, e ha funzionato per il contesto di root, ma purtroppo non funziona per le sottodirectory. –

+0

Creare un file vuoto per ingannare il contenitore è un po 'geniale. Grazie! – Kal

+0

Sei un genio. –

2

Per evitare di inoltrare il file di benvenuto, è meglio aggiungerlo per mapparlo.

<servlet-mapping> 
    <servlet-name>spring-mvc</servlet-name> 
    <url-pattern>index.html</url-pattern> 
    </servlet-mapping> 

E in caso di configurazione di Java è possibile ignorare due metodi nella classe che estende WebMvcConfigurerAdapter

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/").setViewName("/index"); 
} 

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

se si vuole servire index.html in modo esplicito, trasformarlo in una risorsa eseguire l'override un metodo nella stessa classe come di seguito:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html"); 
} 

Naturalmente addResourceLocations mosto segue la cartella scelto di tenere le vostre opinioni.

Vedi these samples

Problemi correlati