JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #157. การใช้ Java สำหรับเว็บแอปพลิเคชันส่วนหน้...

คอฟฟี่เบรค #157. การใช้ Java สำหรับเว็บแอปพลิเคชันส่วนหน้าในปี 2022

เผยแพร่ในกลุ่ม
ที่มา: Nocodefunctions เรานำเสนอบทความเกี่ยวกับประสบการณ์การพัฒนาเว็บแอปพลิเคชันอิสระโดยใช้ Java คอฟฟี่เบรค #157.  การใช้ Java สำหรับเว็บแอปพลิเคชันส่วนหน้าในปี 2022 - 1

Java สำหรับส่วนหน้า - เป็นไปได้จริงหรือ?

หลายๆ คนเชื่อว่าการใช้ Java สำหรับการพัฒนาส่วนหน้านั้นเป็นไปไม่ได้เลย เพราะท้ายที่สุดแล้ว Java ได้รับการออกแบบสำหรับส่วนหลัง ใช่ นานมาแล้ว Java Applet และ Java Webstart อนุญาตให้คุณเรียกใช้แอปพลิเคชัน Java จากเบราว์เซอร์ แต่นี่คือประวัติศาสตร์โบราณ เก่าแก่เท่ากับปลั๊กอิน Flash แต่ถึงแม้จะไม่มีแอปเพล็ต แต่ก็ยังมีวิธีใช้ Java สำหรับส่วนหน้า - นี่คือ JSP (Java Server Pages) ซึ่งเด็กนักเรียนหลายคนเรียนในบทเรียนวิทยาการคอมพิวเตอร์ อย่างไรก็ตาม แม้ว่า JSP ยังคงถูกกล่าวถึงในหนังสือ Java บางเล่ม แต่เทคโนโลยีนี้ก็เลิกใช้ไปแล้วตั้งแต่ปี 2010 มันเป็นทางตันอีกจริงๆเหรอ? นอกจากนี้ยังมีเฟรมเวิร์กที่ช่วยให้นักพัฒนา Java สามารถ "transpile" (แปลงในรูปแบบที่ซับซ้อน) โค้ดของตนเป็น JavaScript โดยใช้ Google Web Toolkit (GWT ก็ไม่ใช่เรื่องใหม่ เช่นกัน ) หรือผ่านทางJ2Cl (จาก Google เช่นกัน) สิ่งสำคัญที่ควรทราบคือ GWT และ J2Cl ไม่เหมาะสำหรับผู้เริ่มต้น แต่เป็นเครื่องมือระดับองค์กรที่ Google พัฒนาขึ้นเพื่อใช้ในโครงการขนาดใหญ่

ฮีโร่ที่ไม่มีใครร้องของ Java สำหรับส่วนหน้า: Jakarta Faces (JSF)

Java Server Faces (JSF) ซึ่งปัจจุบันรู้จักกันในชื่อ “Jakarta Faces” มีมาตั้งแต่อย่างน้อยต้นปี 2010 ฉันประหลาดใจอยู่เสมอที่ไม่ค่อยมีใครรู้จักและไม่ค่อยมีใครพูดถึง เนื่องจากเฟรมเวิร์กนี้ทำให้ง่ายต่อการพัฒนาเว็บแอปพลิเคชันอย่างรวดเร็ว ปลอดภัย และเชื่อถือได้ JSF นั้นง่ายต่อการเรียนรู้และใช้ประโยชน์จากระบบนิเวศ Java ได้อย่างเต็มที่ ต่อไปนี้คือวิธีการสร้างเว็บเพจที่มีเนื้อหาแบบไดนามิก:
  • สร้างเพจ html (ด้วยนามสกุล .xhtml)
  • เปลี่ยนแท็ก html <head> และ <body> เป็นแท็ก <h:head> และ <h:body>
  • ตอนนี้ หากต้องการแสดงเนื้อหาแบบไดนามิกโดยการเรียกคุณสมบัติบางส่วนในแบ็กเอนด์ เพียงวางโค้ดนี้ไว้หลังแฮชแท็กและระหว่างแถบควบคุม:

    #{backendscript.myText}
จากนั้นสร้างไฟล์ Backendscript.java ในแบ็กเอนด์ของคุณ เพิ่มตัวแปรชื่อString myText = "hi! ยินดีต้อนรับสู่เพจของฉัน!" . มันจะถูกแสดงบนหน้าเว็บ JSF นั้นง่ายมากจริงๆ ได้รับการบันทึกไว้อย่างดีด้วยคำถามมากมาย เกี่ยว กับ Stackoverflow เอกสารอย่างเป็นทางการหนังสือหลายเล่ม ( ลิงก์นี้ และฉันก็ชอบ หนังสือของ David Heffelfinger ด้วย ) และแน่นอนว่าวิดีโอ Youtube

JSF ซับซ้อนหรือไม่? ข้อดีของมันคืออะไร?

JSF ไม่ได้ซับซ้อนเลย นอกจากนี้:
  1. มีการผสานรวมอย่างดีกับ Java IDE แบบคลาสสิก (NetBeans, IntelliJ IDEA และ Eclipse) IDE แต่ละอันมี:
    • โครงการเทมเพลตที่กรอกเทมเพลตสำหรับการกำหนดค่า Maven (ซึ่งโดยวิธีการนั้นง่ายมาก)
    • เครื่องมือแก้ไขข้อบกพร่อง (พร้อมการรีโหลดแบบร้อน อย่างน้อยสำหรับ NetBeans)
    • เครื่องมือการเติมข้อความอัตโนมัติ การรีแฟคเตอร์ การนำทาง และการเน้นข้อผิดพลาดที่มีประสิทธิภาพสำหรับระบบนิเวศ Java IDE สามารถให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับคลาสใดๆ ที่คุณกล่าวถึงในหน้า html (เช่น#{backendscript.myText}ที่กล่าวถึงข้างต้น) หน้า HTML จะรวมเข้ากับโค้ดเบสที่เหลือของคุณจริงๆ!
  2. มันจัดการรูปแบบโค้ดที่ซับซ้อนบนหน้า html ได้อย่างง่ายดาย
    • คุณจำเป็นต้องรีเฟรชบางส่วนของหน้าด้วยการคลิกปุ่มง่ายๆ หรือไม่? เพิ่มคุณสมบัติการอัปเดตให้กับปุ่มของคุณ ตามด้วย ID ของส่วนประกอบที่คุณต้องการอัปเดต
    • เกี่ยวกับการอัปเดตและเนื้อหาแบบไดนามิก: ฉันชอบความเรียบง่ายของ JSF มาก: ส่วนหน้าอัปเดตส่วนหลัง อัปเดตตัวเอง หรือส่วนหลังจะอัปเดตส่วนหน้า ทั้งหมดนี้เป็นข้อกำหนดพื้นฐานของเว็บแอปพลิเคชันและมีอยู่ที่นี่
    • หากคุณต้องการให้ผู้ใช้สามารถดาวน์โหลดไฟล์หรือหลายไฟล์ที่มีเงื่อนไขสำหรับประเภทและขนาดไฟล์ เพียงเพิ่มหนึ่งบรรทัดในโค้ดที่มีพารามิเตอร์ที่ชัดเจน
    • จำเป็นต้องสร้างเว็บไซต์ในหลายภาษาหรือไม่? เพิ่ม แท็ก <f:view>ให้กับ html ของคุณและรับภาษาของผู้ใช้โดยมีเพียงบรรทัดเดียวในแบ็กเอนด์
  3. คุณสามารถเพิ่มและผสมแท็ก HTML, สคริปต์ JS และ CSS ได้ และทั้งหมดนี้ได้รับการปรับให้เหมาะสมสำหรับ SEO
คุณสามารถควบคุม html ที่สร้างโดย JSF ได้อย่างสมบูรณ์ และคุณสามารถเพิ่มโค้ด html และ js ได้ตลอดเวลา ทำให้ง่ายต่อการทำงานร่วมกับนักออกแบบและนักพัฒนาส่วนหน้าที่ไม่รู้จักหรือสนใจเกี่ยวกับ JSF ตอนที่ฉันทำงานกับ CSS ฉันได้รับความช่วยเหลือจากนักออกแบบที่สามารถทำงานกับหน้า HTML ที่ฉันสร้างโดยใช้ JSF ทำการเปลี่ยนแปลงที่จำเป็นได้โดยไม่ยาก JSF สร้างโค้ด HTML ที่คุณสามารถดูและอ่านได้ในเบราว์เซอร์ของคุณ สิ่งนี้มีประโยชน์มากสำหรับการดีบักด้วยเครื่องมือการพัฒนาปกติและการตรวจสอบว่าการดำเนินการ SEO ของคุณได้รับการปฏิบัติอย่างถูกต้อง

Primefaces: รายการส่วนประกอบและธีม JSF ฟรีจำนวนมาก

JSF มาพร้อมกับรายการส่วนประกอบที่พร้อมใช้งานจำนวนมากซึ่งสร้างส่วนคลาสสิกของหน้า html ดังนั้นคุณจึงไม่จำเป็นต้องทำเอง ตัวอย่างเช่น ใช้ แท็ก<h:dataTable>เพื่อสร้างตารางที่แสดงข้อมูลเฉพาะที่โหลดจากแบ็กเอนด์ของคุณ โดยไม่ต้องสร้างใหม่ตั้งแต่ต้น และมีตัวเลือกที่ดีกว่า: Prime Tek ได้พัฒนาชุดส่วนประกอบโอเพ่นซอร์สที่เรียกว่าPrimefaces มาพร้อมกับคุณสมบัติเพิ่มเติมและมีข้อดีหลายประการ ตัวอย่างเช่น แทนที่จะใช้ <h:dataTable> เพียงใช้แท็ก Primefaces <p:dataTable> ซึ่งจะสร้างตารางข้อมูลพื้นฐานที่คุณสามารถเพิ่มสวิตช์คอลัมน์คอลัมน์ไดนามิกหรือแก้ไขฟังก์ชันในตาราง ได้อย่างง่ายดาย

แต่ Java นั้นช้าและหนักใช่ไหม?

1. Java ช้าหรือไม่?

เลขที่ สิ่งที่ตลกก็คือเฟรมเวิร์ก JS เช่น React, Angular และ Vue ถูกสร้างขึ้นโดยสัญญาว่าจะเร็วกว่าและชาญฉลาดกว่า JSF ใน Java เพราะพวกเขาส่งตรรกะของแอปพลิเคชันทั้งหมดไปยังเบราว์เซอร์ของผู้เยี่ยมชมไซต์ทันที JSF ทำงานแตกต่างออกไป: เมื่อผู้ใช้เรียกเพจ (เช่น https://nocodefunctions.com) แอปพลิเคชันในส่วนแบ็กเอนด์จะสร้าง html สำหรับเพจนั้นเท่านั้นและส่งกลับ สิ่งนี้เรียกว่า “การเรนเดอร์ฝั่งเซิร์ฟเวอร์” (SSR) ในทางปฏิบัติ แอปพลิเคชันหน้าเดียวอาจใช้เวลานานมากสำหรับผู้ใช้ในการดึงข้อมูลและโหลดไฟล์จาวาสคริปต์ที่ประกอบขึ้นเป็นแอปพลิเคชันทั้งหมด สิ่งนี้อาจนำไปสู่ประสบการณ์การใช้งานที่ไม่ดี (ต้องรอโหลดหน้าแรก) และปัญหา SEO ด้วยเหตุนี้ การเรนเดอร์ฝั่งเซิร์ฟเวอร์สไตล์ Java จึงได้รับความนิยมอีกครั้ง เนื่องจากถือว่าเหนือกว่าการเรนเดอร์ฝั่งไคลเอ็นต์ในแง่ของความเร็วและประสิทธิภาพ เฟรมเวิร์ก SSRใหม่ กำลังเกิดขึ้น ซึ่งต้องการให้นักพัฒนาคุ้นเคยกับการเรนเดอร์ฝั่งไคลเอ็นต์เพื่อจัดการและผสมผสานตรรกะที่แตกต่างกันทั้งสองนี้

2. Java ยากไหม?

เลขที่ สิ่งที่คุณต้องการในการปรับใช้แอปพลิเคชัน JSF:
  • แอปพลิเคชันนั้นเอง แอปพลิเคชัน JSF “hello world” แบบธรรมดาอาจมีขนาด 10KB หรือน้อยกว่า
  • ทางเลือกคือ Primefaces (ตามที่กล่าวไว้ข้างต้น) หากคุณต้องการส่วนประกอบคุณภาพสูงกว่า นี่เป็นอีก 4.5 MB
ตอนนี้รันมันทั้งหมดบนเซิร์ฟเวอร์ ในการทำเช่นนี้คุณต้องมี:
  1. มีเซิร์ฟเวอร์ในระบบคลาวด์หรือที่อื่น สำหรับเวอร์ชันทดสอบของ Nocodefunctions (https://test.nocodefunctions.com) ฉันใช้ Hetzner โดยที่ฉันเช่าเซิร์ฟเวอร์ Bare Metal ที่มี RAM 2 GB ในราคา 4.15 ยูโรต่อเดือน ฉันสามารถใช้ RAM น้อยลงได้ แต่แอปพลิเคชันของฉันให้บริการที่ต้องใช้ข้อมูลจำนวนมาก และจำเป็นต้องพอดีกับหน่วยความจำ nocodefunctions เวอร์ชันจริง (ไม่ใช่การทดสอบ) ทำงานบนเซิร์ฟเวอร์ขนาดใหญ่ (รวมถึง Hetzner ด้วย) เพื่อรองรับงานที่ต้องใช้ข้อมูลมากของผู้ใช้มากขึ้นในแบบคู่ขนาน - ในราคาต่ำกว่า 50 ยูโรต่อเดือน

  2. คุณต้องติดตั้ง Java นี่เป็นการดาวน์โหลดไฟล์เดียวที่มีขนาดต่ำกว่า 200 MB สำหรับ Mac, Win หรือ Linux ซึ่งฟรีอย่างสมบูรณ์แม้ใช้ในเชิงพาณิชย์

  3. คุณต้องมีเว็บเซิร์ฟเวอร์ Java เพื่อรัน เยอะมาก. โดยส่วนตัวแล้วฉันใช้ Payara Micro (Community Edition) ซึ่งฟรีและดาวน์โหลดไฟล์เดียวขนาด 77MB

  4. เปิดแอปพลิเคชันของคุณ

สรุป: คิดถึง Java!

ฉันรู้สึกว่าโปรแกรมเมอร์บางคนคิดว่า Python, Ruby, PHP, NodeJS + React... เป็นทางเลือกเดียวเมื่อเริ่มต้นเว็บแอปพลิเคชันขนาดเล็ก แต่ตอนนี้ฉันหวังว่าพวกเขาจะพิจารณา Java + JSF สำหรับโปรเจ็กต์ถัดไปด้วย
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION