Senden von Parameter aus JSP zu Servlet über POST
Baue ich eine einfache web-app und versuchen, zu erstellen eine login-Seite. Die Seite besteht aus einer JSP mit einer form, die Lasten, die ein Servlet.
Hab ich die form der Arbeit wird mit der Methode GET:
JSP sieht wie folgt aus:
<form method="get" action="Login">
Email:<input name="email"/>
Password:<input name="password"/>
<input type="Submit" value="Log in"/>
Und im Servlet:
@WebServlet(name = "Login", urlPatterns = {"/Login"})
public class Login extends HttpServlet {
/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//Assign variables from the request parameters
String loginFormEmail = request.getParameter("email");
String loginFormPassword = request.getParameter("password");
Dieser code funktioniert, aber es enthält den Benutzernamen und das Passwort in die URL-Zeichenfolge, so ist es offensichtlich keine gute Praxis. Ich habe versucht, dies zu tun mit POST anstelle, aber ich habe immer einen Fehler. (HTTP Status 405 - HTTP-Methode POST ist nicht unterstützt von dieser URL)
Muss ich wissen, wie die sende-Parameter aus JSP an das Servlet mit der POST. Ich denke, dies kann bedeuten, mit RequestDispatcher-Objekt, aber alle tutorials die ich gefunden habe, erklären, mit RequestDispatcher zum senden von Daten vom Servlet zum JSP, nicht die andere Weise herum. Kann man/sollte man verwenden Request Dispatcher senden von POST-Daten von der JSP an das Servlet? Und wie Sie den Zugriff auf diese Parameter aus dem Servlet? (Gibt es ein äquivalent von Anfrage.getParameter() für POST?)
Ich verstehe, dass die Verwendung von POST immer noch nicht sicher, aber es ist eine viel bessere übung, als darunter das Passwort in die Abfrage-Zeichenfolge, und ich werde denken über Sicherheit später.
Entschuldigung für die grundlegende Frage, ich habe viele tutorials online, aber keiner von Ihnen scheinen, die Antwort auf diese spezielle Frage. Danke.
- Welche Fehler haben Sie bei der Verwendung von POST?
- Siehe Antwort für diese Frage: stackoverflow.com/questions/2349633/servlets-doget-and-dopost
- Den Fehler bekomme ich bei der Verwendung von POST-HTTP-Status 405 - HTTP-Methode POST ist nicht unterstützt von dieser URL
- Bitte ein wenig mehr Forschung. Sie könnten nur haben copypasted "HTTP Status 405 - HTTP-Methode POST ist nicht unterstützt von dieser URL" in die Google-Suche Eingabefeld oder auch nur hier auf Stack Overflow (rechts oben).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
Hinweis:
method
statttype
für die Angabe von GET/POST.Aber es ist nicht wirklich mehr "sicherer" als mit GET. Sie stehen immer noch im Klartext in der post-body. Wenn Sie es wünschen, um sicher zu sein, stellen Sie sicher, dass Sie HTTPS verwenden.
Bearbeiten
Haben Sie bearbeitet nun deine Frage, und es scheint, dass Sie mit
method
, nichttype
. Wenn Sie also noch Fehler nach dem ändern aufPOST
geben, welche Fehler Sie bekommen.Edit2
Legen Sie fest, dass Sie immer ein
HTTP method POST is not supported by this URL
Fehler. Dies bedeutet, dass dein servlet nicht akzeptieren, diePOST
Methode. Die meisten wahrscheinlich bedeutet, dass, dass Sie Erben einige Basis-servlet, das akzeptiert nurGET
. Sehen alle den code für das servlet wäre hilfreich.processRequest
imHttpServlet
Klasse, so hat es den Aufruf von woanders. Ich bin mir ziemlich sicher, dass Sie einedoGet
Methode in dort irgendwo. Stellen Sie sicher, dass Ihr editor nicht alles zusammengebrochen.Ich empfehle Ihnen statt
processRequest()
verwendendoPost()
Methode.Methode="POST" - Attribut in das element
Überschreiben der
HttpServlet#doPost()
Methode in IhrerLogin
KlasseDiese erfordern möglicherweise eine änderung der
service()
Methode kann überschrieben werden, um rufen Sie IhrenprocessRequest()
Methode unabhängig von der HTTP-Methode. Dies hängt davon ab, den rest IhresLogin
Klasse Umsetzung, die Sie noch nicht gezeigt.Dann ändern Sie Ihre
<form>
zu machenPOST
Anfrage.Versuchen, überschreiben Sie die HttpServlet-Methoden doPost() und doGet():