Sự khác biệt giữa getAttribution () và getParameter ()


282

Sự khác biệt giữa getAttribute()getParameter()phương thức trong HttpServletRequestlớp là gì?


1
Trong lớp / gói / API nào? Bạn đã thử đọc JavaDocs cho các phương thức có liên quan chưa?
Andrew Thompson


thuộc tính chỉ dành cho yêu cầu http giúp các máy chủ hoạt động cùng nhau
bitfishxyz

Câu trả lời:


328
  • getParameter()trả về tham số yêu cầu http. Những người được truyền từ máy khách đến máy chủ. Ví dụ http://example.com/servlet?parameter=1. Chỉ có thể trở lạiString

  • getAttribute()chỉ dành cho sử dụng phía máy chủ - bạn điền yêu cầu với các thuộc tính mà bạn có thể sử dụng trong cùng một yêu cầu. Ví dụ: bạn đặt một thuộc tính trong một servlet và đọc nó từ một tệp JSP. Có thể được sử dụng cho bất kỳ đối tượng, không chỉ chuỗi.


3
Tôi cho rằng khi bạn sử dụng một cái gì đó như ${attrName}trong trang jsp, đó là những thuộc tính bạn đặt bằng cách sử dụng request.getSession().setAttribute()?
ha9u63ar

Vì thuộc tính yêu cầu được lưu trữ ở phía máy chủ, tôi có thể đặt thuộc tính yêu cầu cho yêu cầu chuyển hướng sau máy chủ liên máy chủ không? Tôi muốn gửi thông tin từ một máy chủ này đến một máy chủ khác trong JSF thông qua một thuộc tính trong yêu cầu chuyển hướng. Tôi có thể gửi qua yêu cầu POST ngay bây giờ.
dùng2918640

Trong trường hợp này, "Thông số" dường như đồng nghĩa với "chuỗi truy vấn"
BTRUE

getAttribute()không chỉ dành cho sử dụng phía máy chủ: bạn có thể lấy dữ liệu thuộc tính trên front-end - ví dụ trong các trang jsp và hiển thị nó
phân tích cú pháp

49

Nói chung, một tham số là một giá trị chuỗi thường được biết đến nhất khi được gửi từ máy khách đến máy chủ (ví dụ: một bài mẫu) và được lấy từ yêu cầu của servlet . Ngoại lệ gây khó chịu cho điều này là các tham số ban đầu của ServletContextcác tham số chuỗi được định cấu hình trong web.xml và tồn tại trên máy chủ.

Một thuộc tính là một biến máy chủ tồn tại trong một phạm vi được chỉ định, ví dụ:

  • application, có sẵn cho vòng đời của toàn bộ ứng dụng
  • session, có sẵn cho cuộc sống của phiên
  • request, chỉ có sẵn cho cuộc sống của yêu cầu
  • page (Chỉ dành cho JSP), chỉ khả dụng cho trang JSP hiện tại

"Nói chung, một tham số là một giá trị chuỗi" Khác với các chuỗi chúng ta có thể gửi gì?
Mật ong

^ Các đối tượng như trong trường hợp request.setAttribution
Arijit

37

request.getParameter ()

Chúng tôi sử dụng request.getParameter()để trích xuất các tham số yêu cầu (tức là dữ liệu được gửi bằng cách đăng một biểu mẫu html). Các request.getParameter()luôn trả về Stringgiá trị và các dữ liệu đến từ khách hàng.

request.getAttribution ()

Chúng tôi sử dụng request.getAttribute()để có được một đối tượng được thêm vào phạm vi yêu cầu ở phía máy chủ tức là sử dụng request.setAttribute(). Bạn có thể thêm bất kỳ loại đối tượng nào bạn thích ở đây, StringsĐối tượng tùy chỉnh, trên thực tế là bất kỳ đối tượng nào. Bạn thêm thuộc tính vào yêu cầu và chuyển tiếp yêu cầu đến tài nguyên khác, khách hàng không biết về điều này. Vì vậy, tất cả các mã xử lý điều này thường sẽ có trong JSP / servlets. Bạn có thể sử dụng request.setAttribute()để thêm thông tin bổ sung và chuyển tiếp / chuyển hướng yêu cầu hiện tại sang tài nguyên khác.

Ví dụ: hãy xem xét về First.jsp,

//First Page : first.jsp
<%@ page import="java.util.*" import="java.io.*"%>
<% request.setAttribute("PAGE", "first.jsp");%>
<jsp:forward page="/second.jsp"/>

và second.jsp:

<%@ page import="java.util.*" import="java.io.*"%>
From Which Page : <%=request.getAttribute("PAGE")%><br>
Data From Client : <%=request.getParameter("CLIENT")%>

Từ trình duyệt của bạn, hãy chạy first.jsp? CLIENT = bạn và đầu ra trên trình duyệt của bạn là

From Which Page : *first.jsp*
Data From Client : you

Sự khác biệt cơ bản giữa getAttribute()getParameter()là phương thức đầu tiên trích xuất một đối tượng Java (được tuần tự hóa) và phương thức kia cung cấp một giá trị Chuỗi. Đối với cả hai trường hợp, một tên được đặt sao cho giá trị của nó (có thể là chuỗi hoặc java bean) có thể được tra cứu và trích xuất.


4
Đây là một ví dụ tuyệt vời. Đây phải là câu trả lời được chấp nhận. Câu trả lời được chấp nhận là chính xác nhưng đối với những người mới đến, một ví dụ đã làm rõ mọi thứ. Cảm ơn bạn.
CapturedTree

26

Điều quan trọng cần biết là các thuộc tính không phải là tham số .

Kiểu trả về cho các thuộc tính là một Đối tượng , trong khi loại trả về cho một tham số là Chuỗi . Khi gọi getAttribute(String name)phương thức, hãy nhớ rằng các thuộc tính phải được bỏ.

Ngoài ra, không có thuộc tính cụ thể của servlet và không có tham số phiên .

Bài đăng này được viết với mục đích kết nối với phản hồi của @ Bozho, vì thông tin bổ sung có thể hữu ích cho người khác.


9

Sự khác biệt giữa getAttribution và getParameter là getParameter sẽ trả về giá trị của một tham số được gửi bởi một biểu mẫu HTML hoặc được bao gồm trong chuỗi truy vấn. getAttribution trả về một đối tượng mà bạn đã đặt trong yêu cầu, cách duy nhất bạn có thể sử dụng này là kết hợp với RequestDispatcher. Bạn sử dụng RequestDispatcher để chuyển tiếp yêu cầu đến một tài nguyên khác (JSP / Servlet). Vì vậy, trước khi chuyển tiếp yêu cầu, bạn có thể đặt một thuộc tính sẽ có sẵn cho tài nguyên tiếp theo.


5

- getParameter () :

<html>
<body>
<form name="testForm" method="post" action="testJSP.jsp">
<input type="text" name="testParam" value="ClientParam">
<input type="submit">
</form>
</body>
</html>

    <html>
    <body>
    <%
    String sValue = request.getParameter("testParam");
    %>
    <%= sValue %>
    </body>
    </html>

request.getParameter("testParam")sẽ nhận được giá trị từ dạng đã đăng của hộp đầu vào có tên "testParam" là "Máy khách param". Sau đó nó sẽ in ra, vì vậy bạn sẽ thấy "Thông số khách hàng" trên màn hình. Vì vậy request.getParameter () sẽ lấy ra một giá trị mà máy khách đã gửi. Bạn sẽ nhận được giá trị ở phía máy chủ.

- getAttribution () : request.getAttribute() , đây là tất cả phía máy chủ được thực hiện. BẠN thêm thuộc tính vào yêu cầu và BẠN gửi yêu cầu đến tài nguyên khác, khách hàng không biết về điều này. Vì vậy, tất cả các mã xử lý này thường sẽ có trong servlets.getAttribution luôn trả về đối tượng.


4

getParameter - Được sử dụng để nhận thông tin bạn cần từ trang HTML của Khách hàng

getAttribute - Điều này được sử dụng để nhận các tham số được đặt trước đó trong một trang khác hoặc cùng trang JSP hoặc Servlet.

Về cơ bản, nếu bạn đang chuyển tiếp hoặc chỉ chuyển từ một jsp / servlet sang một cái khác, không có cách nào để có thông tin bạn muốn trừ khi bạn chọn đặt chúng vào Object và sử dụng thuộc tính set để lưu trữ trong biến Phiên.

Sử dụng getAttribution, bạn có thể truy xuất biến Phiên.


3

từ http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribution

"Tham số" là cặp tên / giá trị được gửi từ máy khách đến máy chủ - thông thường, từ một biểu mẫu HTML. Các tham số chỉ có thể có các giá trị Chuỗi. Đôi khi (ví dụ: sử dụng yêu cầu GET), bạn sẽ thấy các mã này được mã hóa trực tiếp vào URL (sau dấu?, Mỗi ở dạng tên = value và mỗi cặp được phân tách bằng dấu &). Những lần khác, chúng được bao gồm trong phần thân của yêu cầu, khi sử dụng các phương thức như POST.

"Thuộc tính" là một cơ chế lưu trữ cục bộ của máy chủ - không có gì được lưu trữ trong các phạm vi phạm vi được truyền bên ngoài máy chủ trừ khi bạn thực hiện điều đó một cách rõ ràng. Các thuộc tính có tên String, nhưng lưu trữ các giá trị Object. Lưu ý rằng các thuộc tính dành riêng cho Java (chúng lưu trữ các Đối tượng Java), trong khi các tham số không phụ thuộc vào nền tảng (chúng chỉ là các chuỗi được định dạng bao gồm các byte chung).

Tổng cộng có bốn phạm vi thuộc tính: "trang" (chỉ dành cho tệp tin và tệp thẻ), "yêu cầu" (giới hạn đối với yêu cầu của khách hàng hiện tại, bị hủy sau khi yêu cầu hoàn thành), "phiên" (được lưu trữ trong phiên của khách hàng, bị vô hiệu sau khi phiên kết thúc), "ứng dụng" (tồn tại cho tất cả các thành phần truy cập trong toàn bộ thời gian triển khai ứng dụng của bạn).

Điểm mấu chốt là: sử dụng các tham số khi lấy dữ liệu từ máy khách, sử dụng các thuộc tính có phạm vi khi lưu trữ các đối tượng trên máy chủ để chỉ sử dụng bên trong ứng dụng của bạn.


3

Một trường hợp khác khi bạn nên sử dụng .getParameter()là khi chuyển tiếp với các tham số trong jsp:

<jsp:forward page="destination.jsp">
    <jsp:param name="userName" value="hamid"/>
</jsp:forward>

Trong destination.jsp, bạn có thể truy cập userNamenhư thế này:

request.getParameter("userName")

-6

Sự khác biệt cơ bản giữa getAttribution ()getParameter () là kiểu trả về.

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)

2
bạn không cứng nhắc về điều này.
Bogdan M.
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.