2014-09-25 20 views
6

Sto cercando di saperne di più sul modo in cui i percorsi vengono interpretati con un JSP.Barra URL relativa quando si usa il tag base

Quando si utilizza un tag base HTML in combinazione con un URL relativo, è abbastanza normale terminare la base href con una barra?

Il motivo che sto chiedendo è perché spesso ho bisogno di esprimere le cose in termini di root di contesto all'interno di un JSP (per un'azione del modulo per esempio), in modo che il modulo sia indirizzato al servlet appropriato come ho mappato in web.xml.

La maggior parte delle volte usavo solo ${pageContext.request.contextPath} ogni volta, fino a quando ho saputo del tag base.

Tuttavia, sto cercando di indovinare che, dal momento in una JSP la barra viene interpretato dal server come radice dell'applicazione web, non posso avere la mia base essere, ad esempio:

<base href="/foo"/> 

e poi nella forma hanno:

<form action="/extension"> 
... 
</form> 

perchè ciò causerebbe il modulo venga inviato al mydomain.com/extension anziché mydomain.com/foo/extension. Sto capendo correttamente, dal momento che lo slash ha un significato speciale, in genere è necessario terminare la base HREF con un backslash per ottenere l'effetto desiderato?

Grazie

risposta

7

Non proprio.

I browser non concatenano semplicemente gli attributi href di base e gli URL relativi. Invece, il tag <base> imposta l'URL base documento che viene quindi utilizzato per generare dinamicamente un nuovo percorso.

Si può vedere un esempio interessante nella specifica HTML WHATWG:

<base href="http://www.example.com/news/index.html"> 
<p>Visit the <a href="archives.html">archives</a>.</p> 

Nota che l'attributo href si conclude anche con un nome di file.

Ciò significa che se non si inserisce una barra finale sull'attributo href di base, foo verrà considerato come l'ultima parte volatile del percorso e verrà essenzialmente rimosso. A titolo di esempio:

<base href="http://www.example.com/news/index.html" /> 
<img src="ball.png" /> <!-- GET http://www.example.com/news/ball.png --> 

<base href="http://www.example.com/news/" /> 
<img src="ball.png" /> <!-- GET http://www.example.com/news/ball.png --> 

<base href="http://www.example.com/news" /> 
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png --> 

<base href="http://www.example.com/" /> 
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png --> 

<!-- If served from http://www.example.com: --> 
<base href="/" /> 
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png --> 
+0

ma non sarebbe l'esempio che prendere a http: // www. esempio. com/news/index.html/archives.html? – user1154644

+0

Questo è il punto, non lo sarebbe. Ti porterà a 'example.com/news/archives.html'. – Denis

+0

Vedo. Quindi quale sarebbe il vantaggio o la comunicazione di intenti da utilizzare: anziché Sembra che quest'ultimo sia più chiaro – user1154644

Problemi correlati