2012-04-25 58 views
7

Cho phép nói rằng tôi có biểu mẫu có phương thức = POST trên trang của tôi. Bây giờ hình thức này có một số yếu tố hình thức cơ bản như textbox, checkbox, vv Nó có URL hành động như http://example.com/someAction.do?param=valueDạng HTML Phương thức POST với chuỗi truy vấn trong URL hành động

Tôi hiểu rằng đây thực sự là một điều trái ngược nhau để làm, nhưng câu hỏi của tôi là nó sẽ làm việc trong thực tế.

Vì vậy, câu hỏi của tôi là;

  1. Vì phương thức biểu mẫu là POST và tôi cũng có chuỗi truy vấn trong URL (? Param = value) Nó có hoạt động chính xác không? tức là tôi có thể truy xuất giá trị param = trên trang nhận của tôi (someAction.do)

  2. Cho phép nói rằng tôi sử dụng Java/JSP để truy cập các giá trị ở phía máy chủ. Vì vậy, cách để có được các giá trị trên phía máy chủ là gì? Cú pháp có giống nhau để truy cập giá trị của param = value cũng như đối với các phần tử biểu mẫu như hộp văn bản/nút radio/hộp kiểm, v.v ... không?

+0

có, bạn có thể truy cập cả hai biến 'POST' và' GET' trên bất kỳ trang nào. để lấy các giá trị đó, sử dụng 'print_r ($ _ GET);' và 'print_r ($ _ POST); ' – hjpotter92

+0

JSP, như hầu hết các ngôn ngữ kịch bản, có thể truy cập riêng các biến GET và POST hoặc có thể truy cập chúng như một phần của một tập dữ liệu ... sẽ có các chức năng khác nhau cho mỗi phương pháp (nếu tôi nhớ chính xác, phương thức getParameter() sẽ truy cập cả hai tham số GET và POST bất kể. Google có thể giúp bạn tìm các thư viện để truy cập từng bộ tham số riêng biệt.) – jlmcdonald

Trả lời

1

1) YES, bạn sẽ có quyền truy cập vào POST và GET biến kể từ khi yêu cầu của bạn sẽ chứa cả hai. Vì vậy, bạn có thể sử dụng $ _GET ["param_name"] và $ _POST ["param_name"] cho phù hợp.

2) Sử dụng JSP bạn có thể sử dụng đoạn mã sau cho cả hai:

<%= request.getParameter("param_name") %>

Nếu bạn đang sử dụng EL (JSP Expression Language), bạn cũng có thể nhận được chúng theo cách sau:

${param.param_name} 

EDIT: nếu param_name hiện diện trong cả QueryString yêu cầu và dữ liệu POST, cả trong số họ sẽ được trả lại như một mảng các giá trị, một trong những đầu tiên là QueryString .

Trong tình huống như vậy, getParameter("param_name) sẽ trở lại là người đầu tiên trong số họ (như đã giải thích here), tuy nhiên cả hai trong số họ có thể được đọc bằng cách sử dụng phương pháp getParameterValues("param_name") theo cách sau:

String[] values = request.getParameterValues("param_name"); 

Đối biết thêm thông tin, read here .

+0

Bạn hiểu câu hỏi và bạn có thể giải thích nó ở trên. Nhưng câu hỏi của tôi là: giá trị nào sẽ chiếm ưu thế cho một tên khóa hiện diện cả trong chuỗi truy vấn và trong biểu mẫu? – ifelsemonkey

+0

@ifelsemonkey cả hai người trong số họ sẽ được trả lại: người đầu tiên là một từ chuỗi truy vấn, và thứ hai là một trong cơ thể POST. Cũng lưu ý rằng 'getParameter()' sẽ chỉ trả lại giá trị đầu tiên của chúng (giá trị chuỗi truy vấn sẽ chiếm ưu thế), nhưng bạn có thể đọc cả hai phương thức này bằng cách sử dụng 'getParameterValues' theo cách sau:' String [] lines = request.getParameterValues ("name"); 'để biết thêm thông tin, [đọc tại đây] (https://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/ServletRequest.html#getParameter%28java.lang.String% 29). Đã chỉnh sửa câu trả lời của tôi cho phù hợp. – Darkseal

0

Có. Bạn có thể lấy các tham số này trong lớp hành động của bạn. Chỉ cần bạn phải làm cho tài sản cùng tên (param trong trường hợp của bạn) với có getters và setters.

Mẫu Mã

private String param; 

{... getters and setters ...} 

khi bạn sẽ làm được điều này, các giá trị tham số (thông qua thông qua URL) sẽ được lưu vào thu khí đó bất động sản nói riêng. và thông qua điều này, bạn có thể làm bất cứ điều gì bạn muốn với giá trị đó.

0

Phương thức POST chỉ ẩn dữ liệu biểu mẫu đã gửi từ người dùng. Người đó không thể xem dữ liệu nào đã được gửi tới máy chủ, trừ khi một công cụ đặc biệt được sử dụng.

Phương thức GET cho phép mọi người xem dữ liệu của nó. Bạn có thể dễ dàng xem dữ liệu từ URL (ví dụ:Bằng cách xem các cặp khóa-giá trị trong chuỗi truy vấn).

Nói cách khác, bạn có thể hiển thị dữ liệu (có thể không quan trọng) cho người dùng bằng cách sử dụng chuỗi truy vấn trong hành động biểu mẫu. Ví dụ: trong bộ lọc bảng dữ liệu. Để giữ trạng thái phân trang hiện tại, bạn có thể sử dụng domain.com/path.do?page=3 làm action. Và bạn có thể ẩn dữ liệu khác trong các thành phần biểu mẫu, như input, textarea, v.v.

Cả hai phương pháp đều có thể được bắt trong máy chủ theo cách tương tự. Ví dụ trong Java, bằng cách sử dụng request.getParameter("page").

Các vấn đề liên quan