ความแตกต่างระหว่างgetAttribute()
และgetParameter()
วิธีการภายในHttpServletRequest
ชั้นเรียนคืออะไร?
ความแตกต่างระหว่างgetAttribute()
และgetParameter()
วิธีการภายในHttpServletRequest
ชั้นเรียนคืออะไร?
คำตอบ:
getParameter()
ส่งคืนพารามิเตอร์คำขอ http สิ่งเหล่านี้ส่งผ่านจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์ http://example.com/servlet?parameter=1
เช่น สามารถคืนได้เท่านั้นString
getAttribute()
สำหรับการใช้งานฝั่งเซิร์ฟเวอร์เท่านั้น - คุณกรอกคำขอด้วยคุณสมบัติที่คุณสามารถใช้ภายในคำขอเดียวกัน ตัวอย่างเช่น - คุณตั้งค่าแอตทริบิวต์ในเซิร์ฟเล็ตและอ่านจาก JSP สามารถใช้สำหรับวัตถุใด ๆ ไม่เพียง แต่สตริง
${attrName}
ในหน้า jsp สิ่งเหล่านี้คือคุณสมบัติที่คุณตั้งค่าโดยใช้request.getSession().setAttribute()
?
getAttribute()
ไม่เพียง แต่สำหรับการใช้งานฝั่งเซิร์ฟเวอร์: คุณสามารถรับข้อมูลแอ็ตทริบิวต์บน front-end - ในหน้า jsp และแสดงมัน
โดยทั่วไปพารามิเตอร์เป็นค่าสตริงที่เป็นที่รู้จักกันมากที่สุดสำหรับการถูกส่งมาจากลูกค้าไปยังเซิร์ฟเวอร์ (เช่นการโพสต์รูปแบบ) และเรียกคืนข้อมูลจากการร้องขอเซิร์ฟเล็ต ข้อยกเว้นที่น่าผิดหวังสำหรับสิ่งนี้คือพารามิเตอร์เริ่มต้นของ ServletContextซึ่งเป็นพารามิเตอร์สตริงที่กำหนดค่าใน web.xml และมีอยู่บนเซิร์ฟเวอร์
แอตทริบิวต์เป็นตัวแปรเซิร์ฟเวอร์ที่มีอยู่ภายในขอบเขตที่ระบุเช่น:
application
พร้อมใช้งานสำหรับชีวิตของแอปพลิเคชันทั้งหมดsession
พร้อมใช้งานสำหรับชีวิตของเซสชั่นrequest
ใช้ได้เฉพาะช่วงอายุของคำขอเท่านั้นpage
(JSP เท่านั้น) พร้อมใช้งานสำหรับหน้า JSP ปัจจุบันเท่านั้น 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) สามารถค้นหาและแตกไฟล์ได้
มันเป็นสิ่งสำคัญที่จะรู้ว่าแอตทริบิวต์ไม่ได้พารามิเตอร์
ประเภทผลตอบแทนสำหรับแอตทริบิวต์เป็นวัตถุในขณะที่ผลตอบแทนประเภทสำหรับพารามิเตอร์เป็นสตริง เมื่อเรียกใช้getAttribute(String name)
เมธอดโปรดจำไว้ว่าต้องโยนแอ็ตทริบิวต์
นอกจากนี้ยังมีไม่มีคุณลักษณะเซิร์ฟเล็ตที่เฉพาะเจาะจงและไม่มีพารามิเตอร์เซสชั่น
โพสต์นี้เขียนโดยมีจุดประสงค์เพื่อเชื่อมต่อกับการตอบกลับของ @ Bozho เนื่องจากข้อมูลเพิ่มเติมที่เป็นประโยชน์สำหรับคนอื่น ๆ
ความแตกต่างระหว่าง getAttribute และ getParameter คือ getParameter จะส่งคืนค่าของพารามิเตอร์ที่ถูกส่งโดยแบบฟอร์ม HTML หรือที่รวมอยู่ในสตริงแบบสอบถาม getAttribute ส่งคืนออบเจกต์ที่คุณตั้งไว้ในคำขอวิธีเดียวที่คุณสามารถใช้ได้คือใช้ร่วมกับ RequestDispatcher คุณใช้ RequestDispatcher เพื่อส่งต่อการร้องขอไปยังทรัพยากรอื่น (JSP / Servlet) ดังนั้นก่อนที่คุณจะส่งต่อคำขอคุณสามารถตั้งค่าแอตทริบิวต์ที่จะสามารถใช้ได้กับทรัพยากรต่อไป
- 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 กลับวัตถุเสมอ
getParameter
- ใช้สำหรับรับข้อมูลที่คุณต้องการจากหน้า HTML ของลูกค้า
getAttribute
- ใช้สำหรับรับพารามิเตอร์ที่ตั้งค่าไว้ก่อนหน้านี้ในหน้า JSP หรือ Servlet เดียวกัน
โดยทั่วไปหากคุณกำลังส่งต่อหรือเพิ่งเปลี่ยนจาก jsp / servlet ไปยังอีกอันหนึ่งไม่มีวิธีที่จะมีข้อมูลที่คุณต้องการเว้นแต่คุณเลือกที่จะใส่ไว้ใน Object และใช้ set-attribute เพื่อเก็บไว้ในตัวแปรเซสชัน
เมื่อใช้ getAttribute คุณสามารถดึงข้อมูลตัวแปรเซสชันได้
จาก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 และไฟล์แท็กเท่านั้น), "คำขอ" (จำกัด ตามคำขอของลูกค้าปัจจุบันถูกทำลายหลังจากคำขอเสร็จสมบูรณ์), "เซสชั่น" (เก็บไว้ในเซสชั่นของลูกค้าไม่ถูกต้อง หลังจากเซสชันสิ้นสุดลง) "แอปพลิเคชัน" (มีอยู่สำหรับส่วนประกอบทั้งหมดในการเข้าถึงในช่วงอายุการใช้งานทั้งหมดของแอปพลิเคชันของคุณ)
บรรทัดล่างคือ: ใช้พารามิเตอร์เมื่อรับข้อมูลจากไคลเอ็นต์ใช้แอ็ตทริบิวต์ที่กำหนดขอบเขตเมื่อเก็บอ็อบเจ็กต์บนเซิร์ฟเวอร์เพื่อใช้ภายในโดยแอ็พพลิเคชันของคุณเท่านั้น
อีกกรณีที่คุณควรใช้.getParameter()
คือเมื่อส่งต่อด้วยพารามิเตอร์ใน jsp:
<jsp:forward page="destination.jsp">
<jsp:param name="userName" value="hamid"/>
</jsp:forward>
ในdestination.jsp
, คุณสามารถเข้าถึงuserName
สิ่งนี้:
request.getParameter("userName")
ความแตกต่างพื้นฐานระหว่างgetAttribute ()และgetParameter ()คือประเภทส่งคืน
java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)