URL'den JSP ile parametreler nasıl alınır?


193

JSP'de URL'den parametreleri nasıl alabilirim?

Örneğin ben www.somesite.com/Transaction_List.jsp?accountID=5
5 almak istiyorum bir URL

var. Oturumlar veya benzer bir şey var gibi bir request.getAttribute ("accountID") var mı?

Yanıtlar:


178

Bir GET isteğinde, istek parametreleri sorgu dizesinden (URL'deki soru işaretini izleyen veriler) alınır. Örneğin, http://hostname.com?p1=v1&p2=v2 URL'si iki istek parametresi içerir - - p1 ve p2. Bir POST isteğinde, istek parametreleri hem sorgu dizesinden hem de isteğin gövdesinde kodlanan kaydedilmiş verilerden alınır.

Bu örnek, oluşturulan çıktıya bir istek parametresinin değerinin nasıl dahil edileceğini gösterir:

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

Sayfaya URL ile erişildiyse:

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

elde edilen çıktı:

Hello <b>John Smith</b>!

Sorgu dizesinde ad belirtilmezse, çıktı şöyle olur:

Hello <b>null</b>!

Bu örnek, bir komut dosyasında bir sorgu parametresinin değerini kullanır:

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

97
Senaryolar kötü uygulama olarak kabul edilir.
BalusC

14
Unutmayın xmlEncode .. şu anda yansıyan xss savunmasız
Esailija

5
XSS güvenlik açığı için -1. Ayrıca iki kez oy verebilir eğer iş EL kullanarak yapılabilir bir scriptlet kullanmak için -1 olurdu. Cidden, bunu YAPMAYIN .
Jules

Daha iyi bir çözüm olduğunda scriptletlerin kullanılmasını önermek kod kalitesine zararlıdır.
Suketu Bhuta

2
"Scriptletler kötü uygulama olarak kabul edilir" ile ilgili olarak, alternatifler için başka bir soruda bu cevaba bakınız .
Pixelstix

243

Hakkında Örtülü Nesneler arasında Birleştirilmiş İfade Dili , Java EE 5 Eğitimi yazıyor:

Örtülü Nesneler

JSP ifade dili bir dizi örtük nesne tanımlar:

  • pageContext: JSP sayfasının içeriği. Aşağıdakiler dahil çeşitli nesnelere erişim sağlar:
    • servletContext: JSP sayfasının sunucu uygulaması ve aynı uygulamada bulunan tüm web bileşenleri için bağlam. Bkz. Web Bağlamına Erişim.
    • session: İstemci için oturum nesnesi. Bkz. İstemci Durumunu Koruma.
    • request: JSP sayfasının yürütülmesini tetikleyen istek. Bkz . İsteklerden Bilgi Alma .
    • response: JSP sayfası tarafından döndürülen yanıt. Bkz. Yanıtların Oluşturulması.
  • Ayrıca, aşağıdaki nesnelere kolay erişim sağlayan birkaç örtük nesne de mevcuttur:
    • param: Bir istek parametresi adını tek bir değerle eşler
    • paramValues: İstek parametre adını bir değer dizisiyle eşler
    • header: Bir istek üstbilgisi adını tek bir değerle eşleştirir
    • headerValues: Bir istek üstbilgisi adını bir değer dizisiyle eşler
    • cookie: Bir çerez adını tek bir çerezle eşler
    • initParam: Bağlam başlatma parametre adını tek bir değerle eşler
  • Son olarak, Kapsam Nesnelerini Kullanma bölümünde açıklanan çeşitli kapsamlandırılmış değişkenlere erişime izin veren nesneler vardır.
    • pageScope: Sayfa kapsamındaki değişken adlarını değerleriyle eşler
    • requestScope: İstek kapsamındaki değişken adlarını değerleriyle eşler
    • sessionScope: Oturum kapsamındaki değişken adlarını değerleriyle eşler
    • applicationScope: Uygulama kapsamındaki değişken adlarını değerleriyle eşler

İlginç parçalar koyu renktedir :)

Bu nedenle, sorunuzu cevaplamak için, soruna şu şekilde erişebilmeniz gerekir (EL kullanarak):

${param.accountID}

Veya JSP Komut Dosyalarını kullanarak (önerilmez):

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

EL'i etkinleştirmek için yapmanız gereken bir şey var mı? Ben jboss6 kullanıyorum ve $ {param.accountID} kullandığınızda tarayıcıdan normal metin olarak kabul edilir.
simgineer

@simgineer İlk olarak, dosya sadece düz HTML değil JSP OLMALIDIR. Aşağıdaki konuları okuyun: Anlatım dili, değişken değerini gösterme , EL ifadeleri JBoss AS 4.2.2 değerlendirilmez , JSP İfade Dil çalışmıyor .
informatik01

81

EL (JSP İfade Dili) kullanın:

${param.accountID}


1
Bu URL kod çözme işlemini ele alıyor mu?
vikingsteve

@vikingsteve evet öyle
Neil McGuigan

2
Ancak XSS'yi önlemek için gerekli olan HTML / XML varlıkları olarak yeniden kodlamayı işlemez. <c:out value="${param.accountID}" />Bunu yapmak için JSTL kullanın .
Jules

21

Buraya yorum ekleyebilirsem ...

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

benim için çalışmıyor (0 yazdırıyor).

Bunun yerine, bu çalışır:

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


Dikkat çekmeye değer: param, URL sorgu bağımsız değişkenlerinden daha fazla değer içerir (örn. Model haritasındaki değerler). URL sorgusu bağımsız değişkenlerinde bir değerin olup olmadığını özellikle kontrol etmeniz gerekiyorsa (ve örneğin form gönderiminin bir parçası olarak gönderilecekse) $ {pageContext.request.queryString} 'ye bakabilirsiniz - ancak params gibi güzel bir harita.
Paul



0

konu kaydını, object_id ile silmek istediğiniz örnek

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

ve parametre sorgunuzdaki giriş için kullanılacaktır

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

Bunun için java'da URLbir yöntem çağrısı var request.getParameter, eğer burada bir sayıya döküm yapmak istiyorsanız int, benzer şekilde içine dökülen dize değeri için string. yani gereksinimi için, sadece aşağıdaki satırın altındaki kopyasını,

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

artık bu değeri accountIdtüm sayfada kullanarak çağırabilirsiniz .

burada accountIdparametrenin adı da bunu kullanarak birden fazla parametre alabilirsiniz, ancak bu işe yaramaz. Sadece isteği GETvurursanız yöntemle çalışacak, POSTsonra bir hata olacaktır.

Umarım bu yardımcı olur.


0

sayfa 1: Ayrıntı sayfa 2: <% Dize id = request.getParameter ("userid");%> // artık hsql detay ürününün sql sorgusu için id kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.