Cách nhận tham số từ URL bằng JSP


192

Trong JSP làm thế nào để tôi có được các tham số từ URL?

Ví dụ: tôi có một URL www.somesite.com/Transaction_List.jsp?accountID=5
tôi muốn nhận 5.

Có request.getAttribution ("accountID") giống như có phiên hay thứ gì đó tương tự không?

Câu trả lời:


178

Trong yêu cầu GET, các tham số yêu cầu được lấy từ chuỗi truy vấn (dữ liệu theo dấu chấm hỏi trên URL). Ví dụ: URL http://hostname.com?p1=v1&p2=v2 chứa hai tham số yêu cầu - - p1 và p2. Trong một yêu cầu POST, các tham số yêu cầu được lấy từ cả chuỗi truy vấn và dữ liệu đã đăng được mã hóa trong phần thân của yêu cầu.

Ví dụ này cho thấy cách bao gồm giá trị của tham số yêu cầu trong đầu ra được tạo:

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

Nếu trang được truy cập bằng URL:

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

đầu ra kết quả sẽ là:

Hello <b>John Smith</b>!

Nếu tên không được chỉ định trên chuỗi truy vấn, đầu ra sẽ là:

Hello <b>null</b>!

Ví dụ này sử dụng giá trị của một tham số truy vấn trong scriptlet:

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

96
Scriptlets được coi là thực hành xấu.
BalusC

13
Đừng quên xmlEncode .. điều này hiện dễ bị phản ánh xss
Esailija

4
-1 cho lỗ hổng XSS. Cũng sẽ là -1 khi sử dụng scriptlet khi công việc có thể được thực hiện bằng EL nếu tôi có thể bỏ phiếu hai lần. Nghiêm túc mà nói, ĐỪNG LÀM ĐIỀU NÀY .
Jules

Đề xuất sử dụng scriptlets khi tồn tại một giải pháp tốt hơn có hại cho chất lượng mã.
Sologneu Bhuta

2
Về "Scriptlets được coi là thực hành xấu.", Hãy xem câu trả lời này trong một câu hỏi khác để thay thế.
Pixelstix

242

Về các Đối tượng tiềm ẩn của Ngôn ngữ biểu thức hợp nhất , Hướng dẫn Java EE 5 viết:

Đối tượng tiềm ẩn

Ngôn ngữ biểu thức JSP định nghĩa một tập hợp các đối tượng ẩn:

  • pageContext: Bối cảnh cho trang JSP. Cung cấp quyền truy cập vào các đối tượng khác nhau bao gồm:
    • servletContext: Bối cảnh cho servlet của trang JSP và bất kỳ thành phần web nào có trong cùng một ứng dụng. Xem Truy cập bối cảnh web.
    • session: Đối tượng phiên cho máy khách. Xem Duy trì trạng thái khách hàng.
    • request: Yêu cầu kích hoạt việc thực thi trang JSP. Xem Nhận thông tin từ các yêu cầu .
    • response: Phản hồi được trả về bởi trang JSP. Xem Xây dựng phản hồi.
  • Ngoài ra, một số đối tượng ẩn có sẵn cho phép dễ dàng truy cập vào các đối tượng sau:
    • param: Ánh xạ tên tham số yêu cầu đến một giá trị
    • paramValues: Ánh xạ tên tham số yêu cầu đến một mảng các giá trị
    • header: Ánh xạ tên tiêu đề yêu cầu thành một giá trị
    • headerValues: Ánh xạ tên tiêu đề yêu cầu đến một mảng các giá trị
    • cookie: Ánh xạ tên cookie vào một cookie
    • initParam: Ánh xạ tên tham số khởi tạo ngữ cảnh thành một giá trị
  • Cuối cùng, có các đối tượng cho phép truy cập vào các biến có phạm vi khác nhau được mô tả trong Sử dụng Đối tượng Phạm vi.
    • pageScope: Tên biến trong phạm vi trang bản đồ theo giá trị của chúng
    • requestScope: Bản đồ tên biến phạm vi yêu cầu bản đồ đến giá trị của chúng
    • sessionScope: Bản đồ tên biến trong phạm vi phiên tới giá trị của chúng
    • applicationScope: Bản đồ tên biến phạm vi ứng dụng cho các giá trị của chúng

Các phần thú vị được in đậm :)

Vì vậy, để trả lời câu hỏi của bạn, bạn sẽ có thể truy cập nó như thế này (sử dụng EL):

${param.accountID}

Hoặc, bằng cách sử dụng Script Scriptlets (không được khuyến nghị):

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

Có điều gì bạn phải làm để kích hoạt EL không? Tôi đang sử dụng jboss6 và khi tôi sử dụng $ {param.accountID}, nó được coi là văn bản thông thường từ trình duyệt.
simgineer

@simgineer Trước tiên, tệp PHẢI là tệp JSP, không chỉ là HTML đơn giản. Đọc các chủ đề sau: Ngôn ngữ biểu thức, không hiển thị giá trị biến , các biểu thức EL không được đánh giá trong JBoss AS 4.2.2 , Ngôn ngữ biểu thức trong JSP không hoạt động .
informatik01

81

Sử dụng EL (Ngôn ngữ biểu thức JSP):

${param.accountID}


1
Điều này có xử lý giải mã URL không?
vikingsteve

@vikingsteve đúng vậy
Neil McGuigan

2
Nhưng nó không xử lý mã hóa lại dưới dạng các thực thể HTML / XML, cần thiết cho việc ngăn chặn XSS. Sử dụng JSTL <c:out value="${param.accountID}" />để làm điều đó.
Jules

21

Nếu tôi có thể thêm một bình luận ở đây ...

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

không làm việc cho tôi (nó in 0).

Thay vào đó, điều này hoạt động:

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


Đáng chú ý: param bao gồm nhiều giá trị hơn chỉ các đối số truy vấn URL (ví dụ: các giá trị trong bản đồ mô hình). nếu bạn cần kiểm tra cụ thể nếu một giá trị nằm trong các đối số truy vấn URL (và, ví dụ: sẽ được gửi dưới dạng một phần của biểu mẫu), bạn có thể xem $ {pageContext.request.queryString} - nhưng nó không được chia thành một bản đồ đẹp như params là.
Paul



0

ví dụ bạn muốn xóa bản ghi chủ đề với chủ đề_id của nó

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

và tham số sẽ được sử dụng để nhập vào truy vấn của bạn

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

Đối với điều này, URLcó một cuộc gọi phương thức request.getParametertrong java, nếu bạn muốn một số ở đây được truyền vào int, tương tự cho giá trị chuỗi được truyền vào string. Vì vậy, đối với yêu cầu của bạn, chỉ cần sao chép qua dòng dưới trang,

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

bây giờ bạn có thể gọi giá trị này sử dụng accountIdtrong toàn bộ trang.

Đây accountIdlà tên của tham số bạn cũng có thể nhận được nhiều hơn một tham số bằng cách sử dụng thông số này, nhưng điều này không hoạt động. Nó sẽ chỉ hoạt động với GETphương thức nếu bạn nhấn POSTrequest thì chúng sẽ bị lỗi.

Hy vọng điều này là hữu ích.


0

trang 1: Chi tiết trang 2: <% String id = request.getParameter ("userid");%> // bây giờ bạn có thể sử dụng id cho truy vấn sql của sản phẩm chi tiết hsql

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.