พอร์ตเล็ตและ servlet แตกต่างกันอย่างไร


96

ฉันถูกขอให้ทำงานกับพอร์ตเล็ตและพอร์ทัล

ฉันต้องการทราบความแตกต่างระหว่างพอร์ตเล็ตและ servlet หรือไม่

พอร์ตเล็ตแตกต่างกันอย่างไร (อาจเป็นฟังก์ชัน) จาก servlet

คำตอบ:


65

พอร์ตเล็ตเป็นส่วนหนึ่งของมาตรฐาน JSR-168 ที่ควบคุมคอนเทนเนอร์พอร์ทัลและคอมโพเนนต์ นี่เป็นมาตรฐานที่แตกต่างจากมาตรฐานสำหรับคอนเทนเนอร์เว็บ (และ servlets) แม้ว่าจะมีความคล้ายคลึงกันอย่างชัดเจนระหว่างสองมาตรฐานนี้ แต่ก็แตกต่างกันในคอนเทนเนอร์ API วงจรชีวิตการกำหนดค่าการปรับใช้ ฯลฯ

ความแตกต่างที่สำคัญระหว่างพอร์ตเล็ตกับเซิร์ฟเล็ตอาจเป็นได้ว่าในขณะที่เซิร์ฟเล็ตเสมอตอบสนองต่อชนิดเดียวของการดำเนินการ - คำขอพอร์ตเล็ต (เนื่องจากลักษณะของวงจรชีวิตของมันและแข็งแรงผูกภาชนะ) จะสามารถตอบสนองต่อทั้งสองประเภทของการดำเนินการ: การแสดงผลและการร้องขอ มีแน่นอนมากกว่านั้น แต่ฉันพบว่านี่เป็นความแตกต่างหลักระหว่างสองสิ่งนี้เมื่อฉันศึกษาการพัฒนาพอร์ทัล


1
ปรับปรุง: พอร์ตเล็ต 1 JSR 168พอร์ตเล็ต 2 เป็น JSR 286และพอร์ตเล็ต 3 เป็นJSR 362
Basil Bourque

137

ปรับปรุงจาก Source : Servlets Vs Portlets

ความคล้ายคลึงกัน

  1. Servlets และพอร์ตเล็ตเป็นคอมโพเนนต์บนเว็บที่ใช้ Java สำหรับการนำไปใช้งาน

  2. พอร์ตเล็ตถูกจัดการโดยพอร์ตเล็ตคอนเทนเนอร์เช่นเดียวกับที่ servlet ถูกจัดการโดย servlet container

  3. ทั้งเนื้อหาแบบคงที่และไดนามิกสามารถสร้างได้โดย Portlets และ Servlets

  4. วงจรชีวิตของพอร์ตเล็ตและ servlets ถูกควบคุมโดยคอนเทนเนอร์

  5. โมเดลไคลเอ็นต์ / เซิร์ฟเวอร์ถูกใช้สำหรับทั้ง servlets และพอร์ตเล็ต

  6. บรรจุภัณฑ์และการปรับใช้นั้นเหมือนกันคือ WAR / EAR

  7. Application Session มีอยู่ทั้งในคอนเทนเนอร์ Servlet และ Portlet เป็นวิธีการหนึ่งในการแบ่งปันข้อมูล (การสื่อสารระหว่างพอร์ตเล็ตที่หยาบ) จากเฟสการแสดงผลไปยังเฟสการดำเนินการ (หรือเฟสที่ต่ำกว่า) ในคอนเทนเนอร์พอร์ตเล็ต

  8. ทั้ง Servlets และพอร์ตเล็ตใช้สภาพแวดล้อมเซิร์ฟเวอร์ / VM ที่คล้ายคลึงกันที่รองรับ แม้ว่าอาจจำเป็นต้องมีการกำหนดค่าเพิ่มเติมบางอย่างในกรณีของพอร์ตเล็ตเพื่อให้ทำเครื่องหมาย

  9. เครื่องมือ build / DI นั้นคล้ายคลึงกันสำหรับทั้ง Ant, Maven, Gradle และอื่น ๆ ได้รับการสนับสนุนทั้งหมด ส่วนใหญ่ :) - สิ่งนี้เปลี่ยนไปเล็กน้อยกับ Liferay 7


ความแตกต่าง

  1. Servlets สามารถแสดงผลเว็บเพจที่สมบูรณ์ในขณะที่พอร์ตเล็ตแสดงผลแฟรกเมนต์ html ชิ้นส่วนเหล่านี้รวมโดยพอร์ทัลเป็นหน้าเว็บที่สมบูรณ์

  2. ชนิดเนื้อหาของพอร์ตเล็ต JSR 168 สามารถเป็นได้เฉพาะ cHTML, XHTML, WML ไม่รองรับเนื้อหาประเภทอื่น

  3. ไม่อนุญาตให้พอร์ตเล็ตสร้างโค้ด HTML ที่มีแท็กเช่น body, frame, frameset, head, html หรือ title

  4. พอร์ตเล็ตที่แตกต่างจาก servlet ไม่มี URL ที่แนบมาจึงไม่สามารถเข้าถึงได้โดยตรง การเข้าถึงผ่านทางเพจพอร์ทัลที่เก็บพอร์ตเล็ตเท่านั้น

  5. พอร์ตเล็ตสามารถจัดเตรียมการควบคุมเพื่อจัดการกับสถานะหน้าต่างหรือโหมดพอร์ตเล็ต

  6. สามารถวางหลายอินสแตนซ์ของพอร์ตเล็ตเดียวในเพจเดียวกัน

  7. พอร์ตเล็ตสนับสนุนคอนฟิกูเรชันแบบถาวรและการกำหนดเองข้อมูลโปรไฟล์

  8. พอร์ตเล็ตสามารถมีคำร้องขอได้สองประเภท ได้แก่ แสดงคำขอและคำขอดำเนินการ

  9. พอร์ตเล็ตมีสองขอบเขตภายในเซสชัน ขอบเขตแอ็พพลิเคชันสำหรับการสื่อสารระหว่างพอร์ตเล็ตและขอบเขตพอร์ตเล็ตสำหรับการสื่อสารภายในพอร์ตเล็ต

  10. พอร์ตเล็ตไม่สามารถตั้งค่าการเข้ารหัสชุดอักขระของการตอบสนองและไม่สามารถตั้งค่าส่วนหัวการตอบกลับ HTTP

  11. พอร์ตเล็ตไม่มีสิทธิ์เข้าถึง URL ที่ร้องขอ ดังนั้นจึงไม่สามารถเข้าถึงพารามิเตอร์การค้นหาที่ต่อท้าย URL ได้ พอร์ตเล็ตไม่สามารถตั้งค่าคุกกี้

  12. วิธีการทั่วไปของ API พอร์ตเล็ตมีdoView(), doEdit(), doHelp()และ processAction()ขณะที่มี servlet service(), ,doPost() doGet()

  13. ข้อมูลจำเพาะของ Servlet - JSR 369 (Servlet 4.0), JSR 340 (Servlet 3.1), JSR 315 (Servlet 3.0), JSR 154 (Servlet 2.5 & 2.4) ข้อมูลจำเพาะของพอร์ตเล็ต - JSR 168 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)

  14. การปรับใช้พอร์ตเล็ตเกี่ยวข้องกับวิธีการที่แตกต่างจากแอ็พพลิเคชัน Servlet ผู้ให้บริการบางราย (Liferay / Alfresco / WebSphere) สนับสนุนการปรับใช้พอร์ตเล็ตแบบร้อนโดยไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ซึ่งเป็นไปไม่ได้ในกรณีของ servlets โดยไม่ต้องโมดูลาร์แอ็พพลิเคชันโดยใช้ไลบรารีพิเศษเช่น OSGi


แก้ไข (จากความคิดเห็น)

คอนเทนเนอร์พอร์ตเล็ตถูกสร้างขึ้นบนคอนเทนเนอร์ Servlet ในที่สุดอาจกล่าวได้ว่าพอร์ตเล็ตทำงานบน Servlet Container แต่ในขณะที่พัฒนาแอปเราจะดูคอนเทนเนอร์พอร์ตเล็ตแยกจากคอนเทนเนอร์ Servlet / Java EE


ดังนั้นแอ็พพลิเคชันพอร์ทัลจะรันในคอนเทนเนอร์ servlet / JEE และพูดคุยกับพอร์ตเล็ตคอนเทนเนอร์แยกกัน? เครื่องไคลเอนต์ (เบราว์เซอร์) ไม่ทราบถึงคอนเทนเนอร์ของพอร์ตเล็ตหรือพอร์ตเล็ตตามที่ฉันเข้าใจนอกเหนือจากลักษณะที่ปรากฏบนเพจซึ่งจัดการผ่าน JavaScript และการรีเฟรชเพจบางส่วน
Andy

2
คอนเทนเนอร์พอร์ตเล็ตถูกสร้างขึ้นบนคอนเทนเนอร์ Servlet คุณสามารถพูดได้ว่า Portlet container คือ Servlet container ขั้นสูงที่มี 'คุณสมบัติ' มากมาย แต่เพื่อตอบคำถามของคุณอย่างตรงไปตรงมาใช่ ในขณะที่พัฒนาแอพเราดูคอนเทนเนอร์พอร์ตเล็ตแยกจากคอนเทนเนอร์ Servlet / JEE
Ashok Goli

4
วิธีที่ง่ายที่สุดในการคิดคือการที่ servlet แสดงผลหน้าเว็บทั้งหมดและพอร์ตเล็ตแสดงผลส่วนสี่เหลี่ยมเฉพาะ (ส่วนย่อย) ของเว็บเพจ ตัวอย่างเช่นแถบโฆษณาทางด้านขวามือของหน้าข่าวสารสามารถแสดงผลเป็นพอร์ตเล็ต แต่คุณจะไม่ใช้ฟิลด์แก้ไขเดียวเป็นพอร์ตเล็ตเพราะมันละเอียดเกินไป โดยทั่วไปถ้าคุณแบ่งหน้าเว็บออกเป็นส่วนหลัก ๆ สิ่งเหล่านี้เป็นตัวเลือกที่ดีในการสร้างเป็นพอร์ตเล็ต

@ClayFerguson "พอร์ตเล็ตแสดงผลส่วนสี่เหลี่ยมเฉพาะ (ส่วนย่อย) ของหน้าเว็บ" ดังนั้นมันจึงเหมือนกับเฟรมหรือ <div> ...
Tom Brito

@TomBrito - จริงบางส่วน มันเหมือนกับเฟรมหรือ div ซึ่งมีวงจรชีวิตของตัวเองและสามารถแชร์ข้อมูลกับเฟรมหรือ div อื่น ๆ ได้
Ashok Goli

8

พอร์ตเล็ตและ servlets ทั้งสองได้รับคำร้องขอ http และส่งคืนการตอบสนองซึ่งโดยทั่วไปแล้ว HTML บางส่วนสามารถแสดงผลได้โดยเบราว์เซอร์ พอร์ตเล็ตถูกใช้ในบริบทของ "พอร์ทัล" ซึ่งเป็นแนวคิดที่ว่าเพจเดียวที่ผู้ใช้มองเห็นมีชิ้นส่วนจำนวนมากคิดว่าไทล์แต่ละอันมาจากพอร์ตเล็ตที่แตกต่างกัน

ตอนนี้คุณจะได้รับเอฟเฟกต์ "ไทล์" จากการให้บริการปกติ (ดู Struts + Tiles สำหรับตัวอย่างของวิธีการ) บิตพิเศษจากพอร์ตเล็ตคือพอร์ตเล็ตอยู่ในสภาพแวดล้อมที่สมบูรณ์ยิ่งขึ้นโดยพอร์ทัลจัดเตรียม API เพิ่มเติมเพื่อให้ สิ่งที่แสดงโดยพอร์ตเล็ตใด ๆ สามารถกำหนดค่าโดยผู้ใช้แต่ละรายตามการกำหนดค่าตามความชอบของตนและ porlets สามารถสื่อสารกันได้ - กดปุ่มในที่เดียวมีบางอย่างเกิดขึ้นในอีกอันหนึ่ง


6

Servlets มีนิยาม java (แอ็พพลิเคชันที่จัดการคำร้องขอ HTTP GET / POST) ในขณะที่พอร์ตเล็ตมีข้อกำหนดส่วนติดต่อผู้ใช้คอมโพเนนต์ที่ทำหน้าที่เฉพาะที่คล้ายกับวิดเจ็ต windows vista หรือคอมโพเนนต์จำนวนมากที่ใช้ใน stackoverflow ที่นี่ ไม่จำเป็นต้องได้รับการสนับสนุนโดย servlets ทางฝั่งเซิร์ฟเวอร์ แต่มาตรฐานพอร์ตเล็ตได้รับการพัฒนาควบคู่ไปกับ java O'Reilly มีดีกวดวิชา


4

โดยพื้นฐานแล้ว Servlets จะจัดเตรียมเนื้อหาที่โดยปกติจะใช้ทั้งหน้าในเบราว์เซอร์ (เว้นแต่คุณจะใช้เฟรม) และพอร์ตเล็ตจัดเตรียมเนื้อหาที่ล้อมรอบด้วยหน้าต่าง ด้วยพอร์ตเล็ตคุณสามารถมีหลายพอร์ตเล็ตเคียงข้างกันและแต่ละพอร์ตสามารถจัดเตรียมเนื้อหาและฟังก์ชันการทำงานที่แตกต่างจากพอร์ตเล็ตอื่น ๆ พอร์ตเล็ตสามารถจัดเตรียมการโต้ตอบที่สมบูรณ์สำหรับแอ็พพลิเคชันประเภทหนึ่งในขณะที่อีกพอร์ตเล็ตสามารถจัดเตรียมเนื้อหาสำหรับแอ็พพลิเคชันประเภทอื่น พอร์ทัลสามารถจัดเตรียมฟังก์ชันการรักษาเฮาส์บางส่วนและการเข้าจุดเดียวที่ปลอดภัยให้กับพอร์ตเล็ตทั้งหมดบนเพจ สำหรับรายละเอียด (ความเหมือน / ความแตกต่าง) ระหว่างกันโปรดอ่านต่อ นี่คือความคล้ายคลึงกันบางประการ:

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