۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

تامکت چیست؟ ظرف سرولت اصلی جاوا

هر آنچه باید در مورد Tomcat بدانید: سرور کاربردی جاوا و جاکارتا EE با در دسترس بودن بالا برای servlets، JSP و WebSockets.

هر آنچه باید در مورد Tomcat بدانید: سرور کاربردی جاوا و جاکارتا EE با در دسترس بودن بالا برای servlets، JSP و WebSockets.

Apache Tomcat یک کانتینر سرولت جاوا منبع باز با عمر طولانی است که مشخصات اصلی سازمانی جاوا (در حال حاضر Jakarta EE)، از جمله Jakarta Servlet، صفحات سرور جاکارتا، و Jakarta WebSocket.

Tomcat اولین بار توسط بنیاد نرم افزار آپاچی در سال ۱۹۹۸، تنها چهار سال پس از خود جاوا، منتشر شد. Tomcat به عنوان پیاده‌سازی مرجع برای API اصلی Java Servlet و صفحات JavaServer آغاز شد. امروزه، پرکاربردترین سرور برنامه جاوا باقی مانده است، که دارای موتور اصلی آزمایش شده و اثبات شده با قابلیت توسعه خوب است.

تامکت و جاکارتا EE

مثل سایر ابزارهای سازمانی جاوا، Tomcat از مشخصات اصلی Java EE به Jakarta EE منتقل شده است. Tomcat 9 و قبل از آن بر اساس Java EE بودند. Tomcat 10 به بعد بر اساس Jakarta EE ساخته شده اند. همه نسخه‌های Tomcat 10 Forward از تغییر نام بسته به jakarta.* پشتیبانی می‌کنند. جدیدترین نسخه تا این لحظه Tomcat 10.0.23.

است

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

آیا Tomcat یک سرور برنامه است یا یک وب سرور؟

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

  • یک سرویلت ظرف یک پیاده سازی از مشخصات Jakarta Servlet است که عمدتاً برای میزبانی سرورها استفاده می شود.
  • یک وب سرور سروری است که برای ارائه فایل‌ها از سیستم محلی، مانند آپاچی، طراحی شده است.
  • یک سرور برنامه کاربردی سازمانی جاوا یک پیاده سازی کامل از مشخصات جاکارتا EE است.

در قلب، Tomcat یک servlet و ظرف JSP است:

  • یک جاوا ( یا جاکارتا) servlet نقاط پایانی را برای درخواست‌های HTTP تعریف می‌کند و آنها را برای مدیریت به کد منطق تجاری هدایت می‌کند.
  • JSP یا صفحات سرور جاکارتا، یک فناوری نمایش رندر سمت سرور است که امکان تعریف رابط های HTML را با استفاده از داده های داخل سرور و اطلاعات درخواست و پاسخ فراهم می کند. به عنوان توسعه دهنده، صفحه servlet یا JSP را می نویسید، قوانینی را برای درخواست ها و پاسخ ها تعریف می کنید، سپس به Tomcat اجازه می دهید مسیریابی را مدیریت کند.

Tomcat همچنین حاوی سرور وب Coyote است. Coyote استفاده از Tomcat را برای ارائه فایل‌های استاتیک در ترکیب با وب سرور آپاچی امکان‌پذیر می‌کند (به زودی در مورد آن بیشتر توضیح می‌دهیم).

نسخه توسعه یافته Tomcat، به نام TomEE، شامل طیف گسترده‌تری از مشخصات و قابلیت‌های جاکارتا، از جمله Jakarta Persistence API. (TomEE دارای گواهی Jakarta Web Profile 9.1 است.)

بعد، نحوه استفاده از Tomcat برای میزبانی سرورها و JSPها را بررسی خواهیم کرد.

بارگیری و نصب Tomcat

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

برای شروع، آخرین نسخه Tomcat را دانلود کنید. می‌توانید Tomcat را به‌عنوان بایگانی (.zip یا tar.gz)، یا به‌عنوان یک سرویس نصب‌شده بارگیری کنید. بهترین انتخاب به عهده شماست مگر اینکه روی ویندوز اجرا نکنید، در این صورت به سراغ آرشیو می روید. ما از آرشیو برای این مقاله استفاده خواهیم کرد.

همچنین می‌توانید بایگانی را در خط فرمان با ابزاری مانند wget دانلود کنید. در این مورد، شما فقط باید دستوری مانند

وارد کنید


wget https://downloads.apache.org/tomcat/tomcat-10/v<VER>/bin/apache-tomcat-<VER>.tar.g

جایی که نسخه مورد نظر شما است.

مهاجرت از جاوا به جاکارتا EE

اگر از Tomcat 9 به ۱۰ مهاجرت کنید، باید هر تماسی را از java.* به jakarta.* تغییر دهید. به عنوان مثال، javax.servlet-api به jakarta.servlet-api تبدیل می شود. اگر در حال مهاجرت به یک پروژه بزرگ هستید، ابزار مهاجرت آپاچی تامکت برای جاکارتا EE را بررسی کنید.

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

دستورالعمل‌های زیر فرض می‌کنند که شما در حال نصب از یک بایگانی هستید. اگر از ویندوز استفاده می کنید و می خواهید از نصب کننده استفاده کنید، به سادگی فایل .exe را دانلود کرده و آن را اجرا کنید. Tomcat خود را به عنوان یک سرویس با پیش فرض های معقول نصب می کند. سپس به شما اطلاع می دهد که نصب کجاست، و می توانید طوری ادامه دهید که انگار آرشیو را در آنجا باز کرده اید.

مرحله ۱. نصب خط فرمان

به خط فرمان بروید و gunzip apache-tomcat-10.0.22.tar.gz و سپس tar -xf apache-tomcat-10.0.22.tar این دستور دایرکتوری های زیر را ایجاد می کند:

  • /bin حاوی اسکریپت‌های اجرای Tomcat است.
  • /webapps مکانی است که برنامه‌های خود را در آن مستقر خواهید کرد.
  • /logs جایی است که Tomcat گزارش های خود را خروجی می کند. توجه داشته باشید که گزارش‌های Tomcat به طور پیش‌فرض وارد /logs/catalina.out می‌شوند. می‌توانید از این فایل برای اشکال‌زدایی مشکلات در ارتباط با فایل‌های گزارش مخصوص برنامه استفاده کنید.
  • /lib جایی است که تامکت به دنبال JAR ها می گردد. این جایی است که بسته‌های اضافی را که با Tomcat ارائه نمی‌شوند، مانند JPA ذخیره می‌کنید.
  • /conf پیکربندی XML برای Tomcat است که در آن می‌توانید کارهایی مانند افزودن کاربران و نقش‌ها را برای Tomcat انجام دهید.

مرحله ۲. Tomcat را شروع کنید

اگر Tomcat را به عنوان یک سرویس نصب کرده اید، در حال حاضر در حال اجرا است. در غیر این صورت، ادامه دهید و با وارد کردن ./catalina.sh start در خط فرمان، آن را راه اندازی کنید. (“./catalina.sh” را بدون هیچ آرگومان تایپ کنید تا تمام دستورات موجود را ببینید.) اکنون، همانطور که در شکل ۱ نشان داده شده است، باید بتوانید در یک مرورگر به صفحه خوش آمدگویی Tomcat بگردید.

عکسی از صفحه خوش آمدگویی تامکت.

شکل ۱. صفحه خوش آمدگویی Tomcat.

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

دایرکتوری webapps

تامکت جایی است که شما برنامه‌های خود را اجرا می‌کنید. شما می توانید یک فایل .war را در آنجا قرار دهید و Tomcat آن را اجرا خواهد کرد. فایل .war بسته بندی استاندارد برای یک منبع برنامه وب است. این در اصل یک فایل بایگانی جاوا (jar) است که دارای چند فایل اضافی است که به ظرف می گوید چگونه آن را اجرا کند.

در مرحله بعد، به سه روش دیگر برای استقرار فایل‌های استاتیک و برنامه‌های کاربردی وب در Tomcat نگاه خواهیم کرد.

استقرار منفجر شد

یک برنامه وب “منفجر شده” برنامه ای است که در یک فایل .war فشرده نشده است، به این معنی که همچنان حاوی تمام عناصر موجود در فهرست ها و فایل ها است. بایگانی Tomcat که بسته بندی آن را باز کردید همراه با چندین نمونه به این روش ارسال شد که در فهرست /webapps/examples خواهید یافت. مزیت گسترش انفجاری این است که می‌توانید بدون نگرانی در مورد فشرده‌سازی، به فایل‌های موجود در آنجا نگاه کنید.

اگر به http://localhost:8080/examples بروید، فهرستی از پیوندها را خواهید یافت. این صفحه توسط Tomcat از فایل /webapps/examples/index.html ارائه شده است. Tomcat یک فایل HTML را از سیستم فایل ارائه می کند، که نمونه ای از موتور Coyote Tomcat است که به عنوان یک وب سرور عمل می کند.

نمونه‌های موجود در این صفحه نمای کلی خوبی از قابلیت‌های Tomcat برای خدمت‌رسانی به سرورها، JSPها و WebSockets ارائه می‌دهند. Tomcat همچنین دارای یک برنامه مدیریت به طور پیش فرض است که در مسیر /manager یافت می شود. از جمله موارد دیگر، این برنامه به شما امکان می‌دهد تا برنامه‌ها را از یک کنسول وب راه‌اندازی، متوقف و مجدداً مستقر کنید.

پراکسی معکوس با Tomcat

Tomcat می‌تواند فایل‌های استاتیک را روی دیسک ارائه دهد (و کتابخانه APR را برای انجام این کار ارائه می‌کند. کارآمدتر) اما ترکیب تامکت با وب سرور آپاچی (httpd) برای فایل‌های استاتیک بسیار رایج است.

چند راه برای استفاده از تامکت و سرور آپاچی با هم وجود دارد. اولین مورد، چیزی است که به عنوان «پراکسی معکوس» شناخته می‌شود، که در آن آپاچی درخواست‌های فایل‌های استاتیک را مدیریت می‌کند و سپس درخواست‌های منابع دیگر (مثلاً /webapp/**) را به تامکت تحویل می‌دهد. سپس سرور آپاچی پاسخ را به مشتری ارسال می کند. این در واقع فقط یک پروکسی است، اما به آن پروکسی معکوس می گویند تا آن را از نقش معمولی سمت کلاینت یک پروکسی متمایز کند.

تنظیم یک پروکسی معکوس با تنظیم فایل پیکربندی آپاچی کار دشواری نیست. یک پیکربندی ساده در اینجا یافت می‌شود.

رویکرد دیگر استفاده از چیزی است که AJP (پروتکل Apache JServe) نامیده می‌شود، که کار با هدرهای ابرداده مانند را آسان‌تر می‌کند. AJP همان تنظیمات معماری (apache<->Tomcat) را دارد و به عنوان یک پروکسی معکوس واجد شرایط است. این رویکرد از برخی بحث‌های دستی جلوگیری می‌کند، اما نیاز به پیکربندی بیشتر در جلو دارد. می‌توانید در اینجا اطلاعات بیشتری درباره AJP کسب کنید.

تنظیمات مشابه با MicroSoft IIS امکان پذیر است.

تامکت جاسازی شده

برای مدت طولانی، Jetty تنها سروری بود که می‌توانست به عنوان یک سرور جاسازی شده اجرا شود. این تغییر کرده است و اکنون Tomcat می تواند به صورت embedded نیز اجرا شود. ایده استفاده از یک سرور جاسازی شده این است که به جای سرور حاوی فایل های برنامه، همانطور که تا کنون مشاهده کرده اید، یک برنامه کاربردی با یک کلاس اصلی (یعنی یک برنامه جاوا مستقل) داشته باشید که قابلیت های سرور را از آن فراخوانی می کند. داخل پایه کدش به طور کلی، این یک مدل توسعه ساده‌تر و قابل حمل‌تر را ارائه می‌دهد و به سرعت تبدیل به یک هنجار شده است. (به عنوان مثال، Spring Boot از یک نمونه Tomcat جاسازی شده استفاده می کند که در حالت توسعه دهنده اجرا می شود.)

اجرای یک سرور تعبیه شده می تواند از نظر عملیات ساده باشد، زیرا اکنون به جای برنامه کاربردی و استقرار سرور، فقط با یک مؤلفه (برنامه) سروکار دارید. از سوی دیگر، تنظیماتی که Tomcat به عنوان یک میزبان مستقل اجرا می‌کند، هنوز بسیار رایج است.

برای اجرای Tomcat embedded، کتابخانه‌های سرور را از طریق یک مدیر وابستگی مانند Maven یا Gradle اضافه می‌کنید. سپس، همانطور که در فهرست ۱ نشان داده شده است، به صورت برنامه‌نویسی سرور را در کد راه‌اندازی می‌کنید.


package foo;

import java.io.File;

import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class Main {
    public static void main(String[] args) throws Exception {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(Integer.valueOf(8080));

        StandardContext ctx = (StandardContext) tomcat.addWebapp("/", new File("src/main/webapp/").getAbsolutePath());
        File additionWebInfClasses = new File("target/classes");
        WebResourceRoot resources = new StandardRoot(ctx);
        resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes",
                additionWebInfClasses.getAbsolutePath(), "/"));
        ctx.setResources(resources);

        tomcat.start();
        tomcat.getServer().await();
    }
}

نکته اصلی لیست ۱ این است که یک شی Tomcat را نمونه سازی کنید و پارامترهای لازم مانند پورت برای گوش دادن و مکان برنامه و فایل های کلاس را به آن ارائه دهید و سپس سرور را راه اندازی کنید. می‌توانید درباره اجرای Tomcat به‌عنوان یک سرور تعبیه‌شده اطلاعات بیشتری کسب کنید اینجا.

تامکت در مقابل TomEE

اگر می‌خواهید بیشتر از قابلیت‌های استاندارد Java EE یا Jakarta EE با Tomcat استفاده کنید، یکی از گزینه‌ها این است که آن کتابخانه‌ها را به Tomcat یا وابستگی‌های برنامه خود اضافه کنید. گزینه دیگر استفاده از TomEE است. TomEE همان موتور Tomcat با پشتیبانی اضافی سازمانی جاوا است، از جمله APIهای محبوب JPA و CDI . مشخصات TomEE بر اساس وب جاوا EE است. پروفایل، بنابراین بیشتر از Tomcat به شما می دهد اما یک سرور برنامه کاربردی Java EE کامل مانند WildFly یا GlassFish.

در دسترس بودن و خوشه بندی بالا

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

نحوه مقایسه Tomcat با سرورهای دیگر

شاید تعجب کنید که Tomcat چگونه با سرورهای دیگر مقایسه می شود. بیایید نگاهی گذرا به زیر بیندازیم.

تامکت در مقابل جتی

به عنوان جایگزینی برای تامکت، جتی تمایل دارد بر عملکرد تمرکز کند، در حالی که تامکت بر به روز ماندن با مشخصات جاکارتا EE تمرکز دارد. Jetty همچنین به دلیل محبوبیت اجرای یک کانتینر servlet تعبیه شده شناخته شده است. مانند Tomcat، Jetty یک موتور servlet/JSP را ارائه می دهد که می تواند با افزونه ها گسترش یابد. به طور کلی، Tomcat محبوب تر است، اما هر دو گزینه های قوی هستند.

Tomcat vs Nginx

Nginx یک وب سرور محبوب و با کارایی بالا است. در قابلیت هایش شبیه به وب سرور آپاچی است. Nginx همچنین می تواند به عنوان یک سرور پروکسی معکوس با Tomcat استفاده شود.

Tomcat vs WildFly

WildFly پیاده‌سازی جاکارتا EE Red Hat است. این همچنین یک پروژه طولانی مدت است (که قبلاً به عنوان JBoss شناخته می شد) و زمانی از Tomcat به عنوان کانتینر Servlet/JSP خود استفاده می کرد.

Tomcat vs Httpd

Httpd نام دیگری برای وب سرور آپاچی است که قبلاً مورد بحث قرار گرفت. Httpd نام فرآیند در وب سرور آپاچی است. می توانید از این سرور به عنوان یک پروکسی معکوس با Tomcat استفاده کنید.

نتیجه گیری

Tomcat همچنان فعالانه توسعه یافته است، با تغییرات همگام است و یک پلت فرم محکم و قابل اعتماد برای استقرار برنامه های وب ارائه می دهد. هم محبوبیت مداوم و هم انتخاب آن به عنوان پلتفرم پیش‌فرض جاوا برای بسیاری از سیستم‌های PaaS گواهی بر موفقیت مداوم آن است.