Jak uzyskać parametry z adresu URL za pomocą JSP


192

W JSP jak uzyskać parametry z adresu URL?

Na przykład mam adres URL, www.somesite.com/Transaction_List.jsp?accountID=5
który chcę uzyskać 5.

Czy istnieje request.getAttribute („accountID”), taki jak w przypadku sesji lub coś podobnego?

Odpowiedzi:


177

W żądaniu GET parametry żądania są pobierane z ciągu zapytania (dane następujące po znaku zapytania w adresie URL). Na przykład adres URL http://hostname.com?p1=v1&p2=v2 zawiera dwa parametry żądania - - p1 i p2. W żądaniu POST parametry żądania są pobierane zarówno z ciągu zapytania, jak i z wysłanych danych, które są zakodowane w treści żądania.

W tym przykładzie pokazano, jak uwzględnić wartość parametru żądania w wygenerowanym wyniku:

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

Jeśli strona była otwierana za pomocą adresu URL:

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

wynikowy wynik byłby:

Hello <b>John Smith</b>!

Jeśli nazwa nie zostanie podana w ciągu zapytania, wynikiem będzie:

Hello <b>null</b>!

W tym przykładzie użyto wartości parametru zapytania w skrypcie:

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

97
Pisma święte są uważane za złą praktykę.
BalusC,

14
Nie zapomnij xmlEncode .. jest obecnie podatny na odbicie xss
Esailija

5
-1 dla podatności na XSS. Byłoby również -1 za użycie skryptletu, gdy zadanie można wykonać za pomocą EL, gdybym mógł głosować dwa razy. Poważnie, NIE Rób tego .
Jules

Sugerowanie użycia skryptletów, gdy istnieje lepsze rozwiązanie, jest szkodliwe dla jakości kodu.
Suketu Bhuta,

2
Jeśli chodzi o „Pisma święte są uważane za złą praktykę”, zobacz tę odpowiedź w innym pytaniu dotyczącym alternatyw.
Pixelstix,

243

O dorozumiane obiektów o Unified Expression Language The Java EE 5 Tutorial pisze:

Obiekty niejawne

Język wyrażeń JSP definiuje zestaw niejawnych obiektów:

  • pageContext: Kontekst strony JSP. Zapewnia dostęp do różnych obiektów, w tym:
    • servletContext: Kontekst serwletu strony JSP i wszelkich składników WWW zawartych w tej samej aplikacji. Zobacz Dostęp do kontekstu internetowego.
    • session: Obiekt sesji dla klienta. Patrz Utrzymanie stanu klienta.
    • request: Żądanie wyzwalające wykonanie strony JSP. Zobacz Uzyskiwanie informacji z zapytań .
    • response: Odpowiedź zwrócona przez stronę JSP. Zobacz: Konstruowanie odpowiedzi.
  • Ponadto dostępnych jest kilka niejawnych obiektów, które umożliwiają łatwy dostęp do następujących obiektów:
    • param: Mapuje nazwę parametru żądania do pojedynczej wartości
    • paramValues: Odwzorowuje nazwę parametru żądania na tablicę wartości
    • header: Odwzorowuje nazwę nagłówka żądania na jedną wartość
    • headerValues: Odwzorowuje nazwę nagłówka żądania na tablicę wartości
    • cookie: Zamienia nazwę pliku cookie na pojedynczy plik cookie
    • initParam: Odwzorowuje nazwę parametru inicjalizacji kontekstu na pojedynczą wartość
  • Wreszcie istnieją obiekty, które umożliwiają dostęp do różnych zmiennych o zasięgu opisanych w Korzystanie z obiektów zakresu.
    • pageScope: Mapuje nazwy zmiennych o zasięgu stron na ich wartości
    • requestScope: Mapuje nazwy zmiennych o zasięgu zgodnym z żądaniami na ich wartości
    • sessionScope: Mapuje nazwy zmiennych o zasięgu sesji do ich wartości
    • applicationScope: Mapuje nazwy zmiennych o zasięgu aplikacji do ich wartości

Interesujące części są pogrubione :)

Tak więc, aby odpowiedzieć na twoje pytanie, powinieneś mieć do niego dostęp w następujący sposób (używając EL):

${param.accountID}

Lub używając skryptów JSP (niezalecane):

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

Czy musisz coś zrobić, aby włączyć EL? Używam jboss6 i kiedy używam $ {param.accountID}, jest on traktowany jako zwykły tekst z przeglądarki.
simgineer

@simgineer Po pierwsze, plik MUSI być JSP, a nie tylko zwykłym HTML. Przeczytaj następujące tematy: Język wyrażeń, nie pokazuj wartości zmiennych , wyrażenia EL nie są oceniane w JBoss AS 4.2.2 , Język wyrażeń w JSP nie działa .
informatik01

81

Użyj EL (JSP Expression Language):

${param.accountID}


1
Czy to obsługuje dekodowanie adresów URL?
vikingsteve

@vikingsteve tak to robi
Neil McGuigan

2
Ale nie obsługuje ponownego kodowania jako jednostek HTML / XML, co jest niezbędne do zapobiegania XSS. <c:out value="${param.accountID}" />Aby to zrobić, użyj JSTL .
Jules

21

Jeśli mogę tu dodać komentarz ...

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

nie działa dla mnie (drukuje 0).

Zamiast tego działa:

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


Warto zauważyć: parametr zawiera więcej wartości niż tylko argumenty zapytania URL (np. Wartości w mapie modelu). jeśli chcesz dokładnie sprawdzić, czy wartość znajduje się w argumentach zapytania URL (i np. zostanie przesłana jako część formularza), możesz spojrzeć na $ {pageContext.request.queryString} - ale nie jest ona podzielona na ładna mapa jak params.
Paul



0

przykład chciałeś usunąć rekord podmiotu z jego identyfikatorem podmiotu

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

a parametr zostanie wykorzystany do wprowadzenia zapytania

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

W tym celu URListnieje wywołanie metody request.getParameterw Javie, jeśli chcesz tu rzucić liczbę int, podobnie dla wartości ciągu string. więc na swoje życzenie po prostu skopiuj przeszłość poniżej linii na stronie,

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

możesz teraz nazwać tę wartość, używając accountIdcałej strony.

tutaj accountIdjest nazwa parametru, można również uzyskać więcej niż jeden parametr za pomocą tego, ale to nie działa. Będzie działać tylko z GETmetodą, jeśli trafisz na POSTżądanie, wtedy będzie to błąd.

Mam nadzieję, że to jest pomocne.


0

strona 1: Szczegół strona 2: <% String id = request.getParameter ("userid");%> // teraz możesz używać id do zapytania SQL o szczegóły produktu hsql

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.