2009-05-26 42 views
8

Trong Java, lĩnh vực thuộc tính của một đối tượng HttpServletRequest thể được lấy ra bằng cách sử dụng phương pháp getAttribute:Cách trường thuộc tính của một HttpServletRequest ánh xạ tới một yêu cầu HTTP thô?

String myAttribute = request.getAttribute("[parameter name]"); 

Trường hợp HttpServletRequest thuộc tính dữ liệu được lưu trữ trong một yêu cầu HTTP liệu? Nó có trong thân yêu cầu không?

Ví dụ, tôi đang cố gắng tạo một yêu cầu GET GET thô sẽ được gửi đến servlet của tôi bằng cách sử dụng một số chương trình máy khách. Phương pháp của tôi servlet.doGet() sẽ là một cái gì đó như thế này:

public void doGet(HttpServletRequest request, HttpServletResponse response) 
{ 
    String myAttribute = request.getAttribute("my.username"); 
    ... 
} 

tôi nên đưa dữ liệu của my.username 'ở đâu trong yêu cầu HTTP rướm máu để cho các 'myAttribute' String nhận giá trị "John Doe" sau khi phân bổ?

Trả lời

12

Để thêm vào câu trả lời của @ gid, các thuộc tính không có bất kỳ cách nào trong yêu cầu HTTP khi nó di chuyển qua dây. Chúng được tạo ra (bằng mã của bạn) khi xử lý yêu cầu. Một cách sử dụng rất phổ biến là có một bộ máy chủ (aka create) một số thuộc tính và sau đó chuyển tiếp tới một JSP sẽ sử dụng các thuộc tính đó. Đó là, một yêu cầu HTTP đến và được gửi đến một Servlet. Servlet gắn một số thuộc tính. Việc xử lý phía máy chủ bổ sung được thực hiện, cuối cùng gửi trang đến một JSP, nơi các thuộc tính được sử dụng. Câu trả lời được tạo ra trong JSP. Yêu cầu HTTP và phản hồi HTTP không chứa bất kỳ thuộc tính nào. Thuộc tính là 100% hoàn toàn là thông tin phía máy chủ.

Khi một yêu cầu HTTP đã cho đã hoàn tất, các thuộc tính sẽ có sẵn để thu thập rác (trừ khi chúng được lưu giữ ở một số vị trí khác, chẳng hạn như phiên). Thuộc tính chỉ được liên kết với một đối tượng yêu cầu duy nhất.

17

Chỉ cần rõ ràng như tôi nghĩ @ Câu trả lời của Jon không làm cho nó hoàn toàn rõ ràng. Các giá trị cho getAttribute và setAttribute trên HttpServletRequest không hiện diện trên những gì thực sự được gửi qua dây, chúng chỉ là phía máy chủ.

// only visible in this request and on the server 
request.getAttribute("myAttribute"); 

// value of the User-Agent header sent by the client 
request.getHeader("User-Agent"); 

// value of param1 either from the query string or form post body 
request.getParameter("param1"); 
+0

Thật vậy, cảm ơn vì đã làm rõ Gareth :) – Jon

+0

không phải lo lắng ... ta –

3

Tôi nghĩ điều anh ấy thực sự hỏi là "làm thế nào để tôi lấy tham số vào chương trình của tôi" chứ không phải thuộc tính. Nếu đó là câu hỏi, sau đó gửi các tham số trong yêu cầu GET như một phần của URL (sau dấu hỏi, http://myhost.com/myapp?name=joe&age=26), sau đó truy xuất chúng bằng request.getParameter ("name") và request.getParameter ("age"), hoặc bất cứ thứ gì bạn cần.

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