<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
Se si preme /test/pagina, quanto sopra funzionerà. Tuttavia, premendo /test o /test/ non funzionerà. Sto utilizzando Spring MVC, e la mia mappatura richiesta è la seguente:In una mappatura servlet in Spring MVC come si esegue il mapping della radice di una directory di pattern URL?
@RequestMapping(value = {"","/"})
EDIT:
Sono nel processo di verifica con un progetto indipendente, ma questo sembra essere un bug con Spring's UrlPathHelper. Il seguente metodo restituisce un percorso errato quando c'è un contesto e un percorso servlet e si colpisce il servlet senza una barra finale.
public String getPathWithinApplication(HttpServletRequest request) {
String contextPath = getContextPath(request);
String requestUri = getRequestUri(request);
if (StringUtils.startsWithIgnoreCase(requestUri, contextPath)) {
// Normal case: URI contains context path.
String path = requestUri.substring(contextPath.length());
return (StringUtils.hasText(path) ? path : "/");
}
else {
// Special case: rather unusual.
return requestUri;
}
}
A titolo di esempio diciamo che ho un contesto di "admin" e la seguente servlet-mapping:
<servlet-mapping>
<servlet-name>usersServlet</servlet-name>
<url-pattern>/users/*</url-pattern>
</servlet-mapping>
Ora ho una mappatura richiesta in uno dei miei controllori come questo:
@RequestMapping(value = {"","/"})
Se colpisco /admin/utenti non funzionerà. Tuttavia, se colpisco /admin/users/ funzionerà. Ora, se cambio la mappatura richiesta al seguente allora saranno sia il lavoro:
@RequestMapping(value = {"/users","/"})
Tuttavia, ora le URL /admin/utenti/utenti potranno anche lavorare (che non è quello che vorrei).
Il problema non è con l'utilizzo di un percorso di root. Se utilizzo un percorso root, vado sempre con '/ url-pattern>' e '@RequestMapping (value = {" ","/"})'. Non ho mai avuto un problema con questo, e sto usando Tiles 2 e Spring MVC 3. Il problema è con la specificazione di un percorso servlet prima. Ogni volta che si specificano le informazioni sul percorso del servlet, il mapping delle richieste di Spring è tutto ciò che segue. Quindi tecnicamente, la stessa mappatura delle richieste dovrebbe funzionare perché è la radice del percorso del servlet. Tuttavia, questo non sembra essere il caso. –