Ottenere parametri hash dall’URL di richiesta

Ho questo URL – http://www.coolsite.com/daily-plan/#id=1 Qual è il modo più semplice per analizzare quella stringa e leggere un valore hash (il valore dopo # id =)? Grazie

Sul lato client (cioè da JavaScript) è ansible controllare window.location.hash per ottenere l’hash. Sul lato server, la risposta generale è “imansible” poiché l’hash non viene inviato in richiesta al server.

Aggiornamento: forse ho frainteso la domanda. La mia risposta riguarda come ottenere una parte hash dell’URL nel browser o nel codice lato server durante l’elaborazione della richiesta, non sull’elaborazione della stringa.

Upd2: rispondi al commento qui perché non si adatta al commento.

Come funziona quando l’utente fa clic sui tuoi collegamenti di navigazione?

Presumo che l’hash sia cambiato e che il contenuto corrispondente venga scaricato tramite la richiesta AJAX dal servizio web o REST.

Ad esempio se il tuo utente ha URL http://www.example.com nel suo browser e questa pagina mostra un elenco di categorie di prodotti. L’utente fa clic su una categoria e le modifiche dell’URL su http://www.example.com/#id=5 e i prodotti da quella categoria (con ID = 5) vengono scaricati tramite AJAX e visualizzati nella pagina. Nessun postback, solo parziale aggiornamento della pagina.

È vicino al tuo scenario?

Ora vuoi che l’utente incolli / entri http://www.example.com/#id=5 direttamente nella barra degli indirizzi del browser e vai direttamente all’elenco dei prodotti in quella categoria.

Ma / # id = 5 non viene inviato al server con richiesta dal browser, quindi non c’è modo di ottenere quel valore sul lato server, e non puoi farci nulla poiché è il browser che ha deciso di non inviare questi dati e tu non ce l’ho sul lato server.

Nel nostro progetto utilizziamo la soluzione quando il server restituisce solo codice / html di pagina comuni, ad esempio intestazione, piè di pagina, senza la parte principale / centrale della pagina. Poi c’è un codice JavaScript che viene eseguito subito dopo questo HTML comune caricato. Richiede window.location.hash e lo invia al servizio Web tramite AJAX e il servizio Web restituisce il contenuto (HTML) per la parte principale della pagina.

 new URI("http://.../abc#xyz").getFragment(); 

Vedi Javadocs per URI

 String url = " http://www.coolsite.com/daily-plan/#id=1"; int sharpPos = url.indexOf('#'); String q = null; if (sharpPos >= 0) { q = url.substring(sharpPos); } 

Sicuramente puoi usare vari metodi di manipolazione delle stringhe incluse le espressioni regolari.

Ma in realtà il tuo esempio è strano. In genere i parametri dell’URL vengono passati dopo il punto interrogativo. In questo caso puoi semplicemente utilizzare l’URL della class standard:

String q = new URL(" http://www.coolsite.com/daily-plan?id=1").getQuery();

cosa stai usando per fare questo?

Se stai usando jsp o servlet in seguito ti sarà utile

 if (request.getParameter("#id") == null) { out.println("Please enter your name."); } else { out.println("Hello "+request.getParameter(i)+"!"); } 

Se stai usando javascript per la funzione seguente ti sarà utile

 function getURLParameters() { var sURL = window.document.URL.toString(); if (sURL.indexOf("?") > 0) { var arrParams = sURL.split("?"); var arrURLParams = arrParams[1].split("&"); var arrParamNames = new Array(arrURLParams.length); var arrParamValues = new Array(arrURLParams.length); var i = 0; for (i=0;i 

Ecco come catturare i link di ancoraggio. Funziona su tutti i framework web.

Userò uno scenario di esempio per illustrare: diciamo che è necessario acquisire un URL profondo http://server.com / # / xyz richiesto da un utente non autenticato in modo che possano essere reindirizzati a tale deep post-login dell’URL.

  1. L’utente non autenticato richiede http://server.com / # / xyz (tutto dal “#” in poi non viene inviato al server).

  2. Tutto il server sa che l’utente vuole http://server.com/ e che non sono autenticati. Il server reindirizza l’utente a un modulo di accesso.

  3. Ecco la parte più intelligente: il client sta ancora aspettando la loro richiesta originale, quindi se il server include un elemento nascosto nel modulo di login con qualche JS che fa riferimento a window.location.href, può acquisire l’URL completo della richiesta originale completo con il porzione di ancoraggio:

     

  4. L’utente si autentica da sé e l’URL originale viene inviato con il POST. Il server può quindi ritrasmettere l’utente all’URL originale.

SOSTITUI il ‘#’ con ‘?’ quando si analizza l’url. Controlla il codice qui sotto

 String url = "http://www.coolsite.com/daily-plan/#id=1"; String urlNew = url.replace("#", "?"); String id = Uri.parse(urlNew).getQueryParameter("id"); 

Se l’URL è uguale a quello che scrivi e non contiene alcun altro, allora il codice whis su Java ti aiuterà

  String val = "http://www.coolsite.com/daily-plan/#id=1"; System.out.println(val.split("#id")[1]); 

Non dimenticare di verificare il valore nullo.

PS Se usi servlet puoi ottenere questo parametro da request.getAttribute (“id”).

Con i migliori saluti, Psycho