Cara mendapatkan parameter dari URL dengan JSP

192

Di JSP bagaimana saya mendapatkan parameter dari URL?

Misalnya saya punya URL yang www.somesite.com/Transaction_List.jsp?accountID=5
ingin saya dapatkan 5.

Apakah ada request.getAttribute ("accountID") seperti ada untuk sesi atau yang serupa?

Josh Curren
sumber

Jawaban:

178

Dalam permintaan GET, parameter permintaan diambil dari string kueri (data mengikuti tanda tanya pada URL). Misalnya, URL http://hostname.com?p1=v1&p2=v2 berisi dua parameter permintaan - - p1 dan p2. Dalam permintaan POST, parameter permintaan diambil dari string kueri dan data yang diposkan yang disandikan di badan permintaan.

Contoh ini menunjukkan bagaimana memasukkan nilai parameter permintaan dalam output yang dihasilkan:

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

Jika halaman diakses dengan URL:

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

output yang dihasilkan adalah:

Hello <b>John Smith</b>!

Jika nama tidak ditentukan pada string kueri, hasilnya adalah:

Hello <b>null</b>!

Contoh ini menggunakan nilai parameter kueri dalam skrip:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>
Sajad Bahmani
sumber
96
Skrip dianggap praktik buruk.
BalusC
13
Jangan lupa xmlEncode .. ini saat ini rentan terhadap xss yang direfleksikan
Esailija
4
-1 untuk kerentanan XSS. Juga akan menjadi -1 untuk menggunakan skrip ketika pekerjaan dapat dilakukan dengan menggunakan EL jika saya dapat memilih dua kali. Serius, JANGAN MELAKUKAN INI .
Jules
Menyarankan penggunaan skrip ketika ada solusi yang lebih baik berbahaya bagi kualitas kode.
Suketu Bhuta
2
Mengenai "Scriptlets dianggap praktik buruk.", Lihat jawaban ini di pertanyaan lain untuk alternatif.
Pixelstix
242

Tentang Objek Tersirat dari Unified Expression Language , Java EE 5 Tutorial menulis:

Objek Tersirat

Bahasa ekspresi JSP mendefinisikan sekumpulan objek implisit:

  • pageContext: Konteks untuk halaman JSP. Menyediakan akses ke berbagai objek termasuk:
    • servletContext: Konteks untuk servlet halaman JSP dan komponen web apa pun yang terkandung dalam aplikasi yang sama. Lihat Mengakses Konteks Web.
    • session: Objek sesi untuk klien. Lihat Mempertahankan Status Klien.
    • request: Permintaan yang memicu eksekusi halaman JSP. Lihat Mendapatkan Informasi dari Permintaan .
    • response: Respons dikembalikan oleh halaman JSP. Lihat Membangun Tanggapan.
  • Selain itu, beberapa objek implisit tersedia yang memungkinkan akses mudah ke objek berikut:
    • param: Memetakan nama parameter permintaan ke satu nilai
    • paramValues: Memetakan nama parameter permintaan ke array nilai
    • header: Memetakan nama header permintaan ke nilai tunggal
    • headerValues: Memetakan nama header permintaan ke array nilai
    • cookie: Memetakan nama cookie ke satu cookie
    • initParam: Memetakan nama parameter inisialisasi konteks ke nilai tunggal
  • Akhirnya, ada objek yang memungkinkan akses ke berbagai variabel cakupan yang dijelaskan dalam Menggunakan Objek Lingkup.
    • pageScope: Memetakan nama variabel dengan cakupan halaman ke nilainya
    • requestScope: Memetakan nama variabel dengan cakupan permintaan ke nilainya
    • sessionScope: Memetakan nama variabel dengan cakupan sesi untuk nilainya
    • applicationScope: Memetakan nama variabel cakupan aplikasi ke nilainya

Bagian yang menarik dicetak tebal :)

Jadi, untuk menjawab pertanyaan Anda, Anda harus dapat mengaksesnya seperti ini (menggunakan EL):

${param.accountID}

Atau, menggunakan Scriptlet JSP (tidak disarankan):

<%
    String accountId = request.getParameter("accountID");
%>
Thivent Pascal
sumber
Apakah ada sesuatu yang harus Anda lakukan untuk mengaktifkan EL? Saya menggunakan jboss6 dan ketika saya menggunakan $ {param.accountID} itu diperlakukan sebagai teks biasa dari browser.
pemain simgineer
@simgineer Pertama, file HARUS JSP, bukan hanya HTML biasa. Baca topik berikut: Bahasa ekspresi, jangan tampilkan nilai variabel , ekspresi EL tidak dievaluasi di JBoss AS 4.2.2 , Bahasa Ekspresi di JSP tidak berfungsi .
informatik01
81

Gunakan EL (Bahasa Ekspresi JSP):

${param.accountID}

Taylor Leese
sumber
1
Apakah ini menangani penguraian URL?
vikingsteve
@vikingsteve ya itu
Neil McGuigan
2
Tapi itu tidak menangani reencoding sebagai entitas HTML / XML, yang diperlukan untuk pencegahan XSS. Gunakan JSTL <c:out value="${param.accountID}" />untuk melakukan itu.
Jules
21

Jika saya dapat menambahkan komentar di sini ...

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

tidak bekerja untuk saya (mencetak 0).

Sebaliknya, ini berfungsi:

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

Léa Massiot
sumber
Patut dicatat: param mencakup lebih banyak nilai daripada hanya argumen kueri URL (misalnya nilai dalam peta model). jika Anda perlu memeriksa secara spesifik apakah suatu nilai ada dalam argumen kueri URL (dan, misalnya akan dikirimkan sebagai bagian dari pengiriman formulir), Anda dapat melihat $ {pageContext.request.queryString} - tetapi tidak dipecah menjadi sebuah peta yang bagus seperti params adalah.
Paul
4
String accountID = request.getParameter("accountID");
johannes
sumber
0

Misalnya Anda ingin menghapus catatan subjek dengan subject_id-nya

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

dan parameter akan digunakan untuk input pada permintaan Anda

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

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

Untuk ini URLada pemanggilan metode request.getParameterdi java, jika Anda ingin nomor di sini dilemparkan ke dalam int, sama untuk nilai string dilemparkan ke dalam string. jadi untuk kebutuhan Anda, cukup salin melewati baris di bawah halaman,

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

Anda sekarang dapat memanggil nilai ini menggunakan accountIdseluruh halaman.

di sini accountIdadalah nama parameter Anda juga bisa mendapatkan lebih dari satu parameter menggunakan ini, tetapi ini tidak berfungsi. Itu hanya akan bekerja dengan GETmetode jika Anda menekan POSTpermintaan maka mereka akan menjadi kesalahan.

Semoga ini bisa membantu.

jay Patel
sumber
0

halaman 1: Detail halaman 2: <% String id = request.getParameter ("userid");%> // sekarang Anda dapat menggunakan id untuk kueri sql produk detail hsql

batal
sumber