Come ottenere parametri dall'URL con JSP


193

In JSP come ottengo i parametri dall'URL?

Ad esempio, ho un URL www.somesite.com/Transaction_List.jsp?accountID=5
che desidero ottenere il 5.

Esiste un request.getAttribute ("accountID") come esiste per le sessioni o qualcosa di simile?

Risposte:


178

In una richiesta GET, i parametri della richiesta sono presi dalla stringa della query (i dati che seguono il punto interrogativo sull'URL). Ad esempio, l'URL http://hostname.com?p1=v1&p2=v2 contiene due parametri di richiesta: - p1 e p2. In una richiesta POST, i parametri della richiesta sono presi sia dalla stringa della query sia dai dati registrati che sono codificati nel corpo della richiesta.

Questo esempio dimostra come includere il valore di un parametro di richiesta nell'output generato:

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

Se si accedeva alla pagina con l'URL:

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

l'output risultante sarebbe:

Hello <b>John Smith</b>!

Se il nome non è specificato nella stringa della query, l'output sarebbe:

Hello <b>null</b>!

In questo esempio viene utilizzato il valore di un parametro di query in uno scriptlet:

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

97
Gli scriptlet sono considerati cattive pratiche.
BalusC

14
Non dimenticare xmlEncode .. questo è attualmente vulnerabile a
reflection

5
-1 per la vulnerabilità XSS. Sarebbe anche -1 per l'utilizzo di uno scriptlet quando il lavoro può essere fatto usando EL se potessi votare due volte. Scherzi a parte, NON FARE QUESTO .
Jules,

Suggerire l'uso di scriptlet quando esiste una soluzione migliore è dannoso per la qualità del codice.
Suketu Bhuta

2
Per quanto riguarda "Gli scriptlet sono considerati cattive pratiche", vedere questa risposta in un'altra domanda di alternative.
Pixelstix il

243

Riguardo a oggetti impliciti di Unified Expression Language , il tutorial Java EE 5 scrive:

Oggetti impliciti

Il linguaggio di espressioni JSP definisce un insieme di oggetti impliciti:

  • pageContext: Il contesto per la pagina JSP. Fornisce accesso a vari oggetti tra cui:
    • servletContext: Il contesto per il servlet della pagina JSP e tutti i componenti Web contenuti nella stessa applicazione. Vedere Accesso al contesto Web.
    • session: L'oggetto sessione per il client. Vedi Mantenimento dello stato del cliente.
    • request: La richiesta che avvia l'esecuzione della pagina JSP. Vedi Ottenere informazioni dalle richieste .
    • response: La risposta restituita dalla pagina JSP. Vedi Costruire risposte.
  • Inoltre, sono disponibili diversi oggetti impliciti che consentono un facile accesso ai seguenti oggetti:
    • param: Associa il nome di un parametro di richiesta a un singolo valore
    • paramValues: Associa un nome di parametro di richiesta a una matrice di valori
    • header: Associa il nome dell'intestazione di una richiesta a un singolo valore
    • headerValues: Associa un nome di intestazione di richiesta a una matrice di valori
    • cookie: Associa il nome di un cookie a un singolo cookie
    • initParam: Associa il nome di un parametro di inizializzazione del contesto a un singolo valore
  • Infine, ci sono oggetti che consentono l'accesso alle varie variabili con ambito descritte in Uso degli oggetti ambito.
    • pageScope: Associa i nomi delle variabili con ambito pagina ai loro valori
    • requestScope: Associa i nomi delle variabili con ambito di richiesta ai loro valori
    • sessionScope: Associa i nomi delle variabili con ambito sessione ai rispettivi valori
    • applicationScope: Associa i nomi delle variabili nell'ambito dell'applicazione ai loro valori

Le parti interessanti sono in grassetto :)

Quindi, per rispondere alla tua domanda, dovresti essere in grado di accedervi in ​​questo modo (usando EL):

${param.accountID}

Oppure, usando gli scriptlet JSP (non consigliato):

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

C'è qualcosa che devi fare per abilitare EL? Sto usando jboss6 e quando uso $ {param.accountID} viene trattato come testo normale dal browser.
simgineer

@simgineer Innanzitutto, il file DEVE essere JSP, non solo semplice HTML. Leggi i seguenti argomenti: linguaggio delle espressioni, non mostrare valore variabile , le espressioni EL non vengono valutate in JBoss AS 4.2.2 , il linguaggio delle espressioni in JSP non funziona .
informatik01

81

Usa EL (JSP Expression Language):

${param.accountID}


1
Questo gestisce la decodifica URL?
vikingsteve,

@vikingsteve sì, lo fa
Neil McGuigan,

2
Ma non gestisce la ricodifica come entità HTML / XML, necessaria per la prevenzione XSS. Usa JSTL <c:out value="${param.accountID}" />per farlo.
Jules,

21

Se posso aggiungere un commento qui ...

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

non funziona per me (stampa uno 0).

Invece, funziona:

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


Vale la pena notare: param include più valori oltre agli argomenti della query URL (ad es. I valori nella mappa del modello). se devi verificare specificamente se un valore è presente negli argomenti della query URL (e, ad esempio, verrà inviato come parte di un invio del modulo), puoi guardare $ {pageContext.request.queryString} - ma non è suddiviso in un bella mappa come params.
Paul,


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

0

esempio che si desidera eliminare il record del soggetto con il relativo 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");
}

e il parametro verrà utilizzato per l'input nella query

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

0

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

Per questo URLc'è una chiamata di metodo request.getParameterin java, se vuoi un numero qui inserito int, allo stesso modo per il valore stringa inserito string. quindi per le tue esigenze, copia semplicemente la riga sotto la pagina,

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

ora puoi chiamare questo valore usando accountIdin tutta la pagina.

qui accountIdè il nome del parametro è anche possibile ottenere più di un parametro usando questo, ma questo non funziona. Funzionerà con il GETmetodo solo se premi POSTrichiesta quindi il loro sarà un errore.

Spero sia utile.


0

pagina 1: pagina dettaglio 2: <% String id = request.getParameter ("userid");%> // ora puoi usare id per la query sql del prodotto hsql detail

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.