So erhalten Sie Parameter von der URL mit JSP

192

Wie erhalte ich in JSP Parameter von der URL?

Zum Beispiel habe ich eine URL, die www.somesite.com/Transaction_List.jsp?accountID=5
ich erhalten möchte. 5.

Gibt es ein request.getAttribute ("accountID") wie für Sitzungen oder ähnliches?

Josh Curren
quelle

Antworten:

178

In einer GET-Anforderung werden die Anforderungsparameter aus der Abfragezeichenfolge übernommen (die Daten folgen dem Fragezeichen auf der URL). Beispielsweise enthält die URL http://hostname.com?p1=v1&p2=v2 zwei Anforderungsparameter - - p1 und p2. In einer POST-Anforderung werden die Anforderungsparameter sowohl aus der Abfragezeichenfolge als auch aus den gesendeten Daten übernommen, die im Hauptteil der Anforderung codiert sind.

Dieses Beispiel zeigt, wie der Wert eines Anforderungsparameters in die generierte Ausgabe aufgenommen wird:

Hello <b><%= request.getParameter("name") %></b>!

Wenn auf die Seite mit der URL zugegriffen wurde:

http://hostname.com/mywebapp/mypage.jsp?name=John+Smith

Die resultierende Ausgabe wäre:

Hello <b>John Smith</b>!

Wenn in der Abfragezeichenfolge kein Name angegeben ist, lautet die Ausgabe:

Hello <b>null</b>!

In diesem Beispiel wird der Wert eines Abfrageparameters in einem Scriptlet verwendet:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>
Sajad Bahmani
quelle
96
Scriptlets gelten als schlechte Praxis.
BalusC
13
Vergessen Sie nicht xmlEncode .. dies ist derzeit anfällig für reflektierte xss
Esailija
4
-1 für XSS-Sicherheitslücke. Wäre auch -1 für die Verwendung eines Scriptlets, wenn die Arbeit mit EL erledigt werden kann, wenn ich zweimal abstimmen könnte. Im Ernst, tun Sie dies nicht .
Jules
Das Vorschlagen der Verwendung von Scriptlets, wenn eine bessere Lösung vorhanden ist, ist für die Codequalität schädlich.
Suketu Bhuta
2
Zu "Scriptlets gelten als schlechte Praxis" finden Sie in dieser Antwort in einer anderen Frage nach Alternativen.
Pixelstix
242

Über die impliziten Objekte der Unified Expression Language schreibt das Java EE 5 Tutorial :

Implizite Objekte

Die JSP-Ausdruckssprache definiert eine Reihe impliziter Objekte:

  • pageContext: Der Kontext für die JSP-Seite. Bietet Zugriff auf verschiedene Objekte, einschließlich:
    • servletContext: Der Kontext für das Servlet der JSP-Seite und alle in derselben Anwendung enthaltenen Webkomponenten. Siehe Zugreifen auf den Webkontext.
    • session: Das Sitzungsobjekt für den Client. Siehe Verwalten des Clientstatus.
    • request: Die Anforderung, die die Ausführung der JSP-Seite auslöst. Siehe Informationen aus Anfragen abrufen .
    • response: Die von der JSP-Seite zurückgegebene Antwort. Siehe Erstellen von Antworten.
  • Darüber hinaus stehen mehrere implizite Objekte zur Verfügung, die einen einfachen Zugriff auf die folgenden Objekte ermöglichen:
    • param: Ordnet einen Anforderungsparameternamen einem einzelnen Wert zu
    • paramValues: Ordnet einen Anforderungsparameternamen einem Array von Werten zu
    • header: Ordnet einen Anforderungsheadernamen einem einzelnen Wert zu
    • headerValues: Ordnet einen Anforderungsheadernamen einem Array von Werten zu
    • cookie: Ordnet einen Cookie-Namen einem einzelnen Cookie zu
    • initParam: Ordnet einen Kontextinitialisierungsparameternamen einem einzelnen Wert zu
  • Schließlich gibt es Objekte, die den Zugriff auf die verschiedenen Bereichsvariablen ermöglichen, die unter Verwenden von Bereichsobjekten beschrieben sind.
    • pageScope: Ordnet seitenbezogene Variablennamen ihren Werten zu
    • requestScope: Ordnet Variablennamen mit Anforderungsbereich ihren Werten zu
    • sessionScope: Ordnet sitzungsbezogene Variablennamen ihren Werten zu
    • applicationScope: Ordnet anwendungsbezogene Variablennamen ihren Werten zu

Die interessanten Teile sind fett gedruckt :)

Um Ihre Frage zu beantworten, sollten Sie in der Lage sein, wie folgt darauf zuzugreifen (mit EL):

${param.accountID}

Oder mithilfe von JSP-Scriptlets (nicht empfohlen):

<%
    String accountId = request.getParameter("accountID");
%>
Pascal Thivent
quelle
Müssen Sie etwas tun, um EL zu aktivieren? Ich benutze jboss6 und wenn ich $ {param.accountID} benutze, wird es als normaler Text vom Browser behandelt.
Simgineer
@simgineer Erstens MUSS die Datei JSP sein, nicht nur einfaches HTML. Lesen Sie die folgenden Themen: Ausdruckssprache, Variablenwert nicht anzeigen , EL-Ausdrücke werden in JBoss AS 4.2.2 nicht ausgewertet , Ausdruckssprache in JSP funktioniert nicht .
informatik01
81

Verwenden Sie EL (JSP Expression Language):

${param.accountID}

Taylor Leese
quelle
1
Behandelt dies die URL-Dekodierung?
Wikingersteve
@ Vikingsteve ja, das tut es
Neil McGuigan
2
Die Neukodierung als HTML / XML-Entitäten wird jedoch nicht behandelt, was für die XSS-Verhinderung erforderlich ist. Verwenden Sie dazu JSTL <c:out value="${param.accountID}" />.
Jules
21

Wenn ich hier einen Kommentar hinzufügen darf ...

<c:out value="${param.accountID}"></c:out>

funktioniert bei mir nicht (es gibt eine 0 aus).

Stattdessen funktioniert dies:

<c:out value="${param['accountID']}"></c:out>

Léa Massiot
quelle
Bemerkenswert: param enthält mehr Werte als nur die URL-Abfrageargumente (z. B. die Werte in der Modellzuordnung). Wenn Sie speziell prüfen müssen, ob ein Wert in den URL-Abfrageargumenten enthalten ist (und z. B. als Teil einer Formularübermittlung übermittelt wird), können Sie sich $ {pageContext.request.queryString} ansehen, der jedoch nicht in a unterteilt ist schöne karte wie params ist.
Paul
4
String accountID = request.getParameter("accountID");
johannes
quelle
0

Beispiel: Sie wollten den Betreff-Datensatz mit seiner Betreff-ID löschen

@RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int subjectid) {
    subjectsDao.delete(subjectid);
    return new ModelAndView("redirect:/subject_setup");
}

und der Parameter wird für die Eingabe in Ihre Abfrage verwendet

public int delete(int subjectid) {
    String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
    return template.update(sql);
}
Ainz Ooal Kleid
quelle
0

www.somesite.com/Transaction_List.jsp?accountID=5

Zu diesem Zweck URLgibt es request.getParameterin Java einen Methodenaufruf , wenn Sie eine Zahl hier einfügen möchten int, ähnlich für einen Zeichenfolgenwert, in den umgewandelt wird string. Kopieren Sie für Ihre Anforderungen einfach die folgende Zeile in der Seite.

int  accountId =(int)request.getParameter("accountID");

Sie können diesen Wert jetzt accountIdauf der gesamten Seite aufrufen.

Hier accountIdist der Name des Parameters. Sie können damit auch mehrere Parameter abrufen, dies funktioniert jedoch nicht. Es funktioniert nur mit der GETMethode, wenn Sie auf POSTAnfrage klicken, dann ist dies ein Fehler.

Hoffe das ist hilfreich.

Jay Patel
quelle
0

Seite 1: Detail Seite 2: <% String id = request.getParameter ("userid");%> // Jetzt können Sie id für die SQL-Abfrage des hsql-Detailprodukts verwenden

Null
quelle