2013-03-22 13 views
6

Ich bin neu in JSP. Ich habe eine JSP-Seite, wo ein Parameter an diese JSP-Seite mit HTTP-Post übergeben wird. Ich kann den Parameter in Firebug sehen, wie Sie auf dem Bild sehen können. enter image description hereWie bekomme ich HTTP-Post-Parameter in JSP

Aber auf meiner Seite, wenn ich versuche, die Token-Variable zu drucken, ist die Variable immer Null. Ich drucke die Variable wie folgt:

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

Was mache ich falsch? Wie kann ich den Token-Parameter erhalten?

+0

Wie drucken Sie den Wert auf die jsp Seite einreichen ändern ? – Mohsin

+0

Das druckt nichts - es macht genau das, was es sagt, bekommt den Wert. –

+0

ich von <%= token %> –

Antwort

4

Das token Attribut sieht für mich wie ein nonce aus und ein Sicherheitsfilter entfernt möglicherweise den Wert aus dem Anforderungsobjekt.

Was Sie getan haben, um den Wert zu drucken, ist absolut richtig. Ich bin nicht für Best Practices, aber es sollte funktionieren.

Überprüfen Sie Ihren Code für Sicherheitsfilter und sehen Sie, ob Sie herausfinden können, wo der Wert entfernt/außer Kraft gesetzt wird.

Nachdem Sie Ihre web.xml gesehen haben.

Der Wert wird mit POST an die Domäne übergeben. Die Anfrage wird intern auf die Begrüßungsseite umgeleitet, und der Wert geht verloren. Wenn Sie den Wert mit GET übergeben, wird der Wert beibehalten.

Sie haben zwei Möglichkeiten:

  1. eine direkte URL zu erstellen und den Wert, um es passieren, wie Sie den Beitrag mit tun. ZB: url - yourdomain.com/welcome.jsp.
  2. Bitten Sie das andere Projekt, den Parameter in der URL (GET-Anforderung) zu übergeben.

Ich habe beide getestet und es funktioniert gut.

+0

Hallo, das war eine Sache, die ich nicht überprüft habe. danke für deine Antwort zuerst. Ich habe gerade meine web.xml-Datei überprüft, aber ich konnte keinen Filter in meiner web.xml-Datei sehen. Gibt es irgendetwas, das ich für andere Filter überprüfen kann? jede andere Hilfe wird auch gut sein. –

+1

Sie müssen weitere Informationen zu den von Ihnen verwendeten Frameworks angeben. Ihre web.xml sollte einen Hinweis geben. Wenn es in Ordnung ist, dann können Sie es veröffentlichen. –

+0

können Sie mir Ihre E-Mail Adresse geben. Ich ziehe es vor, es aufgrund von Sicherheitsproblemen auf Ihrer E-Mail zu veröffentlichen. –

0

können Sie drucken wie

${param.token} 

Dieser Wert für diesen

+0

Dank. Ich habe die Token-Variable bereits ähnlich gedruckt, aber sie ist immer null. –

+0

Eigentlich ist das Request-Parameter. Sie müssen erneut in Servlet – PSR

+0

, wo Sie diesen Parameter in Anfrage – PSR

1

Das bevorzugte Idiom drucken wäre einen Servlet aus dem Formular zu verwenden, nicht eine JSP. Das Servlet kann später eine JSP als Sicht verwenden. Einer der Gründe ist, das zu vermeiden, was Sie zu tun scheinen: Java-Code auf die Seite zu setzen und die Präsentation wahrscheinlich mit Logik zu mischen.

Wenn Sie jedoch keine andere Wahl hätte, würde ich empfehlen JSTL verwenden:

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

Oder 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

Ist parameters.get() anders als request.getParameter? –

+0

'parameters.get()' zieht den Wert aus den Map-Parametern heraus, 'request.getParameter' zieht es direkt aus dem Anfrageobjekt. Der Vorteil der Map besteht darin, dass Sie, wenn Sie den Namen nicht genau richtig gefunden haben, über die Map iterieren können und sehen können, was an die JSP übergeben wird und nicht, was Ihrer Ansicht nach übergeben werden sollte. – WPrecht

+0

kann ich den Parameter nur durch parameters.get ("Token") bekommen? Es wird nur ein Parameter an meine Seite übergeben. Vielen Dank. –

1

Sie können $ verwenden {param.token} Anforderungsparameter in jsp drucken Seite

+0

Schauen Sie sich den Screenshot genauer an, der POST ergab eine 302 Antwort. – BalusC

2

Wie auf dem Screenshot, die POST-Anfrage führte zu einem HTTP 302 response, was bedeutet, dass es umgeleitet wurde. Eine Weiterleitung weist den Client im Grunde an, eine brandneue HTTP-Anfrage für die angegebene URL zu senden. Dies übernimmt nicht irgendwie magisch alle Anfrageparameter von einer vorherigen Anfrage.

Sie müssen die Anfrage Parameter zu übergeben, die Sie in der umgeleiteten Anfrage zusammen mit der Umleitungs-URL selbst behalten mögen:

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

Eine Alternative ist nicht überhaupt eine Umleitung durchzuführen, sondern nur eine nach vorne. Ob das der richtige Ansatz ist, hängt von der konkreten funktionalen Anforderung ab, die in der Frage nirgendwo ausgearbeitet wird. Um mehr über den Unterschied zu erfahren, lesen Sie sorgfältig RequestDispatcher.forward() vs HttpServletResponse.sendRedirect() und natürlich auch our servlets wiki page, um zu lernen, Servlets für diese Art von Anforderungen richtig zu verwenden. Eine JSP-Seite ist einfach das falsche Werkzeug für den Job.

3

Hier sind einige Überprüfungen.

1) Formular mit method = "post" in der JSP-Seite.

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

2) Name des Steuerelements auf der JSP ist das Token. wie.

3) Sie erhalten den Absenden-Button anstelle der Schaltfläche bedeutet.

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

Nach Überprüfung all dieser Punkte. Es wird Ihnen einen genauen Fehler geben. Und Sie werden es leicht beheben können.

+0

Und überprüfen Sie auch Ihre Verschlüsselungstyp ist nicht Multipart/Daten. – chintan

2

wie Sie auf dem Bild sah, den http-Antwort-Code ist 302

Deshalb sollten Sie nicht den Token Parameter bekommen konnte, weil, wenn der Browser auf Ihre jsp Seite erhalten, ist es von Redirect ist, aber nicht weiterleiten.

Das heißt sagen, Ihre Browse-Anfrage Ihre jsp Seite mit nicht alle Parameter ...

Sie können überprüfen, ob Ihr gepostet Aktion ein Servlet ist und dann auf die jsp Seite umleiten ????

überprüfen Sie Ihre Aktions-Code und ändern Sie den Code

response.sendRedirect.... 

zu

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

oder einfach nur Ihre Form straightly

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