تطور تطبيقات الويب جافا

تاريخ تطوير تطبيقات الويب في لغة برمجة Java مع أمثلة على استخدامها على مدار الفترة من ظهور مواصفات servlet إلى يومنا هذا.



المقالة لا تدعي أنها أكاديمية في مجملها ودقتها. إن تفسير جميع الحقائق المذكورة والأمثلة المقدمة تعكس فقط معرفة ووجهة نظر وأخطاء مؤلف المقال. الغرض من الكتابة هو محاولة الحصول على صورة كاملة للوضع الحالي لتطبيقات الويب Java . بالإضافة إلى ذلك ، يمكن للقارئ استخدام المعلومات المقدمة كنقطة انطلاق لمزيد من البحث المستقل.

نموذج التعليمة البرمجية موجود في مستودعات GitHub : عرض توضيحي لكل مكتبة وإطار عمل والتطبيق من الجزء الأخير من المقالة . في وقت كتابة هذا التقرير ، هناك 37 مثالًا في المستودع الأول ، مع مرور الوقت ، سيتم تحديث قائمتهم.

الجدول الزمني لظهور التقنيات والمكتبات والأطر وشعبيتها


لتسهيل الإدراك ، يتم جدولة البيانات ويتم توضيحها بشكل أكبر بواسطة المخططات. يتم تجميع عناصر الجدول بشروط ، إن أمكن. يتم تصنيف المكتبات والأطر حسب الشعبية بترتيب تنازلي.

المعلومات عن الشعبية مأخوذة من مصدرين. المصدر الأول هو مؤشر شعبية إطار عمل ZeroTurnaround RebelLabs . كان آخر تحديث له في نهاية عام 2017 ، وكان مصحوبًا بمدونتين من المدونات قبل ذلك: الأول والثاني . انضم مؤلف نشر المدونة الثانية ، سيمون مابل ، إلى سنيك ، حيث واصل جمع هذه الإحصاءات المفيدة وتحليلها. المصدر الثاني هو دراسته ، التي نشرت في مجلة جافا ، نوفمبر / ديسمبر 2018 (السؤال 17).

تمت إضافة مجموعة من المواصفات إلى أعلى الجدول ، وتم إضافة الأطر التي لم يتم تضمينها في مؤشر الشعبية ، والتي ما زلت أريد أن أذكرها ، في نهاية الجدول.
عددالتكنولوجيا ، المكتبة ، الإطارتاريخ الإصدار الأولتاريخ آخر إصدار مستقرشعبية،٪
نوعالنوع الفرعيRebelLabs ، 2017مجلة جافا ، 2018
1مواصفةبريمج12.19962019/09/10
2JSP1999/09/272019/09/10
3J2EE ،
جافا EE ،
جاكرتا
1999/12/122019/09/10
4JAX-WS2003/10/282019/09/10
5JSF2004/03/112019/09/10
6JAX-RS2008/08/092019/09/10
7ربيعربيع mvc12.20052019/02/0828.8236
8التمهيد الربيع04.20142019/02/0813.3540
9الربيع webflux09.20172019/02/08
10وجوه JavaServerكسوف موجارا2004/03/032018/11/3015.219
11أباتشي MyFaces11.20052019/05/23
12مجموعة أدوات الويب من Google2006/05/162017/10/197.746
13الكؤوس المقدسة10.20052019/07/116.353
14الدعامات05.20002019/01/095.49
15Dropwizard21.12.20112019/07/084.93
16اللعب05.20082019/06/193.263
17JHipster2013/10/212019/09/202.493
18JAX-RSاباتشي cxf04.20082019/08/132.44
19RESTEasy09.20082019/08/30
20جيرسي05.20102019/09/10
21Restlet01.201301.2018
22Vaadin20062019/09/162.155
23درز20072013/07/251.94
24بوابة صغيرة06.20052019/09/091.912
25نجود20002019/06/091.9
26شرارة جافا20112019/05/220.77
27Vert.x20112019/08/220.76
28Rapidoid08.20142018/05/270.25
29Lagom03.20162019/04/090.24
30Ratpack20132019/08/180.13
31Javalin2017/05/242019/08/11
32Micronaut2018/10/232019/09/13
33MicroProfileTomEE27.04.20122019/06/21
34الارجوحة الشبكية2014/02/272018/03/05
35Thorntail01.20162019/07/17
36KumuluzEE2016/04/042019/06/29
37Payara الصغير07.20172019/08/28
38حرية مفتوحة2017/09/192019/06/09
39Helidon2018/09/192019/09/13

في الجدول الزمني الأول ، يتم عرض البيانات من الجدول بنفس الترتيب كما في الجدول. تم تصنيف المجموعات الحالية حسب الشعبية. في مجموعات (المواصفات ، يتم ترتيب عناصر Spring ، JSF ، JAX-RS ، MicroProfile ) بالترتيب الزمني لمظهرها. يمكنك النقر فوق أي من الصور لتكبيرها.



في الجدول الزمني الثاني ، يتم ترتيب نفس المعلومات حسب تاريخ ظهور الإصدار الأول من جميع العناصر. من السهل أن ترى أنه في عام 2001 ، على سبيل المثال ، لكتابة تطبيق على شبكة الإنترنت ، يمكنك فقط الاختيار من بين إطارين رئيسيين حاليين - Tapestry و Struts . في بداية عام 2014 ، كان من المستحيل استخدام Spring Boot (تم إصدار أول إصدار رسمي له لاحقًا) ولم يكن من المنطقي استخدام Seam (لم يعد موجودًا).



يظهر الرسم البياني الدائري مؤشر شعبية الإطار وفقًا RebelLabs في نهاية عام 2017 . يشارك كل إطار من الأطر في الفهرس مرة واحدة ، أي أن إجمالي الفائدة هو 100. ويوضح الرسم البياني الثاني نتيجة دراسة من مجلة Java Magazine ، 2018 . سألت الدراسة عن الأطر المستخدمة على شبكة الإنترنت ، وتم السماح لها باختيار أكثر من إطار في الإجابة. لهذا السبب ، كل نسبة مئوية مستقلة عن الأخرى ولا يمكن تلخيصها.



مواصفة


حجر الزاوية في وجود جميع المكتبات هو المعايير والمواصفات التي تستند إليها. توجد المواصفات في شكل طلبات مواصفات Java ( JSRs ) التي تم تطويرها من خلال إجراء رسمي يسمى عملية مجتمع جافا ( JCP ).

قائمة JSRs المتعلقة Java Enterprise Edition هنا . يعرض الجدول أدناه فقط أهم اثنين من المواصفات المختارة منهم - Servlet و Java EE (الأخير هو مجموعة من المواصفات الأخرى). لم يتم قبول الإصدارات الأولى من المواصفات كجزء من JCP ، لذلك ليس لديهم أرقام JSR .

منذ 12 سبتمبر 2017 ، تم نقل Java EE إلى إدارة مؤسسة Eclipse Foundation وتسمى الآن Jakarta EE . تم استبدال JCP بعملية تحديد مواصفات جاكرتا EE كعملية لتطوير واعتماد المواصفات.

باستخدام HTTP Servlets


فيما يلي بعض الأمثلة لإنشاء تطبيق ويب دون أي مكتبات أو أطر عمل. سيتم إعطاء الروابط إلى موقع الكود مع تعليق موجز بالتتابع. هناك طرق أكثر مماثلة ، وأوضح منها.

المثال الأول ( helloworld-web-servlet-xml module) في واصف النشر web.xml يحدد الفئة الموروثة من فئة الملخص HttpServlet مع تطبيقه الخاص لأسلوب doGet () . لأول مرة ، تم ذكر ملف web.xml النشر في مواصفات Servlet 2.2 (1999).

في المثال الثاني (وحدة تعليقات helloworld-web-servlet-annotation ) ، يكون web.xml واصف نشر web.xml مفقودًا. فوق نفس الفئة الموروثة من فئة الملخص HttpServlet ، هناك تعليق توضيحي WebServlet الذي ظهر في Servlet 3.0 (2011).

المثال الثالث (وحدات helloworld-web-servlet-interface-jar و helloworld-web-servlet-interface-war ) أكثر تعقيدًا بعض الشيء. يوضح كيفية استخدام تطبيق واجهة ServletContainerInitializer ، والتي ظهرت أيضًا في Servlet 3.0 . في أول وحدة نمطية helloworld-web-servlet-interface-jar لا يوجد حتى الآن web.xml واصف نشر web.xml ، هناك فئة مشتقة من فئة الملخص HttpServlet . يسمح Servlet 3.0 بتطبيق واجهة ServletContainerInitializer لإضافة مكونات servlet برمجياً ، بما في ذلك إجراء تسجيل servlet. يتم تكوين فئة التنفيذ لواجهة ServletContainerInitializer باستخدام مفهوم واجهة مزود الخدمة ( SPI ) عن طريق تحديد اسمها في ملف META-INF/services/javax.servlet.ServletContainerInitializer . الوحدة الأولى بإنشاء ملف JAR. ينشئ ملف WAR الوحدة النمطية الثانية helloworld-web-servlet-interface-war ، ويتم تحديد الوحدة الأولى في قائمة التبعيات. يتم استخدام أسلوب مشابه لتطبيق واجهة ServletContainerInitializer بواسطة إطار عمل JSF و Spring في فئتي FacesInitializer و SpringServletContainerInitializer ، على التوالي.

قدم Servlet 3.0 أيضًا servlets غير المتزامنة ، في Servlet 3.1 (2013) - الإدخال / الإخراج غير المحظور ، في Servlet 4.0 (2017) - دعم HTTP / 2 .

العمر قبل الربيع


نجود Apache Tapestry هو إطار عمل حقيقي لتطبيق الويب. تم إصدار الإصدار الأول منه في عام 2000 ؛ حيث يستمر إصدار الإصدارات الجديدة الآن. عند تصميم Tapestry ، تم استعارة الأفكار من WebObjects ، وهي إطار ويب ظهر قبل عدة سنوات. تستخدم التطبيقات التي تستخدم Tapestry (على سبيل المثال ، helloworld-web-tapestry module) البنية المعيارية وملزمة مكونات واجهة المستخدم لصفحات الويب مع فئات Java المقابلة لها.

الدعامات ظهر Apache Struts بشكل متزامن تقريبًا مع الإطار السابق ، في مايو 2000 ، ويستمر أيضًا في التطور حتى يومنا هذا. في المثال المبني عليها ( الوحدة النمطية helloworld-web-struts ) ، يمكنك أن ترى في ملف واصف النشر web.xml إشارة للفئة StrutsPrepareAndExecuteFilter كمرشح. يعمل هذا الفصل كمدير طلب ، ويختار إجراءً يتوافق مع الطلب. تعتمد Apache Struts ، مثل Tapestry ، على نمط تصميم MVC .

للمساهمة في المشروع في مارس 2004 ، تم إصدار مواصفات وجوه JavaServer وتطبيقين متعاقبين لها: يسمى الآن Eclipse Mojarra (المعروف سابقًا باسم Sun JSF Reference Implementation و JSF RI و Mojarra و Oracle Mojarra ) و Apache MyFaces . النهج الرئيسي الذي تدعمه المواصفات هو استخدام المكونات. يتطابق كلا المثالين (وحدات helloworld-web-jsf-mojarra و helloworld-web-jsf-myfaces ) تمامًا مع بعضهما البعض ، باستثناء مكتبات التبعية. تحدد التطبيقات وتعرض على صفحات الويب إصدار تطبيق مواصفات JSF واسم التطبيق ( Mojarra أو MyFaces ) وإصدار التطبيق.

بوابة صغيرة يونيو 2005 وإصدار الإصدار الأول من Wicket Framework ، يشبه عقائديًا Tapestry و JavaServer Faces . نهج موجه للمكونات وربط قوالب HTML لصفحات الويب بفئات Java . منذ يونيو 2007 ، ينتمي إطار العمل إلى مؤسسة Apache Software Foundation ، وتغيير اسمه إلى Apache Wicket . جاءت ذروة شعبية الإطار في الفترة 2008-2009 ، ثم تلاه انخفاض تدريجي في الاهتمام به. يستمر إصدار الإصدارات الجديدة ؛ يمكن مشاهدة تطبيق مثال في وحدة helloworld-web-wicket .

الكؤوس المقدسة في أكتوبر 2005 ، تم إصدار الإصدار الأول من Grails ، وهو إطار لبناء تطبيقات الويب المكتوبة بلغة Groovy JVM . كما يوحي اسم المنتج ، فإن Ruby on Rails ، وهو إطار مكتوب بلغة Ruby ، كان له تأثير قوي على إنشائه. يعتمد أيضًا على نمط MVC . الميزة المميزة هي استخدام ملفات عرض GSP ( صفحات خادم Groovy ) كقوالب. تم إنشاء مثال ( helloworld-web-grails module) ، وتم إنشاؤه ويمكن تشغيله باستخدام البرنامج المساعد Grails Maven ، البرنامج المساعد لـ Maven .

Spring MVC و Spring Boot و Spring WebFlux


ربيع ظهرت النسخة الأولى من Spring Framework ، بما في ذلك Spring MVC ، في ديسمبر 2005. فئة servlet HTTP فيه هو DispatcherServlet . فيما يلي بعض الأمثلة بترتيب زمني لظهور الميزات (الإصدارات الجديدة من مواصفات Servlet ، إصدار Spring التمهيد لأول مرة في أبريل 2014 ، ثم Spring WebFlux في سبتمبر 2017) ، والتي يتم استخدامها فيها.

في المثال الأول (الوحدة النمطية helloworld-web-spring-mvc-xml ) ، يتم تحديد web.xml واصف نشر web.xml باعتباره servlet DispatcherServlet . في وحدة التحكم مع الطريقة الوحيدة التي تعالج طلب GET ، هناك تعليقات توضيحية مقابلة ( وحدة التحكم و RequestMapping ). العرض ملف JSP .

في المثال الثاني (وحدة helloworld-web-spring-mvc-java ) ، يكون web.xml واصف نشر web.xml مفقودًا ويتم استخدام الميزة المقدمة في Servlet 3.0 لتنفيذ تكوين البرنامج. الفئة الموروثة من AbstractAnnotationConfigDispatcherServletInitializer (تنفذ في النهاية تطبيق واجهة ServletContainerInitializer مع SPI ) و JavaConfig (يتم استخدام التكوين باستخدام رمز البرنامج مع التعليق التوضيحي للتكوين معًا ).

يوضح المثال الثالث (وحدة helloworld-web-spring-boot-mvc ) تبسيطًا كبيرًا للمشروع مع الحفاظ على نفس الوظيفة بفضل ظهور Spring Boot . بالإضافة إلى فئة وحدة التحكم ، هناك بالإضافة إلى ذلك فئة واحدة فقط موروثة من SpringBootServletInitializer ويتم شرحها بواسطة SpringBootApplication .

يُظهر المثال الرابع (وحدة helloworld-web-spring-boot-webflux ) ، إلى جانب Spring Spring ، استخدام Spring WebFlux ، الذي تمت إضافته إلى Spring Framework مؤخرًا نسبيًا. يستخدم Spring WebFlux المبادئ التفاعلية ومفاعل المشروع . من بين النهجين الرئيسيين ( الأسلوب الوظيفي والقائم على التعليق التوضيحي ) ، يتم تضمين الأول في المثال.

بعد مجيء الربيع ، 2000s


vaadin بدأ تطوير Vaadin في عام 2002 كمكمل لإطار آخر ، Millstone 3 . خلال عام 2006 ، تم إنشاء ما تم إنشاؤه كمنتج تجاري نهائي. حتى مايو 2009 ، كان يحمل اسم IT Mill Toolkit ، فقط بعد تلك اللحظة التي أصبحت Vaadin . في نهاية عام 2007 ، تم استبدال جزء العميل الذي تم تنفيذه بشكل مستقل سابقًا بواسطة Google Web Toolkit ( GWT ). يوضح المثال (وحدة helloworld-web-vaadin ) أنه يوجد ملف فئة Java واحد فقط يتم فيه إنشاء جميع مكونات واجهة المستخدم برمجيًا ، مع إخفاء التفاصيل الفنية ذات المستوى المنخفض.

GWT ظهر منتج مثير للاهتمام للغاية ، Google Web Toolkit ( GWT ) ، في مايو 2006 ، وتم إصدار أحدث إصدار منذ عامين. لكتابة أجزاء الخادم والعميل ، يتم منحك الفرصة لاستخدام نفس لغة Java . يقوم برنامج التحويل البرمجي الخاص بتحويل كود العميل في Java إلى JavaScript . يتكون المثال من ثلاث وحدات - helloworld-web-gwt-client (جزء العميل) ، helloworld-web-gwt-server (جزء الخادم) و helloworld-web-gwt-share (رمز مشترك لأجزاء العميل والخادم). أثناء التطوير ، يمكنك استخدام المكوّن الإضافي المناسب Maven لإطلاق جزء العميل في Super Dev Mode ، حيث يسهل خادم Code ما يسمى إعادة ترجمة رمز Java الذي تم تغييره.

درز بدأت Seam حياتها في مايو 2007 وتوقف عن الوجود في عام 2012. كان يعتمد على Enterprise JavaBeans ( EJB3 ) و JavaServer Faces ( JSF ). التي وضعتها JBoss ، ثم جزء من ريد هات . واقترح مفاهيم مختلفة مثيرة للاهتمام (على سبيل المثال ، bijection ، والتي كانت هناك شروح المقابلة ). لا يزال موقع الإطار موجودًا ، لكن في بعض أقسامه لم تعد بعض الروابط ذات صلة. تطبيق مثال موجود في وحدة التماس helloworld-web-seam .

JAX-RS تم إصدار الإصدار الأول من مواصفات Java API لخدمات RESTful Web Services ( JAX-RS ) في عام 2008 ( JSR 311 ) ، وتم تحديث المواصفات لاحقًا ( JSR 339 ، JSR 370 ). أشهر تطبيقات JAX-RS هي أطر عمل Apache CXF (الإصدار الأول هو أبريل 2008) ، و RESTEasy (سبتمبر 2008) ، وجيرسي (مايو 2010) ، و Restlet (يناير 2013). تم العثور على أمثلة لاستخدامها في الوحدات النمطية helloworld-web-jaxrs-apache-cxf و helloworld-web-jaxrs-resteasy و helloworld-web-jaxrs-jersey و helloworld-web-jaxrs-restlet ، على التوالي .

اللعب ظهرت لعبة Play Framework في مايو 2008. مكتوب بلغة برمجة Scala JVM . يتيح لك إنشاء تطبيقات ويب بناءً عليها في كل من Scala و Java . ميزة خاصة لمطوري Play هي التزامهم بأداة بناء sbt . لهذا السبب ، لكتابة مثال (وحدة helloworld-web-play ) ، اضطررت إلى بذل بعض الجهود للبناء تحت Maven ، باستخدام المكون الإضافي المناسب لذلك.

2010s ، وآخر مرة


sparkjava في عام 2011 ، تم إصدار النسخة الأولى من أعمال Spark المصغرة الرائعة ، والتي تم إصدارها تحت تأثير Sinatra ، والتي كتبت في روبي . اللاكونكونية والخفة والبساطة في بناء الجملة متأصلة فيه. مثال ( helloworld-web-sparkjava module ) يوضح كيف يمكنك كتابة تطبيق كامل في سطرين فقط. قد تكون قدرات الإطار كافية إذا لم تكن بحاجة إلى شيء معقد للغاية في التطبيق الخاص بك.

vertx في عام 2011 ، ظهر Vert.x ، وهو إطار موجه نحو الأحداث يعمل على JVM . تم كتابته تحت التأثير الكبير لـ Node.js ، والذي كان يسمى في الأصل Node.x. له طبيعة متعددة اللغات ، مما يسمح لك باستخدام Java أو JavaScript أو Groovy أو Ruby أو Ceylon أو Scala أو Kotlin عند استخدامك للإطار. بناءً على مكتبة Netty ، فإنه يحتوي على العديد من الميزات والمزايا المميزة. مثال على ذلك في وحدة helloworld-web-vertx .

dropwizard كان ديسمبر 2011 هو الوقت الأولي لوجود Dropwizard ، حيث يضع مؤلفوه منتجهم كشيء بين المكتبة والإطار. الأجزاء الرئيسية الثلاثة التي تتكون منها هي مكتبات Jetty ( HTTP ) و Jersey ( JAX-RS ) و Jackson ( JSON ). تستمر في التطور في الوقت الحاضر ، حتى مع وجود بعض الشعبية. يوضح المثال (وحدة helloworld-web-dropwizard ) بنية نموذجية لتطبيق ويب يستند إلى Dropwizard .

ratpack Ratpack هو إطار آخر (إلى جانب Spark ) ، مستوحى من مكتبة سيناترا وكتب إلى حد كبير بلغة JVM Groovy . علاقة فرانك سيناترا بما يسمى حزمة الفئران ("حزمة الفئران"). تم إصدار الإصدار الأول من الإطار في عام 2013 ، ولا تزال الإصدارات الجديدة تصدر. استنادًا إلى مكتبة Netty ، سريع وسهل الاستخدام وسهل الاستخدام وقابل للتوسعة بدرجة كبيرة. يمكن رؤية مثال في وحدة helloworld-web-ratpack .

jhipster أكتوبر 2013 ، ظهور مشروع JHipster الغريب ، وهو منشئ إطار تطبيق الويب. لإنشاء جزء العميل ، يتم دعم إطار جافا سكريبت Angular و React و Vue (لا يزال الأخير مدعومًا في الوضع التجريبي ). تستند الواجهة الخلفية إلى Boot Spring . لبناء المشروع ، يمكن اختيار Maven أو Gradle . مثال على تطبيق JHipster الذي تم إنشاؤه في وحدة helloworld-web-jhipster .

rapidoid في أغسطس 2014 ، تم إصدار الإصدار الأول من إطار Rapidoid ، وهو بسيط وسريع وموحد . تشتمل الوحدة النمطية الموصى بها والتي يوصى باستخدامها في بدء استخدام إطار العمل على التفاعل عبر مكتبات HTTP ، و Hibernate ، و Hibernate Validator ، و MySQL Connector ، و Logback . مع زيادة الاحتياجات ، يمكن توسيع مجموعة الوحدات المستخدمة. مثال ( helloworld-web-rapidoid module ) يسمح لك بتقييم الحد الأدنى من الكود المطلوب للحصول على تطبيق ويب بسيط.

lagom مارس 2016 ، إصدار إطار Lagom . يضع مؤلفو منتج البرنامج هذا تطبيقه لتقسيم التطبيقات المتجانسة القديمة إلى خدمات ميكروية تفاعلية تتسع بشكل جيد أثناء تشغيلها. يستند الإطار إلى Akka و Play Framework . يمكن استخدام لغات البرمجة Java أو Scala لتطوير تطبيقاتها. يوجد مثال يستند إلى Lagom في وحدات helloworld-web-lagom-api و helloworld-web-lagom-impl .

javalin في الآونة الأخيرة ، في مايو 2017 ، تم إصدار مكتبة جافالين البسيطة والخفيفة . يشير منشئوها أنفسهم إلى مؤلفي أطر عمل سيناترا وسبارك التي سبق ذكرها. تركز المكتبة على لغات Java و Kotlin . إنه يضمن عدم وجود تعليقات توضيحية والحاجة إلى وراثة أي فئات مكتبة ، رمز موجزة قدر الإمكان ، ودعم WebSocket ، HTTP / 2 وطلبات غير متزامنة. مثال على ذلك يمكن رؤيته في وحدة helloworld-web-javalin .

micronaut النجم الصاعد بين أطر الويب ، التي ظهرت أول نسخة منها منذ عام فقط ، في أكتوبر 2018 ، هو Micronaut . يدعم لغات البرمجة Java و Groovy و Kotlin JVM . ميزته الكبيرة هي بداية سريعة للتطبيقات بناءً عليه وانخفاض استهلاك الذاكرة. يتم ضمان ذلك من خلال تطبيق التبعيات في مرحلة الترجمة ، وليس في وقت التشغيل. ومن الميزات الأخرى دعمًا ممتازًا للبرمجة التفاعلية ، ويمكن استخدام مكتبات RxJava و Reactor و Akka . مثال ( helloworld-web-micronaut module ) يوضح إنشاء تطبيق بسيط قائم على Micronaut .

MicroProfile


microprofile نظرًا للثقل الحالي لـ Java EE ، فإن هناك عددًا من الشركات التي تحتاج إلى خدمات ميكروية لتطوير مجموعة من المواصفات خفيفة الوزن ، والتي تم تنفيذها - في سبتمبر 2016 ، تم إصدار MicroProfile 1.0. في البداية ، تضمنت المجموعة ثلاثة مواصفات فقط ( CDI ، JAX-RS و JSON-P ). زادت المتطلبات تدريجياً ؛ بحلول الإصدار 3.0 ، نمت قائمة المواصفات بشكل ملحوظ.

عددمواصفةنسخة MicroProfile
1.01.11.21.31.42.02.12.23.0
1CDI1.21.21.21.21.22.02.02.02.0
2التكوين1.01.11.21.31.31.31.31.3
3خطأ التسامح1.01.01.11.11.12.02.0
4الصحة1.01.01.01.01.01.02.0
5JAX-RS2.02.02.02.02.02.12.12.12.1
6JSON-B1.01.01.01.0
7JSON-P1.01.01.01.01.01.11.11.11.1
8JWT المصادقة1.01.01.11.11.11.11.1
9المقاييس1.01.11.11.11.11.12.0
10افتح API1.01.01.01.01.11.1
11تتبع مفتوحة1.01.11.11.21.31.3
12اكتب Safe Rest Client1.01.11.11.11.21.3

حاليًا ، هناك أطر ويب ترضي MicroProfile بدرجات متفاوتة. تم اختيار سبعة منهم للتوضيح ، فيما يلي مراسلات إطار العمل مع إصدارات MicroProfile . معلومات كاملة عن جميع الأطر الحالية التي تنفذ MicroProfile هنا .
عددالإطارنسخة MicroProfile
1.01.11.21.31.42.02.12.23.0
1TomEE7.1.08.0.0-M18.0.0-M28.0.0-M3
2الارجوحة الشبكية2.0
3Thorntail2.1.0.
نهائي
2.3.0.
نهائي
2.4.0.
نهائي
2.5.0.
نهائي
4KumuluzEE2.1.02.5.23.0.03.2.03.2.03.2.03.2.03.5.0
5Payara الصغير174181182183183191192
6حرية مفتوحة17.0.
0.3
18.0.
0.1
18.0.
0.3
18.0.
0.3
18.0.
0.4
19.0.
0.3
19.0.
0.7
7Helidon0.9.41.01.2.01.2.01.2.01.2.01.2.0

microprofile1 تتضمن المجموعة الأولى من الأطر تلك التي كانت موجودة بالفعل في وقت إصدار MicroProfile 1.0: TomEE (الإصدار الأول تم إصداره في أبريل 2012) و Hammock (فبراير 2014) و Thorntail (التي كانت تسمى سابقًا WildFly Swarm ، January 2016) و KumuluzEE (أبريل 2016). في أغلب الأحيان ، تم تحقيق الامتثال لمجموعة جديدة من المواصفات من خلال إزالة كل ما كان لا لزوم له من المنتج الحالي. أمثلة الاستخدام موجودة في الوحدات النمطية helloworld-web-microprofile-tomee و helloworld-web-microprofile-hammock و helloworld-web-microprofile-thorntail و helloworld-web-microprofile-kumuluzee .

microprofile2 تتضمن المجموعة الثانية من الإطارات الأطر التي ظهرت بعد الإصدار الأول من MicroProfile : Payara Micro (يوليو 2017) ، Open Liberty (سبتمبر 2017) و Helidon (سبتمبر 2018). بالنسبة إلى هذه الأطر ، أصبح العكس ممكنًا - منذ بداية التنفيذ ، على سبيل المثال ، تم تطوير Helidon خصيصًا من أجل التوافق مع MicroProfile ، وبالتالي لم يكن لديه أي شيء غير ضروري في تكوينه. يمكن رؤية أمثلة عن تطبيقات البناء في الوحدات النمطية helloworld-web-microprofile-payara و helloworld-web-microprofile-openliberty و helloworld-web-microprofile-helidon .

حاويات Servlet وخوادم التطبيقات


يتم تنفيذ تطبيقات الويب في برامج متخصصة تنفذ المواصفات ذات الصلة (على سبيل المثال ، Servlet API ). فيما يلي حاويات servlet الأكثر شعبية وخوادم التطبيقات في الوقت الحالي. تؤخذ نسبة شعبية أيضا من نتائج الدراسة (السؤال 20).
عددحاوية Servlet ، خوادم التطبيقاتتاريخ الإصدار الأولتاريخ آخر إصدار مستقرشعبية،٪
عائلةاسم
1هرهر11.19982019/08/1741
2TomEE04.20122019/06/21
3جبوسجبوس eap19992019/01/2215
4WildFly19992019/03/07
5حاجز الميناء20002019/08/149
6خادم الويب11.19972017/08/306
7بنك الإسكان للتجارةخادم تطبيق WebSphere19982019/02/045
8حرية مفتوحة09.20172019/08/14
9GlassFishخادم زجاجي2005/06/062019/01/285
10خادم Payara2014/10/312019/08/29

يُظهر الجدول الزمني عمر كل منتج من منتجات البرامج في الجدول. يمكنك رؤية تسلسل ظهورها ووقت إصدار أحدث الإصدارات.



يتم استخدام حاويات أكثر وأكثر عند نشر التطبيقات ونشرها ، وبالتالي فإن استخدام خوادم التطبيقات أصبح أقل أهمية.

استخدام لغات أخرى غير Java في التطبيقات


في الآونة الأخيرة ، كان هناك ميل لإنشاء تطبيقات هجينة ، باعتبارها واحدة من المكونات التي توجد بها كود جافا . وفقًا للاتجاه السائد في Java Magazine ، والذي كان موضوعه الرئيسي لغة برمجة Java ، في عمود رئيس التحرير في عدد يناير / فبراير 2017 ، تم إعلان "The Polyglot Future" وإدراج JavaScript في منطقة الاهتمام.

في الدراسة التي سبق ذكرها أعلاه ، في السؤال 16 ، كانوا مهتمين بما هي اللغات غير JVM المستخدمة في تطبيقات JVM . القائد (57 ٪) كان جافا سكريبت ، وتستخدم في الواجهة الأمامية. بالنظر إلى حقيقة أن بعض تطبيقات الويب لا تحتوي على واجهة المستخدم الرسومية على الإطلاق (الخدمات ، والخدمات الميكروية ، والخدمات) ، يمكننا أن نقول بثقة أن استخدام أطر جافا سكريبت للواجهة الرسومية في تطبيقات Java واسع الانتشار.



مثال على تطبيق جافا النموذجي اليوم


لإظهار تطبيق ويب Java نموذجي بواجهة رسومية ، تمت كتابة برنامج بمضاهاة الوظائف الأساسية لـ Twitter : المصادقة ، إدارة الحساب (إنشاء ، تحرير ، حذف ، البحث عن طريق سلسلة فرعية) ، الصفحة الرئيسية (خصائص الحساب ، تغذية الرسائل) ، الإنشاء تغريدات ، الاشتراك / إلغاء الاشتراك.

تتم كتابة الواجهة الخلفية باستخدام Spring Boot ، بينما يتم كتابة الواجهة الأمامية باستخدام إطار جافا سكريبت Angular الشهير. في جزء Java من التطبيق ، يتم تمثيل مكونات عائلة Spring كحد أقصى: Spring MVC ، Spring Boot ، Spring Security ، Spring Spring ، Spring Spring Admin . يتم تقديم الواجهة الخلفية REST API باستخدام Swagger .

JUnit , Spring Test , Mockito , TestContainers (unit- Java -) Jasmine Protractor (unit- end-to-end- JavaScript Angular ).

( Spring Boot Angular ) , TechTrain 2019 .

النتائج


Java , -, . , , , , .

, , GitHub : , .

JUG Ru Group
Spring :
  • «Spring the Ripper», ( JPoint 2014 : , )
  • «Spring Data? , !», ( Joker 2014 : , )
  • «Spring Puzzlers: Spring», ( Joker 2014 : )
  • «Spring Puzzlers — », ( JPoint 2015 : , )
  • «The Bootiful Application», Josh Long ( Joker 2015 : , )
  • « Spring Boot Starter», ( JPoint 2016 : , )
  • «Spring – », ( JPoint 2017 : , )
  • « Spring Test», ( JPoint 2017 : , )
  • «Boot yourself, Spring is coming», ( Joker 2017 : )
  • « Spring 5/Reactor», ( Joker 2017 : )
  • «Spring Framework 5.0 on JDK 8 & 9», Juergen Hoeller ( JPoint 2018 : , )
  • «Spring Framework 5: feature highlights and hidden gems», Juergen Hoeller ( JPoint 2018 : , )
  • «Camel microservices with Spring Boot and Kubernetes», Claus Ibsen ( JPoint 2018 : , )
  • «Spring Boot Xtend: c », ( JPoint 2018 : , )
  • «Boot yourself, Spring is coming», ( JPoint 2018 : 1 2 , )
  • «Spring Boot 2: release notes», ( Joker 2018 : , )
  • «The Proxy fairy and the magic of Spring», Victor Rentea ( JPoint 2019 : , )
  • « Spring Boot, : AOT- Spring-», ( JPoint 2019 : , )
  • «Reactive reactive, », ( JPoint 2019 : , )
  • « Spring Boot- Java 8 11: ?», ( JPoint 2019 : , )

Play :
  • «50 Play!», ( Joker 2015 : )

Vaadin :
  • « — web UI Java desktop-», ( JPoint 2018 : , )
  • « Vaadin Flow», ( JPoint 2019 : , )

Vert.x :
  • «Vert.x: », ( Joker 2015 : )
  • «Vert.x: », ( Joker 2016 : , )
  • « Vert.x », ( JPoint 2018 : , )

Micronaut :
  • «Micronaut vs Spring Boot, ?», ( Joker 2018 : , )

MicroProfile :
  • «Microprofile.io: », ( Joker 2018 : , )

Java JavaScript :
  • «JavaScript in the nterprise», Markus Eisele ( Joker 2014 : , )
  • «Java(Script) on JVM», ( Joker 2015 : )


UPD : Quarkus ( helloworld-web-quarkus ) ActFramework ( helloworld-web-actframework ), .. 39.

25-26 2019 - Java- Joker 2019 , 1 .

8-9 2019 JavaScript- HolyJS 2019 Moscow , 1 .

Source: https://habr.com/ru/post/ar453468/


All Articles