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?

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>!");
    }
%>

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");
%>

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


81

Gunakan EL (Bahasa Ekspresi JSP):

${param.accountID}


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>


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



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);
}

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.


0

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.