ความแตกต่างระหว่าง getAttribute () และ getParameter ()


282

ความแตกต่างระหว่างgetAttribute()และgetParameter()วิธีการภายในHttpServletRequestชั้นเรียนคืออะไร?


1
ในคลาส / แพ็คเกจ / API ใด คุณลองอ่าน JavaDocs สำหรับวิธีการที่เกี่ยวข้องหรือไม่?
Andrew Thompson


คุณลักษณะเฉพาะสำหรับคำขอ http ที่ช่วยให้ servlets ทำงานร่วมกันได้
bitfishxyz

คำตอบ:


328
  • getParameter()ส่งคืนพารามิเตอร์คำขอ http สิ่งเหล่านี้ส่งผ่านจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์ http://example.com/servlet?parameter=1เช่น สามารถคืนได้เท่านั้นString

  • getAttribute()สำหรับการใช้งานฝั่งเซิร์ฟเวอร์เท่านั้น - คุณกรอกคำขอด้วยคุณสมบัติที่คุณสามารถใช้ภายในคำขอเดียวกัน ตัวอย่างเช่น - คุณตั้งค่าแอตทริบิวต์ในเซิร์ฟเล็ตและอ่านจาก JSP สามารถใช้สำหรับวัตถุใด ๆ ไม่เพียง แต่สตริง


3
ฉันคิดว่าเมื่อคุณใช้บางสิ่งบางอย่างเช่น${attrName}ในหน้า jsp สิ่งเหล่านี้คือคุณสมบัติที่คุณตั้งค่าโดยใช้request.getSession().setAttribute()?
ha9u63ar

เนื่องจากแอ็ตทริบิวต์คำร้องขอถูกเก็บไว้ที่ฝั่งเซิร์ฟเวอร์ฉันสามารถตั้งค่าแอ็ตทริบิวต์คำร้องขอสำหรับคำร้องขอการเปลี่ยนเส้นทางระหว่างเซิร์ฟเวอร์ ฉันต้องการส่งข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่นใน JSF ผ่านแอตทริบิวต์ในคำขอเปลี่ยนเส้นทาง ฉันสามารถส่งคำขอ POST ได้ในขณะนี้
user2918640

ในกรณีนี้ "พารามิเตอร์" ดูเหมือนจะตรงกันกับ "สตริงข้อความค้นหา"
BTRUE

getAttribute()ไม่เพียง แต่สำหรับการใช้งานฝั่งเซิร์ฟเวอร์: คุณสามารถรับข้อมูลแอ็ตทริบิวต์บน front-end - ในหน้า jsp และแสดงมัน
parsecer

49

โดยทั่วไปพารามิเตอร์เป็นค่าสตริงที่เป็นที่รู้จักกันมากที่สุดสำหรับการถูกส่งมาจากลูกค้าไปยังเซิร์ฟเวอร์ (เช่นการโพสต์รูปแบบ) และเรียกคืนข้อมูลจากการร้องขอเซิร์ฟเล็ต ข้อยกเว้นที่น่าผิดหวังสำหรับสิ่งนี้คือพารามิเตอร์เริ่มต้นของ ServletContextซึ่งเป็นพารามิเตอร์สตริงที่กำหนดค่าใน web.xml และมีอยู่บนเซิร์ฟเวอร์

แอตทริบิวต์เป็นตัวแปรเซิร์ฟเวอร์ที่มีอยู่ภายในขอบเขตที่ระบุเช่น:

  • applicationพร้อมใช้งานสำหรับชีวิตของแอปพลิเคชันทั้งหมด
  • sessionพร้อมใช้งานสำหรับชีวิตของเซสชั่น
  • requestใช้ได้เฉพาะช่วงอายุของคำขอเท่านั้น
  • page (JSP เท่านั้น) พร้อมใช้งานสำหรับหน้า JSP ปัจจุบันเท่านั้น

"โดยทั่วไปพารามิเตอร์คือค่าสตริง" นอกจากสตริงที่เราจะส่งได้อย่างไร
ฮันนี่

^ วัตถุเช่นเดียวกับในกรณีที่มีการร้องขอ
setAttribute

37

request.getParameter ()

เราใช้request.getParameter()เพื่อดึงพารามิเตอร์คำขอ (เช่นข้อมูลที่ส่งโดยการโพสต์แบบฟอร์ม html) request.getParameter()เสมอกลับStringค่าและข้อมูลที่มาจากลูกค้า

request.getAttribute ()

เราใช้จะได้รับวัตถุเพิ่มขอบเขตการร้องขอในฝั่งเซิร์ฟเวอร์เช่นใช้request.getAttribute() request.setAttribute()คุณสามารถเพิ่มประเภทของวัตถุใด ๆ ที่คุณชอบที่นี่, Stringsวัตถุที่กำหนดเองในความเป็นจริงวัตถุใด ๆ คุณเพิ่มคุณสมบัติให้กับคำขอและส่งต่อการร้องขอไปยังทรัพยากรอื่นลูกค้าไม่ทราบเกี่ยวกับเรื่องนี้ ดังนั้นการจัดการโค้ดทั้งหมดนี้จะอยู่ใน JSP / servlets คุณสามารถใช้request.setAttribute()เพื่อเพิ่มข้อมูลพิเศษและส่งต่อ / เปลี่ยนเส้นทางคำขอปัจจุบันไปยังทรัพยากรอื่น

ตัวอย่างเช่นลองพิจารณา first.jsp

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

และ second.jsp:

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

จากเบราว์เซอร์ของคุณให้เรียกใช้first.jsp? CLIENT = คุณและผลลัพธ์ในเบราว์เซอร์ของคุณคือ

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

ความแตกต่างพื้นฐานระหว่างgetAttribute()และgetParameter()คือวิธีแรกแยกวัตถุ Java (ต่อเนื่อง) และอื่น ๆ ให้ค่าสตริง สำหรับทั้งสองกรณีจะมีการตั้งชื่อเพื่อให้ค่าของมัน (ไม่ว่าจะเป็นสตริงหรือ java bean) สามารถค้นหาและแตกไฟล์ได้


4
นี่เป็นตัวอย่างที่ดี นี่ควรเป็นคำตอบที่ยอมรับได้ คำตอบที่ได้รับการยอมรับนั้นถูกต้อง แต่สำหรับผู้มาใหม่มีตัวอย่างที่ชัดเจนทุกอย่าง ขอบคุณ.
จับภาพทรี

26

มันเป็นสิ่งสำคัญที่จะรู้ว่าแอตทริบิวต์ไม่ได้พารามิเตอร์

ประเภทผลตอบแทนสำหรับแอตทริบิวต์เป็นวัตถุในขณะที่ผลตอบแทนประเภทสำหรับพารามิเตอร์เป็นสตริง เมื่อเรียกใช้getAttribute(String name)เมธอดโปรดจำไว้ว่าต้องโยนแอ็ตทริบิวต์

นอกจากนี้ยังมีไม่มีคุณลักษณะเซิร์ฟเล็ตที่เฉพาะเจาะจงและไม่มีพารามิเตอร์เซสชั่น

โพสต์นี้เขียนโดยมีจุดประสงค์เพื่อเชื่อมต่อกับการตอบกลับของ @ Bozho เนื่องจากข้อมูลเพิ่มเติมที่เป็นประโยชน์สำหรับคนอื่น ๆ


9

ความแตกต่างระหว่าง getAttribute และ getParameter คือ getParameter จะส่งคืนค่าของพารามิเตอร์ที่ถูกส่งโดยแบบฟอร์ม HTML หรือที่รวมอยู่ในสตริงแบบสอบถาม getAttribute ส่งคืนออบเจกต์ที่คุณตั้งไว้ในคำขอวิธีเดียวที่คุณสามารถใช้ได้คือใช้ร่วมกับ RequestDispatcher คุณใช้ RequestDispatcher เพื่อส่งต่อการร้องขอไปยังทรัพยากรอื่น (JSP / Servlet) ดังนั้นก่อนที่คุณจะส่งต่อคำขอคุณสามารถตั้งค่าแอตทริบิวต์ที่จะสามารถใช้ได้กับทรัพยากรต่อไป


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")จะได้รับค่าจากแบบฟอร์มการโพสต์ของกล่องใส่ชื่อ "testParam" ซึ่งเป็น "ลูกค้าพารามิเตอร์" จากนั้นจะพิมพ์ออกมาดังนั้นคุณควรเห็น "Client Param" บนหน้าจอ ดังนั้น request.getParameter () จะดึงค่าที่ลูกค้าส่งมา คุณจะได้รับค่าทางฝั่งเซิร์ฟเวอร์

- getAttribute (): request.getAttribute()นี่คือฝั่งเซิร์ฟเวอร์ทั้งหมด คุณเพิ่มคุณสมบัติให้กับคำขอและคุณส่งคำขอไปยังทรัพยากรอื่นลูกค้าไม่ทราบเกี่ยวกับสิ่งนี้ ดังนั้นการจัดการรหัสทั้งหมดนี้มักจะอยู่ใน servlets.getAttribute กลับวัตถุเสมอ


4

getParameter - ใช้สำหรับรับข้อมูลที่คุณต้องการจากหน้า HTML ของลูกค้า

getAttribute - ใช้สำหรับรับพารามิเตอร์ที่ตั้งค่าไว้ก่อนหน้านี้ในหน้า JSP หรือ Servlet เดียวกัน

โดยทั่วไปหากคุณกำลังส่งต่อหรือเพิ่งเปลี่ยนจาก jsp / servlet ไปยังอีกอันหนึ่งไม่มีวิธีที่จะมีข้อมูลที่คุณต้องการเว้นแต่คุณเลือกที่จะใส่ไว้ใน Object และใช้ set-attribute เพื่อเก็บไว้ในตัวแปรเซสชัน

เมื่อใช้ getAttribute คุณสามารถดึงข้อมูลตัวแปรเซสชันได้


3

จากhttp://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute

"พารามิเตอร์" เป็นคู่ชื่อ / ค่าที่ส่งจากลูกค้าไปยังเซิร์ฟเวอร์ - โดยทั่วไปจากรูปแบบ HTML พารามิเตอร์สามารถมีค่าสตริงได้เท่านั้น บางครั้ง (เช่นใช้คำขอ GET) คุณจะเห็นสิ่งที่เข้ารหัสเหล่านี้โดยตรงใน URL (หลัง?, แต่ละอันใน form name = value และแต่ละคู่คั่นด้วย &) ในบางครั้งพวกเขาจะรวมอยู่ในเนื้อหาของคำขอเมื่อใช้วิธีการเช่น POST

"attribute" เป็นกลไกการจัดเก็บข้อมูลภายในเซิร์ฟเวอร์ - ไม่มีสิ่งใดที่เก็บไว้ใน Attribues ที่มีขอบเขตถูกส่งออกไปนอกเซิร์ฟเวอร์เว้นแต่คุณจะทำสิ่งนั้นอย่างชัดเจน แอตทริบิวต์มีชื่อ String แต่เก็บค่า Object โปรดทราบว่าคุณลักษณะเฉพาะสำหรับ Java (พวกเขาเก็บ Java Objects) ในขณะที่พารามิเตอร์เป็นอิสระแพลตฟอร์ม (พวกเขาเป็นเพียงสตริงที่จัดรูปแบบประกอบด้วยไบต์ทั่วไป)

มีสี่ขอบเขตของคุณลักษณะทั้งหมด: "หน้า" (สำหรับ JSP และไฟล์แท็กเท่านั้น), "คำขอ" (จำกัด ตามคำขอของลูกค้าปัจจุบันถูกทำลายหลังจากคำขอเสร็จสมบูรณ์), "เซสชั่น" (เก็บไว้ในเซสชั่นของลูกค้าไม่ถูกต้อง หลังจากเซสชันสิ้นสุดลง) "แอปพลิเคชัน" (มีอยู่สำหรับส่วนประกอบทั้งหมดในการเข้าถึงในช่วงอายุการใช้งานทั้งหมดของแอปพลิเคชันของคุณ)

บรรทัดล่างคือ: ใช้พารามิเตอร์เมื่อรับข้อมูลจากไคลเอ็นต์ใช้แอ็ตทริบิวต์ที่กำหนดขอบเขตเมื่อเก็บอ็อบเจ็กต์บนเซิร์ฟเวอร์เพื่อใช้ภายในโดยแอ็พพลิเคชันของคุณเท่านั้น


3

อีกกรณีที่คุณควรใช้.getParameter()คือเมื่อส่งต่อด้วยพารามิเตอร์ใน jsp:

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

ในdestination.jsp, คุณสามารถเข้าถึงuserNameสิ่งนี้:

request.getParameter("userName")

-6

ความแตกต่างพื้นฐานระหว่างgetAttribute ()และgetParameter ()คือประเภทส่งคืน

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

2
คุณไม่เข้มงวดกับเรื่องนี้
Bogdan M.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.