JavaRush /وبلاگ جاوا /Random-FA /قسمت 6: ظروف Servlet

قسمت 6: ظروف Servlet

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

محتوا:

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

این برنامه ای است که روی سرور اجرا می شود و می تواند با servlet هایی که ما ایجاد کرده ایم تعامل داشته باشد. به عبارت دیگر، اگر بخواهیم برنامه وب خود را روی سرور اجرا کنیم، ابتدا یک کانتینر servlet را مستقر کرده و سپس سرولت ها را در آن قرار می دهیم. روش کار ساده است: وقتی یک کلاینت با سرور تماس می گیرد، کانتینر درخواست او را پردازش می کند، تعیین می کند که کدام سرور باید آن را پردازش کند و آن را ارسال می کند. قسمت 6. ظروف Servlet - 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-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: ظروف Servlet - 3

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

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

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

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

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

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

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

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

    قسمت 6: ظروف Servlet - 6

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

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

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

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

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

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

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

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

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

    قسمت 6: ظروف Servlet - 10

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

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

استفاده از پروتکل 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 - نشان می دهد که ما می خواهیم یک کلید جدید تولید کنیم.
  • -نام مستعار tomcat - ایجاد یک نام مستعار کلیدی.
  • -keyalg RSA - RSA را به عنوان الگوریتم تولید کلید انتخاب کنید.
پس از اجرای دستور، ابزار گفتگو با ما شروع می کند: قسمت 6: ظروف Servlet - 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 مقادیری را که برای ما مرتبط هستند اختصاص می دهیم، تامکت را با استفاده از فایل های shutdown.bat و startup.bat ذخیره و راه اندازی مجدد می کنیم. اکنون سرور آماده است تا درخواست های https را پردازش کند، فقط کمی در آدرس تغییر یافته - https://localhost:8443/demo/hello . وقتی روی لینک کلیک می کنید، هشداری در مورد مشکوک بودن گواهی می بینید که جای تعجب نیست. همانطور که کمی پیشتر توضیح داده شد، برای دریافت گواهی عادی باید از خدمات یکی از خدمات صدور گواهینامه استفاده کنید. اما تاکنون به هدف خود رسیده ایم: برنامه با استفاده از پروتکل HTTPS کار می کند و این مهمترین چیز است!

تولید پویا صفحات HTML

اکنون اجازه دهید بررسی خود را در مورد سایر ویژگی های ظروف servlet ادامه دهیم - تولید پویا صفحات HTML. دنیای ایده آلی را تصور کنید که به جای کدهای HTML ایستا خسته کننده، می توانید کد جاوا را با استفاده از متغیرها، حلقه ها، آرایه ها و دیگر ساختارهای زبان بنویسید. تصور کردی؟ خبر خوب این است که چیزی مشابه وجود دارد، خبر بد این است که به طور کامل وجود ندارد. اگر حدس نزده اید، ما در مورد فناوری JSP (صفحات سرور جاوا) صحبت می کنیم. به طور خلاصه، این یک فناوری است که به شما امکان می دهد تکه هایی از کد جاوا را در یک صفحه 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 چه ربطی به آن دارد؟ ساده است: تبدیل کد JAVA از JSP به کد HTML توسط ظرف servlet انجام می شود. هنگامی که یک 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) قسمت 8. نوشتن یک برنامه کوچک در Spring-boot
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION