- حول الشبكات
- حول هندسة البرمجيات
- حول HTTP/HTTPS
- حول أساسيات Maven
- حول servlets (كتابة تطبيق ويب بسيط)
جدول المحتويات:
- ما هي حاوية servlet؟
- كيف يتم استخدام حاويات servlet؟
- تثبيت وبدء تشغيل Tomcat
- نشر تطبيق في Tomcat
- استخدام HTTPS بدلاً من HTTP
- توليد شهادة
- تكوين الخادم
- إنشاء صفحات HTML ديناميكيًا
- بدائل تومكات
ما هي حاوية servlet؟
إنه برنامج يعمل على الخادم ويمكنه التفاعل مع السيرفلتس التي أنشأناها. بمعنى آخر، إذا أردنا تشغيل تطبيق الويب الخاص بنا على خادم، فإننا نقوم أولاً بنشر حاوية servlet ثم نضع servlet فيها. سير العمل بسيط: عندما يصل العميل إلى الخادم، تقوم الحاوية بمعالجة طلبها، وتحديد servlet الذي يجب أن يعالجه، ثم تمرر الطلب معه.كيف يتم استخدام حاويات servlet؟
بالإضافة إلى طلبات التوجيه، تؤدي حاوية servlet وظائف أخرى:- يقوم بإنشاء صفحات HTML بشكل ديناميكي من ملفات JSP.
- يقوم بتشفير/فك تشفير رسائل HTTPS.
- يوفر وصولاً مقيدًا لإدارة servlet.
تثبيت وبدء تشغيل Tomcat
-
لتثبيت Tomcat، ما عليك سوى فك ضغط الأرشيف الذي تم تنزيله في الدليل المطلوب.
-
يرجى ملاحظة أن Tomcat يتطلب إصدار Java 8 أو أعلى للبدء والتشغيل. تحقق من أن متغير البيئة JAVA_HOME يشير إلى الإصدار الحالي من JDK.
-
بعد ذلك، تحتاج إلى تكوين وصول المستخدم إلى Tomcat . يتم ذلك في ملف Tomcat-users.xml الموجود في مجلد conf.
هناك أربعة أدوار محددة مسبقًا في Tomcat:
- manager-gui — الوصول إلى الواجهة الرسومية وصفحة الحالة
- manager-script — الوصول إلى واجهة النص وصفحة الحالة
- manager-jmx — الوصول إلى JMX وصفحة الحالة
- حالة المدير - الوصول فقط إلى صفحة الحالة
داخل العلامة <tomcat-users>، نحدد هذه الأدوار بوضوح ونخصصها لمستخدمنا:
<role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="user" password="password" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
الآن كل شيء جاهز للإطلاق!
-
في مجلد bin، قم بتشغيل ملفstartup.bat (startup.sh على Linux).
-
بعد بضع ثوان، افتح الرابط http://localhost:8080/ في متصفحك. ستظهر لك لوحة تحكم رسومية:
إذا رأيت قائمة مثل هذه، فهذا يعني أن Tomcat قيد التشغيل.
-
إذا لم يكن قيد التشغيل، فتحقق يدويًا من متغيرات البيئة JAVA_HOME وCATALINA_HOME:
- Java_HOME - يجب أن يشير هذا إلى الإصدار الحالي من Java 8+.
- CATALINA_BASE — يجب أن يشير هذا إلى Tomcat أو أن يكون غائبًا (يجب ألا يشير إلى إصدار آخر من Tomcat).
نشر تطبيق في Tomcat
لقد تمكنا من إطلاق Tomcat، لذا حان الوقت الآن لنشر بعض المشاريع فيه. دعونا نستخدم servlets من المقالة السابقة . الخدمة الرئيسية:import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpSession session = req.getSession();
Integer visitCounter = (Integer) session.getAttribute("visitCounter");
if (visitCounter == null) {
visitCounter = 1;
} else {
visitCounter++;
}
session.setAttribute("visitCounter", visitCounter);
String username = req.getParameter("username");
resp.setContentType("text/html");
PrintWriter printWriter = resp.getWriter();
if (username == null) {
printWriter.write("Hello, Anonymous" + "
");
} else {
printWriter.write("Hello, " + username + "
");
}
printWriter.write("Page was visited " + visitCounter + " times.");
printWriter.close();
}
}
خدمة الفهرس:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.sendRedirect(req.getContextPath() + "/hello");
}
}
قبل النشر، نحتاج إلى حزم servlets الخاصة بنا في ملف WAR. عادةً ما يتم استخدام Maven للقيام بذلك، ولكن لإنشاء ملف WAR تحتاج إلى ملف web.xml الذي يحتوي على تعيين لجميع servlets. لقد استخدمنا التعليق التوضيحي @WebServlet الجديد لكتابة servlets، لذلك ليس لدينا ملف web.xml. لحسن الحظ، يمكن لـ IDEA القيام بالعمل القذر نيابةً عنا، حيث تقوم بتغليف مشروعنا في ملف WAR. للقيام بذلك، افتح بنية المشروع (Ctrl+Shift+Alt+S) -> القطع الأثرية -> حدد ملف WAR المطلوب -> حدد مربع الاختيار بجوار "تضمين في إنشاء المشروع" -> انقر فوق "موافق". لنقم ببناء المشروع باستخدام مجموعة المفاتيح Ctrl+F9. أصبح الآن ملف WAR الخاص بنا موجودًا في الدليل الهدف. يمكن إعادة تسمية الملف إلى شيء أكثر بساطة، على سبيل المثال، servlet.war، ونقله إلى مكان أكثر ملاءمة، على سبيل المثال، C:\\my\\. بمجرد أن يصبح ملف WAR جاهزًا للاستخدام، سنضعه في حاوية . هناك طريقتان للقيام بذلك.
-
باستخدام الواجهة الرسومية
للقيام بذلك، اتبع هذا الرابط: http://localhost:8080/manager/html . يجب أن يطلب Tomcat اسم المستخدم وكلمة المرور.
إذا تابعت معي حتى هذه اللحظة، فإن اسم المستخدم هو "مستخدم"، وكلمة المرور هي "كلمة المرور" .
بعد تسجيل الدخول بنجاح، سترى Tomcat Web Application Manager. يحتوي قسم "التطبيقات" بالفعل على 5 تطبيقات — وهي أدوات مساعدة Tomcat، والتي تسهل التعامل مع Tomcat. ويمكن حذفها في المستقبل.
يوجد أدناه قسم "النشر". هنا يمكنك تحديد أرشيف WAR للنشر. دعنا ندخل المسار والسياق يدويًا:
انقر فوق "نشر" ونرى أن تطبيقنا قد ظهر في قسم "التطبيقات":
باستخدام واجهة Tomcat الرسومية، يمكننا إيقاف الجلسة وإعادة تشغيلها وحذفها، بالإضافة إلى تحديد مدة الجلسة. عند النشر، حددنا السياق /demo، مما يعني أنه يمكن الوصول إلى تطبيقنا باستخدام http://localhost:8080/demo . افحصها. كل شيء يجب أن يعمل. -
من خلال نظام الملفات
لنشر التطبيق بهذه الطريقة، تحتاج إلى فتح الدليل الذي تم فك ضغط Tomcat فيه. ثم انتقل إلى مجلد "webapps". ستجد هنا الأدوات المساعدة التي واجهناها بالفعل:
كل ما هو مطلوب منا هو نقل ملف servlet.war الخاص بنا هنا.
ننتظر بضع ثوانٍ ثم نرى ظهور مجلد "servlet" جديد. هذا يعني أنه تم نشر تطبيقنا. انتقل إلى واجهة مدير التطبيقات على http://localhost:8080/manager/ . نرى هنا أن تطبيقنا قد تم نشره في سياق /servlet:
عند النشر بهذه الطريقة، يتم تعيين السياق تلقائيًا بناءً على اسم ملف WAR الذي تم نشره. لتغيير السياق، يمكنك إعادة تسمية المجلد الذي تم إنشاؤه حديثًا والذي يحتوي على التطبيق، ولكن قبل القيام بذلك تحتاج إلى إزالة ملف WAR. وبخلاف ذلك، سيقوم Tomcat بإعادة نشر التطبيق باسم الأرشيف.
كما ترون، فإن نشر التطبيقات في Tomcat أسهل بكثير مما قد يبدو. لكن وظائفها الأخرى سهلة الاستخدام أيضًا. دعونا تحقق.
استخدام HTTPS بدلاً من HTTP
إذا كنت تتذكر، فقد نظرنا إلى الفرق بين HTTP و HTTPS في مقالة منفصلة . HTTPS هو نفس بروتوكول HTTP، ولكنه يقوم بتشفير البيانات التي يتم إرسالها. من جانب العميل، يكون المتصفح مسؤولاً عن التشفير، ولكن يجب علينا توفير التشفير من جانب الخادم. نظرًا لأن Tomcat يقبل طلبات HTTP ويوجهها، فمن المنطقي تفويض التشفير إليها. وللقيام بذلك، يجب علينا:- إنشاء شهادة موقعة ذاتيا
- قم بإجراء إعدادات خادم إضافية
توليد شهادة
بغض النظر عن الإصدار، يتضمن JDK عددًا كبيرًا من الأدوات المساعدة. واحد منهم هو أداة المفاتيح . هذه أداة لإنشاء مفاتيح التشفير والعمل معها. لاستخدامه، في سطر الأوامر، انتقل إلى الدليل C:\\Program Files\\Java\\jdk1.8.0_181\\bin وقم بتشغيل الأمر keytool -genkey -alias tomcat -keyalg RSA .- keytool - اسم الأداة المساعدة التي نقوم بتشغيلها مع خيارات سطر الأوامر
- -genkey - يشير إلى أننا نريد إنشاء مفتاح جديد
- -alias Tomcat - قم بإنشاء اسم مستعار رئيسي
- -keyalg RSA — حدد RSA كخوارزمية إنشاء المفاتيح
تكوين الخادم
الآن بعد أن أصبحت الشهادة جاهزة، نحتاج إلى ضبط إعدادات الخادم، أي موصل SSL. يتم ذلك في ملف server.xml الموجود في Apache-tomcat-9.0.30/conf/ . نجد فيه كتلًا مثل هذا:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
ونضع التكوين الخاص بنا بجانبهم:
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="C:\Users\user\.keystore" keystorePass="mypass"
clientAuth="false" sslProtocol="TLS"/>
نقوم بتعيين أحدث القيم لمعلمات keystoreFile وkeystorePass، ثم نحفظ الملف، ثم نعيد تشغيل Tomcat باستخدام ملفي Shutdown.bat وstartup.bat. الآن أصبح الخادم جاهزًا لمعالجة طلبات HTTPS. لقد تغير العنوان قليلاً: https://localhost:8443/demo/hello
. عند الضغط على الرابط سوف تتلقى تحذيرا بشأن مصداقية الشهادة، وهذا ليس مستغربا. كما قلنا سابقًا، تحتاج إلى الاستعانة بخدمات إحدى جهات التصديق للحصول على شهادة عادية. لكن في الوقت الحالي، حققنا هدفنا: يعمل التطبيق باستخدام بروتوكول HTTPS، وهذا مهم!
إنشاء صفحات HTML ديناميكيًا
سنواصل الآن النظرة العامة على حاويات servlet من خلال النظر في ميزة أخرى: الإنشاء الديناميكي لصفحات HTML. تخيل عالمًا مثاليًا، حيث يمكنك، بدلاً من كود HTML الثابت الممل، كتابة كود Java باستخدام المتغيرات والحلقات والمصفوفات وبنيات اللغة الأخرى. هل كنت قادرا على تخيل ذلك؟ والخبر السار هو أن شيئا مماثلا موجود. الخبر السيئ هو أنها لا تحقق هذا الخيال بالكامل. إذا لم تكن قد خمنت، فنحن نتحدث عن صفحات JavaServer (JSP). باختصار، هذه هي التقنية التي تتيح لك إدراج أجزاء من تعليمات Java البرمجية في صفحة HTML. صحيح أن كود Java هذا لا يزال يتم تحويله إلى HTML قبل إرساله إلى العميل، ولكن سيتم إنشاء HTML ديناميكيًا، مع مراعاة العوامل المختلفة. على سبيل المثال، يمكنك استخدام العبارات الشرطية وإرجاع محتوى مختلف اعتمادًا على بعض الشروط. مثال لصفحة JSP:<%@ page language="java"" %>
<html>
<head>
<title>JSP</title>
</head>
<body>
<%
String firstName="name";
String secondName="surname";
if (firstName.equals("name")){
out.print("Hello: "+firstName+"<br>");
}
if (firstName.equals("name") && secondName.equals("surname"))
{
out.print("Hello, my dear friend! <br>");
}
else
{
out.print("I don't know you. Go away! <br>");
}
%>
</body>
</html>
يمكنك قراءة المزيد عن JSP هنا
. في نهاية المطاف، هذه المقالة ليست عن JSP — نحن هنا للحديث عن حاويات servlet! فلماذا ذكرنا JSP؟ الأمر بسيط: حاوية servlet هي ما يحول تعليمات Java البرمجية من JSP إلى HTML. عندما يقوم servlet بإرجاع محتوى JSP كاستجابة، تأخذ الحاوية ملاحظة وتحوله أولاً إلى صفحة HTML سهلة الاستخدام للمتصفح قبل إرسال هذا المحتوى إلى العميل. اليوم، هناك العديد من نظائرها لتكنولوجيا JSP - Thymeleaf، FreeMarket، Moustache، وغيرها. كلهم يعملون بطريقة مماثلة. أي منهم تختار لعملك هو مسألة ذوق. ينطبق هذا أيضًا على اختيار حاوية servlet. في هذه الأمثلة، استخدمنا Tomcat، الحاوية الأكثر شيوعًا، لكن بعض المشاريع تستخدم حاويات أخرى. من المفيد مراجعة أشهرها بإيجاز والنظر في مدى اختلافها عن Tomcat.
بدائل تومكات
-
GlassFish عبارة عن حاوية مفتوحة المصدر تدعم Oracle تطويرها.
على عكس Tomcat، فهو خادم ويب متكامل يمكنه، بالإضافة إلى servlets، العمل مع مكونات أخرى من إطار عمل JavaEE. ومع ذلك، فهو يستخدم الكثير من ذاكرة الوصول العشوائي (RAM). هناك مرونة أكبر عند ضبط الخادم، مما يزيد من تعقيد استخدامه. يجب استخدامه عند تطوير التطبيقات على إطار عمل JavaEE.
-
كان WildFly يُعرف سابقًا باسم JBoss . كما أنها مفتوحة المصدر. تم تطويره بواسطة ريد هات. تم تغيير الاسم لتجنب الخلط بينه وبين أحد منتجات الشركة الأخرى - JBoss Enterprise Application Platform.
مثل GlassFish، يعد WildFly خادم ويب متكامل. بالمناسبة، تحت الغطاء، يستخدم WildFly Tomcat كحاوية servlet. على عكس GlassFish، فإن WildFly أكثر خفة الوزن وسهولة في التهيئة.
-
جيتي ، مثل سابقاتها، مفتوح المصدر. تم تطويره بواسطة إكليبس.
مثل Tomcat، فهي عبارة عن حاوية servlet بسيطة، بدون دعم لجميع مكونات إطار عمل JavaEE. وفي الوقت نفسه، فهو خفيف الوزن ويمكن تشغيله على الهاتف المحمول. يبدأ ويتوقف بسرعة ويتوسع بشكل جيد. على عكس Tomcat، فهو يحتوي على مجتمع أصغر وقاعدة معرفية أصغر.
-
WebLogic هو برنامج مرخص يجب شراؤه قبل الاستخدام. إنه ينتمي إلى أوراكل.
لديها وظائف أوسع قليلاً من Tomcat. يمكنه العمل مع بروتوكول FTP. لكنها ليست مرنة جدًا عند تطوير التطبيقات واختبارها.
-
WebSphere (خادم تطبيقات WebSphere، على وجه الدقة) هو برنامج مدفوع الأجر. تم تطويره من قبل شركة آي بي إم. على غرار WildFly وGlassFish، فهو خادم تطبيقات متكامل. ولكنه يحتوي على واجهة تكوين أكثر ودية، بالإضافة إلى الموثوقية العالية في التشغيل.
تشمل عيوبه حقيقة أنه يستخدم الكثير من الموارد ويستغرق وقتًا طويلاً للبدء والتوقف، وهو أمر غير مناسب جدًا عند تطوير المشاريع الصغيرة.
GO TO FULL VERSION