วิธีรับพารามิเตอร์จาก URL ด้วย JSP


193

ใน JSP ฉันจะรับพารามิเตอร์จาก URL ได้อย่างไร

ตัวอย่างเช่นฉันมี URL ที่www.somesite.com/Transaction_List.jsp?accountID=5
ฉันต้องการรับ 5

มี request.getAttribute ("accountID") เหมือนมีเซสชันหรืออะไรที่คล้ายกันไหม

คำตอบ:


178

ในคำขอ GET พารามิเตอร์คำขอจะนำมาจากสตริงข้อความค้นหา (ข้อมูลต่อจากเครื่องหมายคำถามบน URL) ตัวอย่างเช่น URL http://hostname.com?p1=v1&p2=v2มีพารามิเตอร์คำขอที่สอง - - p1 และ p2 ในคำขอ POST พารามิเตอร์คำขอจะนำมาจากทั้งสตริงข้อความค้นหาและข้อมูลที่โพสต์ซึ่งเข้ารหัสในเนื้อความของคำขอ

ตัวอย่างนี้แสดงวิธีรวมค่าของพารามิเตอร์คำร้องขอในเอาต์พุตที่สร้างขึ้น:

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

หากหน้านั้นถูกเข้าถึงด้วย URL:

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

ผลลัพธ์ที่ได้จะเป็น:

Hello <b>John Smith</b>!

หากไม่ได้ระบุชื่อบนสตริงเคียวรีเอาต์พุตจะเป็น:

Hello <b>null</b>!

ตัวอย่างนี้ใช้ค่าของพารามิเตอร์การสืบค้นใน scriptlet:

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

97
สคริปเล็ตนั้นถือว่าไม่ดี
BalusC

14
อย่าลืม xmlEncode .. ขณะนี้มีความเสี่ยงที่จะสะท้อน xss
Esailija

5
-1 สำหรับช่องโหว่ XSS จะเป็น -1 สำหรับการใช้ scriptlet เมื่องานสามารถทำได้โดยใช้ EL ถ้าฉันสามารถลงคะแนนสองครั้ง อย่างจริงจังไม่ทำเช่นนี้
จูลส์

การแนะนำการใช้ scriptlet เมื่อมีวิธีการแก้ปัญหาที่ดีกว่านั้นเป็นอันตรายต่อคุณภาพของรหัส
Suketu Bhuta

2
เกี่ยวกับ "สคริปเล็ตถือเป็นแนวปฏิบัติที่ไม่ดี" ดูคำตอบนี้ในคำถามอื่นสำหรับทางเลือกอื่น
Pixelstix

243

เกี่ยวกับออบเจ็กต์โดยนัยของUnified Expression Language , Java EE 5 Tutorialเขียน:

วัตถุโดยนัย

ภาษานิพจน์ JSP กำหนดชุดของวัตถุโดยนัย:

  • pageContext: บริบทสำหรับหน้า JSP ให้การเข้าถึงวัตถุต่าง ๆ รวมถึง:
    • servletContext: บริบทสำหรับเซิร์ฟเล็ตของเพจ JSP และองค์ประกอบเว็บใด ๆ ที่มีอยู่ในแอปพลิเคชันเดียวกัน ดูการเข้าถึงบริบทเว็บ
    • session: วัตถุเซสชันสำหรับลูกค้า ดูการบำรุงรักษาสถานะลูกค้า
    • request: คำขอเริ่มการทำงานของหน้า JSP ดูการรับข้อมูลจากการร้องขอ
    • response: การตอบกลับที่ส่งคืนโดยหน้า JSP ดูการสร้างคำตอบ
  • นอกจากนี้ยังมีออบเจ็กต์หลายอย่างที่อนุญาตให้เข้าถึงวัตถุต่อไปนี้ได้อย่างง่ายดาย:
    • param: แมปชื่อพารามิเตอร์คำขอเป็นค่าเดียว
    • paramValues: แผนที่ชื่อพารามิเตอร์คำขอไปยังอาร์เรย์ของค่า
    • header: แมปชื่อส่วนหัวคำขอเป็นค่าเดียว
    • headerValues: แผนที่ชื่อส่วนหัวคำขอไปยังอาร์เรย์ของค่า
    • cookie: แมปชื่อคุกกี้กับคุกกี้เดียว
    • initParam: แผนที่ชื่อพารามิเตอร์เริ่มต้นบริบทเป็นค่าเดียว
  • ในที่สุดก็มีวัตถุที่อนุญาตให้เข้าถึงตัวแปรที่กำหนดขอบเขตต่าง ๆ ที่อธิบายไว้ในการใช้ขอบเขตวัตถุ
    • pageScope: แผนที่ชื่อตัวแปรที่กำหนดขอบเขตหน้ากับค่าของแผนที่
    • requestScope: แผนที่ชื่อตัวแปรที่กำหนดขอบเขตคำขอเป็นค่าของพวกเขา
    • sessionScope: แผนที่ชื่อตัวแปรที่กำหนดขอบเขตเซสชันเป็นค่า
    • applicationScope: แผนที่ชื่อตัวแปรที่กำหนดขอบเขตแอปพลิเคชันเป็นค่า

ส่วนที่น่าสนใจเป็นตัวหนา :)

ดังนั้นเพื่อตอบคำถามของคุณคุณควรสามารถเข้าถึงได้เช่นนี้ (โดยใช้ EL):

${param.accountID}

หรือใช้JSP Scriptlets (ไม่แนะนำ):

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

คุณต้องทำอะไรบ้างเพื่อเปิดใช้งาน EL ฉันใช้ jboss6 และเมื่อฉันใช้ $ {param.accountID} จะถือว่าเป็นข้อความปกติจากเบราว์เซอร์
simgineer

@simgineer ก่อนอื่นไฟล์จะต้องเป็น JSP ไม่ใช่แค่ HTML ธรรมดา อ่านหัวข้อต่อไปนี้: ภาษาแสดงออกไม่แสดงค่าตัวแปร , EL สำนวนที่ยังไม่ได้ประเมินใน JBoss AS 4.2.2 , การแสดงออกภาษา JSP ไม่ทำงาน
informatik01

81

ใช้ EL (ภาษานิพจน์ JSP):

${param.accountID}


1
สิ่งนี้จัดการการถอดรหัส URL หรือไม่
vikingsteve

@ vikingsteve ใช่มันทำ
Neil McGuigan

2
แต่ไม่ได้จัดการการเข้ารหัสซ้ำเป็นเอนทิตี HTML / XML ซึ่งจำเป็นสำหรับการป้องกัน XSS ใช้ JSTL <c:out value="${param.accountID}" />เพื่อทำเช่นนั้น
จูลส์

21

ถ้าฉันอาจเพิ่มความคิดเห็นที่นี่ ...

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

ใช้งานไม่ได้สำหรับฉัน (มันพิมพ์ 0)

สิ่งนี้ใช้ได้ผล:

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


สิ่งที่ควรทราบ: พารามิเตอร์มีค่ามากกว่าเพียงแค่อาร์กิวเมนต์การสืบค้น URL (เช่นค่าในแผนที่แบบจำลอง) หากคุณจำเป็นต้องตรวจสอบโดยเฉพาะหากค่าอยู่ในอาร์กิวเมนต์ของการสืบค้น URL (และเช่นจะถูกส่งเป็นส่วนหนึ่งของการส่งแบบฟอร์ม) คุณสามารถดู $ {pageContext.request.queryString} - แต่มันไม่ได้แยกออกเป็น แผนที่ดีเหมือน params คือ
พอล



0

ตัวอย่างที่คุณต้องการลบระเบียนหัวเรื่องด้วย 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");
}

และพารามิเตอร์จะใช้สำหรับการป้อนข้อมูลในแบบสอบถามของคุณ

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

สำหรับวันนี้URLมีวิธีการเรียกrequest.getParameterใน java ถ้าคุณต้องการเป็นจำนวนมากที่นี่โยนลงไปในทำนองเดียวกันสำหรับโยนเข้าไปในค่าสตริงint stringดังนั้นสำหรับความต้องการของคุณเพียงคัดลอกผ่านด้านล่างบรรทัดในหน้า

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

ตอนนี้คุณสามารถเรียกค่านี้ใช้accountIdทั้งหน้า

นี่accountIdคือชื่อของพารามิเตอร์ที่คุณสามารถรับได้มากกว่าหนึ่งพารามิเตอร์โดยใช้สิ่งนี้ แต่สิ่งนี้ไม่ได้ผล มันจะทำงานกับGETวิธีการถ้าคุณกดPOSTคำขอแล้วพวกเขาจะเป็นข้อผิดพลาด

หวังว่านี่จะเป็นประโยชน์


0

หน้า 1: หน้ารายละเอียด 2: <% String id = request.getParameter ("userid");%> // ตอนนี้คุณสามารถใช้ id สำหรับการสืบค้น sql ของผลิตภัณฑ์รายละเอียด hsql

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.