2013-03-22 12 views
6

Sono nuovo di JSP. Ho una pagina jsp in cui un parametro viene passato a questa pagina jsp con http post. Riesco a vedere il parametro in firebug come puoi vedere nell'immagine. enter image description hereCome ottenere il parametro HTTP post in JSP

Ma nella mia pagina quando provo a stampare la variabile token la variabile è sempre nullo. Stampo la variabile come segue:

 <% 
     String token = request.getParameter("token"); 
    %> 

Cosa sto facendo male? Come posso ottenere il parametro token?

+0

Come stai stampando il valore ? – Mohsin

+0

Questo non stampa nulla, fa esattamente quello che dice, ottiene il valore. –

+0

Sto stampando il valore <%= token %> –

risposta

4

L'attributo token è simile a nonce e un filtro di sicurezza potrebbe rimuovere il valore dall'oggetto richiesta.

Quello che hai fatto per stampare il valore è assolutamente corretto. Non sto andando per le migliori pratiche, ma dovrebbe funzionare.

Controllare il codice per il filtro di sicurezza e vedere se è possibile scoprire dove il valore viene rimosso/sostituito.

Dopo aver visto il tuo web.xml.

Il valore viene passato al dominio tramite POST. La richiesta viene reindirizzata internamente per dare il benvenuto alla pagina e il valore viene perso. Se si passa il valore utilizzando GET, il valore verrà mantenuto.

Sono disponibili due opzioni:

  1. creare un URL diretto e passare il valore ad esso utilizzando il post come si sta facendo. Ad esempio: url - yourdomain.com/welcome.jsp.
  2. Chiedere all'altro progetto di passare il parametro nell'url (richiesta GET).

Ho provato entrambi e funziona perfettamente.

+0

Ciao, questa era una cosa che non ho controllato. grazie per la tua risposta in un primo momento. Ho appena controllato il mio file web.xml ma non ho potuto vedere alcun filtro sul mio file web.xml. c'è qualcosa che posso controllare per altri filtri? ogni altro aiuto sarà grande pure. –

+1

È necessario fornire maggiori informazioni su quali framework si sta utilizzando. Il tuo web.xml dovrebbe fornire qualche suggerimento. Se è OK, puoi postarlo. –

+0

puoi darmi il tuo indirizzo e-mail. preferisco pubblicarlo sulla tua e-mail piuttosto che pubblico a causa di alcuni problemi di sicurezza. –

0

è possibile stampare come

${param.token} 

Questo stamperà il valore

+0

grazie. Ho già stampato la variabile token in modo simile ma è sempre nullo. –

+0

In realtà si tratta di un parametro di richiesta. È necessario impostare nuovamente la richiesta nel servlet – PSR

+0

dove si sta impostando tale parametro nella richiesta – PSR

1

L'idioma preferito per questo sarebbe quella di utilizzare un servlet dalla forma, non un JSP. In seguito, la servlet può utilizzare una JSP come vista. Uno dei motivi è evitare di fare ciò che sembra fare: inserire il codice java sulla pagina e probabilmente mescolare la presentazione con la logica.

Tuttavia, se non avevi scelta mi consiglia di utilizzare JSTL:

<c:forEach var="par" items="${paramValues}"> 
    <c:if test="${fn:startsWith(par.key, 'token')}"> 
     ${par.key} = ${par.value[0]}; 
    </c:if> 
</c:forEach> 

O in Java:

<%@ page import = "java.util.Map" %> 
<% 
Map<String, String[]> parameters = request.getParameterMap(); 
for(String parameter : parameters.keySet()) { 
    if(parameter.toLowerCase().startsWith("token")) { 
     String[] values = parameters.get(parameter); 
    } 
} 
%> 
+0

Does parameters.get() diverso da request.getParameter? –

+0

'parameters.get()' sta estraendo il valore dai parametri Map, 'request.getParameter' lo estrae direttamente dall'oggetto request. Il vantaggio della mappa è che se non hai ottenuto il nome giusto, puoi scorrere sulla mappa e vedere cosa viene trasmesso al JSP invece di quello che pensi che debba essere passato. – WPrecht

+0

posso ottenere il parametro semplicemente parameters.get ("token")? ci sarà un solo parametro passato alla mia pagina. Grazie. –

1

È possibile utilizzare $ {} param.token stampare i parametri di richiesta in JSP pagina

+0

Guardando più vicino allo screenshot, il POST ha dato come risultato una risposta 302. – BalusC

2

Come da schermata, la richiesta POST ha generato un HTTP 302 response, il che significa che è stato reindirizzato. In pratica, un reindirizzamento istruisce il cliente a lanciare una nuova richiesta HTTP sull'URL specificato. Questo in qualche modo non prende magicamente in consegna tutti i parametri di richiesta da una richiesta precedente.

è necessario passare i parametri di richiesta che si desideri mantenere nella richiesta reindirizzata insieme con l'URL di reindirizzamento da soli:

String token = request.getParameter("token"); 
response.sendRedirect("/CR?token=" + URLEncoder.encode(token, "UTF-8")); 

Un'alternativa è quella di non eseguire un redirect a tutti, ma solo un inoltrare. Se questo è l'approccio giusto dipende dal requisito funzionale concreto che non è stato elaborato da nessuna parte nella domanda. Per conoscere la differenza, leggere attentamente RequestDispatcher.forward() vs HttpServletResponse.sendRedirect() e, naturalmente, anche our servlets wiki page per informazioni su come utilizzare correttamente i servlet per questo tipo di requisiti. Una pagina JSP è semplicemente lo strumento sbagliato per il lavoro.

3

Ecco alcuni controlli.

1) Form con metodo = "post" nella pagina JSP.

<form name="form1" action="nextpage" method="post"> 

2) Il nome del controllo sul JSP è il token. Mi piace.

<input type="text" name="token" value="chintan"/> 

3) Si ottiene il pulsante di invio anziché i mezzi di pulsante.

<input type="submit" name="submit" value="submit"/> 

Dopo aver controllato tutti questi punti. Ti darà errore esatto. E sarai in grado di sistemarlo facilmente.

+0

E anche controllare il tipo di crittografia non è multipart/dati. – chintan

2

come avete visto nell'immagine, il codice di risposta HTTP è 302

Questo è il motivo per cui non si poteva ottenere il parametro token, perché quando il browser ottiene alla tua pagina JSP, è da redirect, ma non chiedere in avanti.

Che è dire, la tua richiesta di sfogliare la pagina JSP con non tutti i parametri ...

È possibile verificare se la vostra azione postato è un servlet e quindi reindirizzare alla pagina JSP ????

controllare il codice azione e modificare il codice

response.sendRedirect.... 

a

request.getRequestDispacher("your jsp page path").forword(request, response) 

o semplicemente cambiare il modulo inviato straightly alla pagina JSP

<form action="your jsp page link"> 
... 
</form>