2009-10-28 8 views
9

Estoy escribiendo un JSP/servlet y yo estoy tratando de llegar a la parte del anclaje de la URI por ejemplo:anclaje de URI

blabla.rdf#mark 

¿Cómo consigo mi marca de mi solicitud? Obviamente request.getParameter() no funciona?

Cualquier ayuda sería bienvenida.

+0

Aquí hay una pregunta similar para PHP, con una respuesta similar al upvoted: http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php –

Respuesta

19

Esto no es posible ya que los clientes no envían la "parte ancla" al servidor

A modo de ejemplo, aquí está la solicitud exacta que Chrome genera después de la presentación de http://example.com/#foobar (grabado usando Wireshark):

GET/HTTP/1.1 
Host: example.com 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.11 Safari/532.3 
Cache-Control: max-age=0 
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
If-None-Match: "b300b4-1b6-4059a80bfd280" 
If-Modified-Since: Tue, 15 Nov 2005 13:24:10 GMT 

See, no #foobar. Entonces no hay forma de que una aplicación de servidor pueda leerlo.

Puede hacer algo de magia de JavaScript para almacenar el ancla en una cookie o en un campo de entrada oculto o en cualquier vudú en el que se encuentre. Pero nunca funcionará para solicitudes que no se originen en sus propios sitios. Es más sencillo hacer lo que necesite en el servidor como parte de la cadena de consulta y usar el delimitador solo para tareas solo de JavaScript, o usarlo para navegar dentro de un documento HTML simple, pero eso es tan 90s;).

Aquí es la parte importante de la mencionada RFC 1808:

Tenga en cuenta que el identificador de fragmento (y el "#" que le precede) es parte no se considera de la URL. Sin embargo, dado que se usa comúnmente dentro del mismo contexto de cadena como una URL, un analizador debe ser capaz de reconocer el fragmento cuando está presente y dejarlo de lado como parte de el proceso de análisis sintáctico.

+0

Para obtener información , el [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt) que explica por qué la parte de anclaje no se envía al servidor. –

0

Esta solución sólo funcionaría después de un botón de envío ha sido empujado, pero: se puede usar javascript para colocar un valor oculto en el formulario que se establece en el valor de document.location. Eso le diría exactamente lo que el navegador está viendo como su dirección.

2

Supongo que quiere hacer una aplicación web Ajax y desea reemplazar ciertos fragmentos del DOM sin tener que volver a cargar la página completa. (De lo contrario, podría usar parámetros de consulta.) Como sfussenegger menciona, el navegador no transmite 'ancla' al servidor. La solución está en el lado del cliente.

Javascript window.location.hash da la información de ancla. Puede agregar un manejador de eventos al evento window.onload que toma window.location.hash y lo transmite al servidor en una Ajax XHttpRequest. Capturas la respuesta y la construyes en el DOM.

Desafortunadamente, son dos viajes de ida y vuelta cliente-servidor.

Más sobre esto en ajaxpatterns.

Cuestiones relacionadas