Sự khác biệt giữa getAttribute()
và getParameter()
phương thức trong HttpServletRequest
lớp là gì?
Sự khác biệt giữa getAttribute()
và getParameter()
phương thức trong HttpServletRequest
lớp là gì?
Câu trả lời:
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.
${attrName}
trong trang jsp, đó là những thuộc tính bạn đặt bằng cách sử dụng request.getSession().setAttribute()
?
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ó
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 ServletContext là cá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ụngsession
, có sẵn cho cuộc sống của phiênrequest
, chỉ có sẵn cho cuộc sống của yêu cầupage
(Chỉ dành cho JSP), chỉ khả dụng cho trang JSP hiện tại 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ề String
giá 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()
và 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.
Đ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.
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.
- 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.
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.
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.
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 userName
như thế này:
request.getParameter("userName")
Sự khác biệt cơ bản giữa getAttribution () và getParameter () là kiểu trả về.
java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)