CodeGym /وبلاگ جاوا /Random-FA /قسمت 6. ظروف Servlet
John Squirrels
مرحله
San Francisco

قسمت 6. ظروف Servlet

در گروه منتشر شد
این مطالب بخشی از مجموعه "مقدمه ای بر توسعه سازمانی" است. مقالات قبلی: قسمت 6. ظروف سرولت - 1در آخرین مقاله با servlet ها آشنا شدیم و نحوه استفاده از آن ها برای ایجاد اپلیکیشن های تحت وب را یاد گرفتیم. زمان آن فرا رسیده است که نگاهی دقیق تر به بخش اساسی این سرگرمی بیندازیم: ظروف سرولت.

فهرست مطالب:

ظرف سرولت چیست؟

این برنامه ای است که روی سرور اجرا می شود و می تواند با سرورلت هایی که ما ایجاد کرده ایم تعامل داشته باشد. به عبارت دیگر، اگر بخواهیم برنامه وب خود را بر روی یک سرور اجرا کنیم، ابتدا یک کانتینر servlet را مستقر کرده و سپس سرولت ها را در آن قرار می دهیم. گردش کار ساده است: هنگامی که مشتری به سرور دسترسی پیدا می کند، کانتینر درخواست خود را پردازش می کند، تعیین می کند که کدام سرور باید آن را پردازش کند و سپس درخواست را به همراه ارسال می کند. قسمت 6. ظروف سرولت - 2

ظروف سرولت چگونه استفاده می شوند؟

علاوه بر درخواست های مسیریابی، یک کانتینر servlet عملکردهای دیگری را نیز انجام می دهد:
  1. این به صورت پویا صفحات HTML را از فایل های JSP تولید می کند.
  2. این پیام های HTTPS را رمزگذاری/رمزگشایی می کند.
  3. دسترسی محدودی را برای مدیریت سرورلت فراهم می کند.
به طور کلی، همه اینها خوب به نظر می رسد. اکنون ما فقط باید بفهمیم که چگونه همه اینها را عملی کنیم. خوب، برای یادگیری نحوه استفاده از چیزی، فقط شیرجه بزنید و سعی کنید از آن استفاده کنید :) بنابراین، امروز می خواهیم تمرین کنیم! محبوب ترین کانتینر سرولت آپاچی تامکت است . منبع باز است و می توان از آن به صورت رایگان استفاده کرد. Tomcat را برای سیستم عامل خود از اینجا دانلود کنید و ما کار با کانتینرها را "در عمل" بررسی خواهیم کرد.

نصب و راه اندازی Tomcat

  1. برای نصب Tomcat، کافی است آرشیو دانلود شده را در پوشه مورد نظر از حالت فشرده خارج کنید.

  2. لطفاً توجه داشته باشید که Tomcat برای شروع و اجرا به جاوا نسخه 8 یا بالاتر نیاز دارد. بررسی کنید که متغیر محیطی JAVA_HOME به نسخه فعلی JDK اشاره دارد.

  3. در مرحله بعد، باید دسترسی کاربر به Tomcat را پیکربندی کنید . این کار در فایل tomcat-users.xml که در پوشه conf قرار دارد انجام می شود.

    چهار نقش از پیش تعیین شده در تامکت وجود دارد:

    • manager-gui - دسترسی به رابط گرافیکی و صفحه وضعیت
    • manager-script - دسترسی به رابط متن و صفحه وضعیت
    • manager-jmx - دسترسی به JMX و صفحه وضعیت
    • manager-status - فقط به صفحه وضعیت دسترسی داشته باشید

    در داخل تگ <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"/>

    اکنون همه چیز برای راه اندازی آماده است!

  4. در پوشه bin، فایل startup.bat (startup.sh در لینوکس) را اجرا کنید.

  5. بعد از چند ثانیه لینک http://localhost:8080/ را در مرورگر خود باز کنید. یک داشبورد گرافیکی خواهید دید:

    قسمت 6. ظروف سرولت - 3

    اگر منویی شبیه به این می بینید، پس تامکت در حال اجرا است.

  6. اگر در حال اجرا نیست، متغیرهای محیطی JAVA_HOME و CATALINA_HOME را به صورت دستی بررسی کنید:

    • JAVA_HOME - این باید به نسخه فعلی جاوا 8+ اشاره کند.
    • CATALINA_BASE - این باید به تامکت اشاره کند یا وجود نداشته باشد (نباید به نسخه دیگری از تامکت اشاره کند).

استقرار یک برنامه کاربردی در تامکت

ما موفق شدیم تامکت را راه اندازی کنیم، بنابراین اکنون زمان آن است که پروژه ای را در آن مستقر کنیم. بیایید از servlet های مقاله قبلی استفاده کنیم . MainServlet:
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(); } }
IndexServlet:
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");
   }
}
قبل از استقرار، باید سرورهای خود را در یک فایل WAR بسته بندی کنیم. معمولاً از Maven برای انجام این کار استفاده می شود، اما برای ایجاد یک فایل WAR به یک فایل web.xml نیاز دارید که دارای نقشه برداری برای همه سرورها باشد. ما از حاشیه نویسی جدید @WebServlet برای نوشتن servlet ها استفاده کردیم، بنابراین فایل web.xml نداریم. خوشبختانه، IDEA می تواند کار کثیف را برای ما انجام دهد و پروژه ما را در یک فایل WAR قرار دهد. برای انجام این کار، ساختار پروژه را باز کنید (Ctrl+Shift+Alt+S) -> Artifacts -> فایل WAR مورد نظر را انتخاب کنید -> کادر کنار "Include in project build" را انتخاب کنید -> روی "OK" کلیک کنید. قسمت 6. ظروف سرولت - 4بیایید پروژه را با استفاده از کلیدهای ترکیبی Ctrl+F9 بسازیم. اکنون فایل WAR ما در دایرکتوری هدف قرار دارد. قسمت 6. ظروف سرولت - 5نام فایل را می توان به چیزی ساده تر، مثلاً servlet.war، تغییر نام داد و به مکان مناسب تری منتقل کرد، مثلاً C:\\my\\. هنگامی که فایل WAR آماده استفاده شد، آن را در یک ظرف قرار می دهیم . دو راه برای انجام این کار وجود دارد.
  1. با استفاده از رابط گرافیکی

    برای انجام این کار، این لینک را دنبال کنید: http://localhost:8080/manager/html . Tomcat باید نام کاربری و رمز عبور را بخواهد.

    اگر تا این مرحله با من همراه بودید، نام کاربری "user" و رمز عبور "password" است .

    پس از ورود موفقیت آمیز به سیستم، مدیر برنامه وب Tomcat را مشاهده خواهید کرد. بخش «برنامه‌ها» قبلاً شامل 5 برنامه کاربردی است - اینها ابزارهای Tomcat هستند که کار با Tomcat را آسان‌تر می‌کنند. آنها را می توان در آینده حذف کرد.

    قسمت 6. ظروف سرولت - 6

    در زیر بخش "استقرار" است. در اینجا می توانید آرشیو WAR را برای استقرار انتخاب کنید. بیایید مسیر و زمینه را به صورت دستی وارد کنیم:

    قسمت 6. ظروف سرولت - 7

    روی "Deploy" کلیک کنید و می بینیم که برنامه ما در بخش "Applications" ظاهر شده است:

    قسمت 6. ظروف سرولت - 8با استفاده از رابط گرافیکی Tomcat، می‌توانیم یک جلسه را متوقف، راه‌اندازی مجدد و حذف کنیم و همچنین طول جلسه را تنظیم کنیم. هنگام استقرار، ما زمینه /demo را مشخص کردیم، به این معنی که برنامه ما با استفاده از http://localhost:8080/demo قابل دسترسی است . آن را بررسی کنید. همه چیز باید کار کند.

  2. از طریق فایل سیستم

    برای استقرار برنامه در این روش، باید دایرکتوری را باز کنید که Tomcat در آن از حالت فشرده خارج شده است. سپس به پوشه "webapps" بروید. در اینجا می توانید ابزارهایی را که قبلاً با آنها روبرو شده ایم پیدا کنید:

    قسمت 6. ظروف سرولت - 9

    تنها چیزی که لازم است این است که فایل servlet.war خود را به اینجا منتقل کنیم.

    چند ثانیه صبر می کنیم و سپس می بینیم که یک پوشه "servlet" جدید ظاهر شده است. این بدان معنی است که برنامه ما مستقر شده است. به رابط مدیر برنامه در http://localhost:8080/manager/ بروید . در اینجا می بینیم که برنامه ما در زمینه /servlet مستقر شده است:

    قسمت 6. ظروف سرولت - 10

    هنگامی که به این روش مستقر می شود، متن به طور خودکار بر اساس نام فایل WAR مستقر شده اختصاص داده می شود. برای تغییر زمینه، می توانید نام پوشه تازه ایجاد شده حاوی برنامه را تغییر دهید، اما قبل از انجام این کار باید فایل WAR را حذف کنید. در غیر این صورت، تامکت برنامه را با نام بایگانی مجدداً مستقر می کند.

    همانطور که می بینید، استقرار برنامه ها در تامکت بسیار ساده تر از آن چیزی است که به نظر می رسد. اما کارکردهای دیگر آن نیز به راحتی قابل استفاده هستند. بیایید بررسی کنیم.

استفاده از HTTPS به جای HTTP

اگر به خاطر داشته باشید، ما در مقاله ای جداگانه به تفاوت بین HTTP و HTTPS پرداختیم . HTTPS همان پروتکل HTTP است، اما داده های در حال انتقال را رمزگذاری می کند. در سمت کلاینت، مرورگر مسئول رمزگذاری است، اما ما باید رمزگذاری را در سمت سرور ارائه کنیم. از آنجایی که تامکت درخواست‌های HTTP را می‌پذیرد و مسیریابی می‌کند، انتقال رمزگذاری به آن منطقی است. برای این کار باید:
  1. یک گواهی خودامضا ایجاد کنید
  2. تنظیمات سرور اضافی را انجام دهید
بیایید این کار را تمرین کنیم.

تولید گواهی

صرف نظر از نسخه، JDK شامل تعداد زیادی ابزار است. یکی از آنها ابزار کلید است . این ابزاری برای تولید و کار با کلیدهای رمزگذاری است. برای استفاده از آن، در خط فرمان، به دایرکتوری C:\\Program Files\\Java\\jdk1.8.0_181\\bin بروید و دستور keytool -genkey -alias tomcat -keyalg RSA را اجرا کنید .
  • keytool - نام ابزاری که با گزینه های خط فرمان اجرا می کنیم
  • -genkey - نشان می دهد که می خواهیم یک کلید جدید تولید کنیم
  • -alias tomcat - یک نام مستعار کلیدی ایجاد کنید
  • -keyalg RSA - RSA را به عنوان الگوریتم تولید کلید انتخاب کنید
پس از اجرای دستور، ابزار یک گفتگو با ما شروع می کند: قسمت 6. ظروف سرولت - 11اطلاعات لازم را وارد کنید. اکنون یک keystore در فهرست اصلی خود ایجاد کرده ایم (برای ویندوز، این C:\\Users\\{username}\\.keystore است) و یک کلید تامکت در آن. ما یک گواهی ساده تولید کردیم که اکثر مرورگرها از آن شکایت خواهند کرد. چنین گواهی برای کاربردهای تجاری مناسب نیست: فقط برای اهداف آزمایشی قابل استفاده است. در سرور تولیدی، باید از یک گواهی از یک مرجع صدور گواهینامه (به عنوان مثال، https://letsencrypt.org/ ) استفاده کنید.

در حال پیکربندی سرور

اکنون که گواهی آماده است، باید تنظیمات سرور، یعنی کانکتور 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 ایستا خسته کننده، می توانید کد جاوا را با استفاده از متغیرها، حلقه ها، آرایه ها و دیگر ساختارهای زبان بنویسید. تونستی تصورش کنی؟ خبر خوب این است که چیزی مشابه وجود دارد. خبر بد این است که به طور کامل به این فانتزی دست پیدا نمی کند. اگر حدس نزده اید، ما در مورد صفحات جاوا سرور (JSP) صحبت می کنیم. به طور خلاصه، این فناوری است که به شما امکان می دهد قطعات کد جاوا را در یک صفحه HTML قرار دهید. درست است، این کد جاوا هنوز قبل از ارسال به مشتری به 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 چیزی است که کد جاوا را از JSP به HTML تبدیل می کند. هنگامی که یک servlet قرار است محتوای JSP را به عنوان پاسخ برگرداند، ظرف یادداشت می‌کند و ابتدا آن را به یک صفحه HTML مناسب برای مرورگر تبدیل می‌کند قبل از اینکه چنین محتوایی را برای مشتری ارسال کند. امروزه، آنالوگ های زیادی برای فناوری JSP وجود دارد - Thymeleaf، FreeMarket، Mustache و غیره. همه آنها به روشی مشابه کار می کنند. کدام یک از آنها را برای کار خود انتخاب کنید یک موضوع سلیقه ای است. این امر در مورد انتخاب ظرف سرولت نیز صدق می کند. در این مثال‌ها از Tomcat، رایج‌ترین کانتینر استفاده کردیم، اما برخی پروژه‌ها از کانتینرهای دیگر استفاده می‌کنند. شایان ذکر است که به طور خلاصه محبوب ترین آنها را مرور کرده و تفاوت آنها با تامکت را در نظر بگیرید.

جایگزین های تامکت

  1. GlassFish یک ظرف منبع باز است که توسعه آن توسط Oracle پشتیبانی می شود.

    برخلاف Tomcat، این یک وب سرور تمام عیار است که علاوه بر servlet ها، می تواند با سایر اجزای چارچوب JavaEE نیز کار کند. همانطور که گفته شد، از رم بسیار بیشتری استفاده می کند. هنگام تنظیم دقیق سرور، انعطاف پذیری بیشتری وجود دارد که استفاده از آن را پیچیده می کند. باید هنگام توسعه برنامه های کاربردی در چارچوب JavaEE استفاده شود.

  2. WildFly قبلا با نام JBoss شناخته می شد . همچنین منبع باز است. این توسط Red Hat توسعه داده شده است. این نام برای جلوگیری از اشتباه گرفتن با یکی دیگر از محصولات این شرکت - پلتفرم برنامه کاربردی JBoss Enterprise تغییر کرد.

    WildFly مانند GlassFish یک وب سرور تمام عیار است. اتفاقاً در زیر هود، WildFly از Tomcat به عنوان یک ظرف سرولت استفاده می کند. برخلاف GlassFish، WildFly سبک‌تر است و پیکربندی آن آسان است.

  3. جتی مانند موارد قبلی منبع باز است. این توسط Eclipse توسعه یافته است.

    مانند تامکت، یک کانتینر سرولت ساده، بدون پشتیبانی از تمام اجزای چارچوب JavaEE است. در عین حال سبک تر است و حتی می توان آن را با تلفن همراه اجرا کرد. به سرعت شروع می شود و متوقف می شود و به خوبی مقیاس می شود. برخلاف تامکت، جامعه و پایگاه دانش کوچک تری دارد.

  4. WebLogic نرم افزار دارای مجوز است که باید قبل از استفاده خریداری شود. متعلق به اوراکل است.

    عملکرد کمی گسترده تر از Tomcat دارد. می تواند با پروتکل FTP کار کند. اما هنگام توسعه و آزمایش برنامه ها چندان انعطاف پذیر نیست.

  5. WebSphere (به طور دقیق، WebSphere Application Server) یک نرم افزار پولی است. این توسط IBM توسعه یافته است. مشابه WildFly و GlassFish، یک سرور برنامه کامل است. اما دارای رابط پیکربندی دوستانه تر، به علاوه قابلیت اطمینان بالا در کار است.

    از کاستی های آن می توان به این واقعیت اشاره کرد که از منابع زیادی استفاده می کند و شروع و توقف آن زمان زیادی را می طلبد که در هنگام توسعه پروژه های کوچک چندان راحت نیست.

انتخاب کانتینر یا سرور برنامه مناسب به پروژه خاص بستگی دارد. پروژه‌هایی وجود دارند که حتی یک زیردست واضح ممکن است یک انتخاب عالی باشد، اما در ابتدا بهتر است یک مطالعه عمیق روی یک ظرف سرولت انجام دهید. تامکت احتمالاً کاندیدای عالی برای این مطالعه است. و ما قبلاً اولین قدم ها را در مطالعه آن برداشته ایم، اما از اینجا به شما بستگی دارد! در مقاله های پایانی مجموعه «مقدمه ای بر توسعه سازمانی» با الگوی MVC آشنا می شویم. قسمت 7. معرفی الگوی MVC (Model-View-Controller).
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION