Cum să obțineți parametrii din URL cu JSP (Programare, Java, Jsp, Url, Obține Metoda)

Josh Curren a intrebat.

În JSP cum obțin parametrii din URL?

De exemplu, am un URL www.somesite.com/Transaction_List.jsp?accountID=5
Vreau să obțin parametrii 5.

Există un request.getAttribute( „accountID” ) așa cum există pentru sesiuni sau ceva similar?

9 răspunsuri
Sajad Bahmani

Într-o cerere GET, parametrii de cerere sunt luați din șirul de interogare (datele care urmează după semnul de întrebare din URL). De exemplu, URL-ul http://hostname.com?p1=v1&p2=v2 conține doi parametri de cerere – – p1 și p2. Într-o cerere POST, parametrii de cerere sunt preluați atât din șirul de interogare, cât și din datele postate, care sunt codificate în corpul cererii.

Acest exemplu demonstrează cum se poate include valoarea unui parametru de cerere în rezultatul generat:

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

Dacă pagina a fost accesată cu URL-ul:

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

ieșirea rezultată ar fi:

Hello <b>John Smith</b>!

În cazul în care numele nu este specificat în șirul de interogare, rezultatul ar fi:

Hello <b>null</b>!

Acest exemplu utilizează valoarea unui parametru de interogare într-un scriptlet:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>

Comentarii

    97

  • Scriptlet-urile sunt considerate o practică proastă. –  > Por BalusC.
  • Nu uitați de xmlEncode… acesta este în prezent vulnerabil la xss reflectat –  > Por Esailija.
  • -1 pentru vulnerabilitatea XSS. Ar fi, de asemenea, -1 pentru folosirea unui scriptlet când treaba poate fi făcută folosind EL dacă aș putea vota de două ori. Serios, NU FACEȚI ASTA. –  > Por Jules.
  • A sugera utilizarea scripturilor atunci când există o soluție mai bună este dăunătoare pentru calitatea codului. –  > Por Suketu Bhuta.
  • În ceea ce privește „Scriptlets sunt considerate o practică proastă.”, consultați acest răspuns la o altă întrebare pentru alternative. –  > Por Pixelstix.
Pascal Thivent

Despre Obiecte implicite din limbajul de expresie unificat, a Tutorial Java EE 5 scrie:

Obiecte implicite

Limbajul de exprimare JSP definește un set de obiecte implicite:

  • pageContext: Contextul pentru pagina JSP. Oferă acces la diverse obiecte, printre care:
    • servletContext: Contextul pentru servlet-ul paginii JSP și orice componente web conținute în aceeași aplicație. A se vedea Accesarea contextului web.
    • session: Obiectul de sesiune pentru client. A se vedea Menținerea stării clientului.
    • request: Cererea care declanșează executarea paginii JSP. A se vedea Obținerea de informații din cereri.
    • response: Răspunsul returnat de pagina JSP. A se vedea Construirea răspunsurilor.
  • În plus, sunt disponibile mai multe obiecte implicite care permit accesul ușor la următoarele obiecte:
    • param: Mappează numele unui parametru de cerere cu o singură valoare
    • paramValues: Mapă un nume de parametru de cerere cu o matrice de valori
    • header: Maparea unui nume de antet de cerere cu o singură valoare
    • headerValues: Mapă un nume de antet de cerere cu o matrice de valori
    • cookie: Mapă un nume de cookie cu un singur cookie
    • initParam: Mapă un nume de parametru de inițializare a contextului cu o singură valoare
  • În cele din urmă, există obiecte care permit accesul la diversele variabile cu domeniu de cuprindere descrise în secțiunea Utilizarea obiectelor de domeniu de cuprindere.
    • pageScope: Mappează numele variabilelor cu acoperire de pagină cu valorile lor
    • requestScope: Mapă numele variabilelor de tip request-scoped cu valorile lor
    • sessionScope: Maparea numelor variabilelor de sesiune cu valorile lor
    • applicationScope: Maparea numelor variabilelor de aplicație în funcție de valorile lor

Părțile interesante sunt scrise cu bold 🙂

Așadar, pentru a răspunde la întrebarea dumneavoastră, ar trebui să puteți să o accesați astfel (folosind EL):

${param.accountID}

Sau, folosind JSP Scriptlets (nerecomandat):

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

Comentarii

  • Este ceva ce trebuie să faceți pentru a activa EL? Eu folosesc jboss6 și când folosesc ${param.accountID} este tratat ca un text obișnuit din browser. –  > Por simgineer.
  • @simgineer În primul rând, fișierul TREBUIE să fie JSP, nu doar HTML simplu. Citiți următoarele subiecte: Limbajul de expresie, nu afișați valoarea variabilei, Expresiile EL nu sunt evaluate în JBoss AS 4.2.2, Limbajul de expresie în JSP nu funcționează. –  > Por informatik01.
Taylor Leese

Utilizați EL (limbajul de expresie JSP):

${param.accountID}

Comentarii

  • Acesta se ocupă de decodarea URL-urilor? –  > Por vikingsteve.
  • @vikingsteve da, o face –  > Por Neil McGuigan.
  • Dar nu se ocupă de recodificarea ca entități HTML/XML, care este necesară pentru prevenirea XSS. Utilizați JSTL <c:out value="${param.accountID}" /> pentru a face acest lucru. –  > Por Jules.
Léa Massiot

Dacă îmi permiteți să adaug un comentariu aici…

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

nu funcționează pentru mine (imprimă un 0).

În schimb, asta funcționează:

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

Comentarii

  • Demn de remarcat: param include mai multe valori decât doar argumentele de interogare URL (de exemplu, valorile din harta modelului). dacă trebuie să verificați în mod specific dacă o valoare se află în argumentele de interogare URL (și, de exemplu, va fi trimisă ca parte a unui formular de trimitere), vă puteți uita la ${pageContext.request.queryString} – dar nu este împărțită într-o hartă frumoasă, așa cum este params. –  > Por Paul.
user229916

request.getParameter("accountID") este ceea ce căutați. Aceasta face parte din Java Servlet API. A se vedea http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html pentru mai multe informații.

johannes
String accountID = request.getParameter("accountID");

Rochia Ainz Ooal

exemplu, ați dorit să ștergeți înregistrarea subiectului cu ID-ul său subject_id

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

iar parametrul va fi utilizat ca intrare în interogarea dvs.

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

jay Patel

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

Pentru aceasta URL există un apel de metodă request.getParameter în java , dacă doriți ca un număr de aici să fie transformat în int, în mod similar, pentru o valoare de tip șir de caractere, se va transforma în string. așa că pentru cerința dumneavoastră, copiați linia de mai jos în pagină,

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

acum puteți apela această valoare folosind accountId în întreaga pagină.

aici accountId este numele parametrului, puteți obține mai mulți parametri folosind acest lucru, dar nu funcționează. Va funcționa numai cu GET dacă apăsați POST request, atunci va apărea o eroare.

Sper că acest lucru este util.

null

page 1 : Detailpage 2 :<% String id = request.getParameter(„userid”);%>// acum puteți folosi id pentru interogarea sql a produsului hsql detail