Pregunta

Estoy escribiendo un JSP / Servlet y estoy tratando de obtener la parte de anclaje del URI, por ejemplo:

blabla.rdf#mark

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

Cualquier ayuda sería bienvenida.

¿Fue útil?

Solución

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

Como ejemplo, esta es la solicitud exacta que Chrome generó después de enviar http://example.com/#foobar (grabado con 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

Mira, no #foobar. Por lo tanto, no hay forma de que una aplicación de servidor pueda leerlo.

Podrías 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 estés. Pero nunca funcionará para solicitudes que no se originen en sus propios sitios. Es más simple hacer que lo que necesite en el servidor forme parte de la cadena de consulta y usar el ancla solo para tareas solo de JavaScript, o usarlo para navegar dentro de un documento HTML simple, pero eso es tan 90s;).

Aquí está la parte importante del mencionado RFC 1808:

  

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

Otros consejos

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

Javascript window.location.hash proporciona la información de anclaje. Puede agregar un controlador de eventos al evento window.onload que toma window.location.hash y lo transmite al servidor en un Ajax XHttpRequest. Capturas la respuesta y la incorporas al DOM.

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

Más información sobre esto en ajaxpatterns .

Esta solución solo funcionaría después de presionar un botón de envío, pero: podría usar javascript para colocar un valor oculto en su formulario que esté establecido en el valor de document.location. Eso le dirá exactamente lo que el navegador ve como su dirección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top