JavaRush /وبلاگ جاوا /Random-FA /ایجاد یک برنامه وب ساده با استفاده از servlets و jsp (قسم...
Стас Пасинков
مرحله
Киев

ایجاد یک برنامه وب ساده با استفاده از servlets و jsp (قسمت 1)

در گروه منتشر شد
سطح دانش لازم برای درک مقاله: شما قبلاً کم و بیش Java Core را درک کرده اید و می خواهید به فناوری های JavaEE و برنامه نویسی وب نگاه کنید. اگر در حال حاضر در حال مطالعه جستجوی مجموعه‌های جاوا هستید، که موضوعات نزدیک به مقاله را پوشش می‌دهد، بسیار منطقی است. ایجاد یک برنامه وب ساده با استفاده از servlets و jsp (قسمت 1) - 1این مطالب ادامه منطقی مقاله من ایجاد یک پروژه وب ساده در IntelliJ Idea Enterprise است . در آن من نحوه ایجاد یک الگوی پروژه وب کار را نشان دادم. این بار به شما نشان خواهم داد که چگونه با استفاده از Java Servlet API و JavaServer Pages API یک برنامه وب ساده اما زیبا ایجاد کنید. برنامه ما یک صفحه اصلی با دو پیوند خواهد داشت:
  • به صفحه اضافه کردن کاربر؛
  • به صفحه نمایش لیست کاربران.
من همچنان از IntelliJ Idea Enterprise Edition، Apache Maven (فقط شامل چند وابستگی) و Apache Tomcat استفاده خواهم کرد. در پایان، برنامه خود را با استفاده از چارچوب W3.CSS "تزیین" می کنیم . ما فرض می کنیم که در حال حاضر شما یک پروژه خالی دارید که در اینجا توسعه خواهیم داد. اگر نه، مقاله اول را مرور کنید و آن را بسازید. فقط چند دقیقه طول میکشه :)

کمی در مورد ساختار برنامه آینده

صفحه اصلی ما ( / ) معمولی ترین صفحه html استاتیک با یک هدر و دو لینک/دکمه خواهد بود:
  • یک کاربر جدید اضافه کنید (به /add ارسال خواهد شد ).
  • مشاهده لیست کاربران (به /list ارسال می کند ).
Tomcat درخواست‌های این آدرس‌ها را دریافت می‌کند و آنها را به یکی از دو سرولتی که می‌سازیم ارسال می‌کند (ما نگاشت را در فایل web.xml توضیح خواهیم داد ). و servlet ها به نوبه خود درخواست ها را پردازش می کنند، داده ها را آماده می کنند (یا در صورت اضافه شدن کاربر ذخیره می کنند)، و کنترل را به فایل های jsp مربوطه منتقل می کنند، که قبلاً نتیجه را "رندر" می کند. ما داده ها را در رایج ترین لیست (List) ذخیره می کنیم.

بیایید یک صفحه اصلی ثابت ایجاد کنیم

اگر index.jsp را در پوشه وب خود دارید ، آن را حذف کنید. در عوض، در این پوشه یک فایل html ساده به نام index.html ایجاد می کنیم :
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My super project!</title>
</head>
<body>
    <!-- header -->
    <div>
        <h1>Super app!<//h1>
    </div>

    <div>       <!-- content -->
        <div>    <!-- buttons holder -->
            <button onclick="location.href='/list'">List users<//button>
            <button onclick="location.href='/add'">Add user<//button>
        </div>
    </div>
</body>
</html>
اینجا هیچ چیز پیچیده ای نیست در عنوان ما عنوان صفحه خود را نشان می دهیم. در بدنه صفحه دو div اصلی داریم: header (header) و content (content). در محتوا یک نگهدارنده برای دکمه های خود داریم و در واقع دو دکمه که با کلیک روی آن ها به آدرس های مربوطه ارسال می شود. شما می توانید پروژه را اجرا کنید و ببینید که اکنون چگونه به نظر می رسد. اگر روی دکمه ها کلیک کنید، صفحاتی با خطای 404 باز می شوند زیرا هنوز آنها را نداریم. اما این نشان می دهد که دکمه ها کار می کنند. اجازه دهید توجه داشته باشم که این جهانی ترین گزینه نیست، زیرا اگر به طور ناگهانی جاوا اسکریپت را غیرفعال کنید، این دکمه ها در مرورگر هیچ کاربردی نخواهند داشت. اما ما فرض می کنیم که هیچ کس جاوا اسکریپت را غیرفعال نکرده است :). واضح است که می توان از پیوندهای ساده استفاده کرد، اما من دکمه ها را ترجیح می دهم. شما کاری را که بیشتر دوست دارید انجام می دهید. و به این واقعیت نگاه نکنید که در نمونه های من دیوهای زیادی وجود خواهد داشت . سپس آنها را با سبک ها پر می کنیم و همه چیز زیباتر به نظر می رسد :).

فایل های jsp را برای رندر نتیجه ایجاد کنید

در همان فهرست وب ، ما یک پوشه ایجاد می کنیم که در آن فایل های jsp خود را قرار می دهیم . من اسمش را گذاشتم views و باز هم می توانی بداهه بگویی. در این پوشه دو فایل jsp ایجاد می کنیم:
  • add.jsp - صفحه برای افزودن کاربران؛
  • list.jsp - صفحه ای برای نمایش لیستی از کاربران.
بیایید عنوان صفحه مناسب را به آنها بدهیم. چیزی مانند «افزودن کاربر جدید» و «لیست کاربران»، و فعلاً آن را به همین صورت رها می‌کنیم.

بیایید دو servlet ایجاد کنیم

Servlets درخواست هایی را که Tomcat به آنها ارسال می کند، دریافت و پردازش خواهند کرد. در پوشه src/main/java یک بسته برنامه ایجاد خواهیم کرد که حاوی منابع ما خواهد بود. در آنجا ما بسته های مختلف بیشتری خواهیم داشت. بنابراین، برای اینکه این بسته ها در داخل یکدیگر ایجاد نشوند، اجازه دهید یک کلاس در بسته برنامه ایجاد کنیم (سپس آن را حذف کنید). حال بیایید سه بسته مختلف در بسته برنامه ایجاد کنیم:
  • entities - موجودیت های ما در اینجا قرار خواهند گرفت (خود کلاس که اشیاء کاربر را توصیف می کند).
  • مدل - مدل ما اینجا خواهد بود (در این مورد کمی بعدتر)
  • servlets - خوب، اینجا سرورهای ما خواهد بود.
پس از این، می توانید با خیال راحت آن کلاس را از بسته برنامه حذف کنید (البته اگر آن را ایجاد کرده باشید). در بسته servlets دو کلاس ایجاد خواهیم کرد:
  • AddServlet - درخواست های دریافت شده در /add را پردازش می کند .
  • ListServlet - درخواست های دریافت شده در /list را پردازش می کند .

اتصال وابستگی ها در Maven

Tomcat نسخه 9.* مشخصات Servlet نسخه 4.0 و JavaServer Pages نسخه 2.3 را پیاده سازی می کند. این در مستندات رسمی Tomcat 9 در پاراگراف اول در خط دوم نوشته شده است. یعنی اگر شما هم مثل من از این نسخه Tomcat استفاده می کنید، کدی که برای اجرا می نویسیم و می فرستیم دقیقاً از نسخه های مشخص شده استفاده می کند. اما ما دوست داریم این مشخصات را در پروژه خود داشته باشیم تا کد ما که از آنها استفاده می کند حداقل با موفقیت کامپایل شود. و برای این ما باید آنها را در پروژه خود بارگذاری کنیم. اینجاست که Maven به کمک می آید.

قانون کلی این است: اگر نیاز دارید با استفاده از Maven چیزی را به پروژه خود متصل کنید:

  • به وب سایت مخزن Maven بروید؛
  • کتابخانه مورد نیاز و نسخه مورد نیاز خود را در آنجا جستجو کنید.
  • کد وابستگی را دریافت می کنید که باید در pom.xml خود درج شود.
  • درج کنید! :)
پس بیایید شروع کنیم. ابتدا بیایید یک فایل pom آماده کنیم . جایی بعد از /version اما قبل از /project عبارت زیر را وارد کنید:
<dependencies>

</dependencies>
بنابراین، ما نشان دادیم که در داخل این برچسب ها وابستگی های مورد نیاز خود را لیست خواهیم کرد. اکنون به mvnrepository.com بروید ، یک قسمت جستجو در بالا وجود دارد. ابتدا servlet را در جستجو وارد کنید. اولین نتیجه، جایی که بیش از هفت هزار کاربرد وجود دارد، مناسب ماست. ما به یاد داریم که به نسخه 4.0 نیاز داریم (برای Tomcat 9؛ برای نسخه های دیگر، پیاده سازی های قدیمی ممکن است مناسب باشند). این یک نسخه نسبتاً جدید است، بنابراین کاربردهای زیادی ندارد، اما نسخه ای است که ما به آن نیاز داریم. صفحه ای باز می شود که می توانید کد این وابستگی را برای مدیران بسته های مختلف دریافت کنید و حتی می توانید آن را دانلود کنید. اما از آنجایی که می خواهیم با استفاده از Maven آن را متصل کنیم، کد موجود در تب Maven را انتخاب می کنیم. ما در فایل pom خود در قسمت وابستگی ها کپی و جایگذاری می کنیم. اگر اعلانی در گوشه سمت راست پایین IDEA ظاهر شود و از شما بپرسد که آیا می‌خواهیم واردات خودکار را فعال کنیم، موافقت می‌کنیم. اگر تصادفاً امتناع کردید، به «تنظیمات» بروید و وارد کردن خودکار را به صورت دستی فعال کنید: تنظیمات (Ctrl + Alt + S) -> ساخت، اجرا، استقرار -> Maven -> وارد کردن این فایل pom و فایل‌های پیکربندی IDEA را برای این کار حفظ می‌کند. پروژه به صورت همگام اکنون با استفاده از همین اصل، JavaServer Pages نسخه 2.3 را پیدا کرده و متصل می کنیم (jsp را در جستجو وارد کنید). و از آنجایی که ما قبلاً Maven را انتخاب کرده‌ایم، بیایید فوراً به آن بگوییم که منابع ما با نحو جاوا 8 مطابقت دارند و باید در بایت کد همان نسخه کامپایل شوند. پس از تمام این دستکاری ها، pom.xml ما چیزی شبیه به این خواهد شد:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.javarush.info.fatfaggy</groupId>
    <artifactId>my-super-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compile.source>
        <maven.compiler.target>1.8</maven.compile.target>
    </properties>

    <dependencies>
        <!-- Servlet API 4.0 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- JavaServer Pages API 2.3 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

سرولت های خود را به سرولت های واقعی تبدیل کنیم

در این مرحله، دو سروری که ما ایجاد کرده‌ایم در واقع فقط کلاس‌های معمولی هستند. هیچ کارکردی ندارند اما اکنون Servlet API را به پروژه خود متصل کرده ایم، و اگر چنین است، می توانیم از کلاس ها از آنجا استفاده کنیم. برای اینکه سرولت های خود را به سرولت های واقعی تبدیل کنیم، کافی است آنها را از کلاس HttpServlet به ارث ببریم .

نقشه برداری یا پارتیشن بندی

حال بهتر است به نوعی به Tomcat بگوییم تا درخواست‌های /add توسط سرویس AddServlet ما رسیدگی شود ، و بنابراین درخواست‌های /list توسط سرویس‌دهنده ListServlet رسیدگی می‌شوند . این فرآیند نقشه برداری نامیده می شود . این کار در فایل web.xml طبق این اصل انجام می شود:
  • ابتدا servlet را توصیف می کنیم (نامی می دهیم و مسیر خود کلاس را نشان می دهیم).
  • سپس این servlet را به یک آدرس خاص متصل می کنیم (نام سرورلتی را که به تازگی به آن داده ایم نشان می دهیم و آدرسی را که باید از آن درخواست ها به این سرورلت ارسال شود) نشان می دهیم.
بیایید سرورلت را توضیح دهیم:
<servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>app.servlets.AddServlet</servlet-class>
</servlet>
اکنون آن را به آدرس زیر متصل می کنیم:
<servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
همانطور که می بینید، servlet-name در هر دو مورد یکسان است. به لطف این، تامکت می داند که اگر درخواستی به آدرس /add برسد ، باید به app.servlets.AddServlet servlet ارسال شود . با سرولت دوم هم همین کار را می کنیم. در نتیجه، web.xml ما تقریباً دارای محتوای زیر است:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- add servlet -->
    <servlet>
        <servlet-name>add</servlet-name>
        <servlet-class>app.servlets.AddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>add</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

    <!-- list servlet -->
    <servlet>
        <servlet-name>list</servlet-name>
        <servlet-class>app.servlets.ListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>list</servlet-name>
        <url-pattern>/list</url-pattern>
    </servlet-mapping>
</web-app>
به هر حال، ما نشانه گذاری برای صفحه اصلی در اینجا (در / ) ایجاد نکردیم . واقعیت این است که در این مورد ما به آن نیاز نداریم. صفحه اصلی ما یک فایل html ساده است که به سادگی دو دکمه را نمایش می دهد. هیچ محتوای پویا وجود ندارد، بنابراین ایجاد یک سرور جداگانه برای آن بی معنی است که درخواست‌هایی از آدرس / به آن ارسال می‌شود، و هیچ کاری به جز انتقال اجرای به برخی از jsp انجام نمی‌دهد (که همچنین باید انجام شود. ایجاد شد)، که اگر فقط دو دکمه داشتیم، ترسیم می کرد. ما به این نیاز نداریم؛ ما از یک منبع ثابت راضی هستیم. وقتی تامکت درخواستی را دریافت می کند، بررسی می کند که هیچ سروری وجود نداشته باشد که بتواند درخواست را در چنین آدرسی پردازش کند و سپس می بیند که در این آدرس در واقع یک فایل html آماده وجود دارد که با موفقیت ارسال می کند. . ما می‌توانیم برنامه خود را دوباره اجرا کنیم (سرور را راه‌اندازی مجدد یا به‌صورتی که شما ترجیح می‌دهید) و مطمئن شویم که صفحه اصلی رندر شده است، چیزی خراب نیست، وقتی روی دکمه‌ها کلیک می‌کنیم، انتقال رخ می‌دهد، اما در حال حاضر یک خطا نیز وجود دارد. نوشته شده است. ضمناً، اگر قبلاً خطای 404 داشتیم، اکنون یک خطای 405 داریم. این بدان معناست که نقشه برداری کار کرده است، سرولت ها پیدا شده اند، اما آنها روش مناسبی برای پردازش درخواست ندارند. اگر در این مرحله همچنان خطای 404 دریافت می کنید، اگرچه همه چیز به درستی انجام شده است، شاید باید پیکربندی استقرار را در ایده اصلاح کنید. برای انجام این کار، باید به Edit configurations بروید (در بالای دکمه شروع)، به تب Deployment در سمت راست پنجره بروید و مطمئن شوید که در زمینه Application به سادگی نشان داده شده است /

یک انحراف غزلی کوتاه: "زیر سرپوش" چه می‌گذرد؟

احتمالاً قبلاً از خود پرسیده اید که برنامه ما در تامکت چگونه کار می کند؟ اونجا چه خبره؟ و متد main() کجاست ؟ به محض اینکه localhost:8080 را در مرورگر خود تایپ می کنید و به این آدرس می روید، مرورگر درخواستی را از طریق پروتکل http به این آدرس ارسال می کند . امیدوارم قبلاً آگاه باشید که درخواست‌ها می‌توانند انواع مختلفی داشته باشند که محبوب‌ترین آنها GET و POST هستند . هر درخواستی باید پاسخی داشته باشد. درخواست GET انتظار دارد که در پاسخ به آن یک کد html آماده داده شود که به مرورگر بازگردانده می شود و مرورگر به زیبایی این کد را با انواع حروف، دکمه ها و فرم ها جایگزین می کند. درخواست POST کمی جالب تر است، زیرا اطلاعاتی را نیز با خود حمل می کند. به عنوان مثال، در فرم ثبت نام کاربر یا مجوز، داده های خود را وارد کرده و روی "ارسال" کلیک کرده اید. در این لحظه یک درخواست POST با اطلاعات شخصی شما به سرور ارسال شد. سرور این اطلاعات را پذیرفت، آن را پردازش کرد و نوعی پاسخ را برگرداند (به عنوان مثال، یک صفحه html با نمایه شما). تفاوت اساسی بین آنها این است که درخواست های GET فقط برای دریافت داده ها از سرور در نظر گرفته شده است، در حالی که درخواست های POST برخی از اطلاعات را با خود حمل می کنند و داده های روی سرور ممکن است تغییر کنند (به عنوان مثال، زمانی که عکس خود را در سرور آپلود می کنید، در درخواست POST پرواز می کند و سرور آن را به پایگاه داده اضافه می کند، یعنی مقداری تغییر رخ می دهد.حالا به تامکت برگردیم.وقتی درخواستی از مشتری دریافت کرد به آدرس نگاه می کند.داده های خود را جستجو می کند تا ببینید آیا سرولت مناسبی وجود دارد که درخواست‌های چنین آدرسی را پردازش کند (یا منبع آماده‌ای که می‌تواند فوراً برگردانده شود) اگر چیزی برای بازگشت پیدا نکرد، نه با یک صفحه html، بلکه پاسخ می‌دهد. با یک پاسخ 404. اگر سرولت مناسبی را پیدا کند که روی این آدرس "نشسته" باشد، نوع درخواستی را که دریافت کرده است (GET، POST یا موارد دیگر) را بررسی می کند و سپس از سرولت می پرسد که آیا روشی دارد که اگر سرورلت بگوید که نمی تواند این نوع را پردازش کند، Tomcat با کد 405 به مشتری پاسخ می دهد. این همان چیزی است که برای ما اتفاق افتاده است. اما اگر سرولت مناسبی پیدا شود و روش مناسبی داشته باشد، تامکت یک شی از این سرولت ایجاد می‌کند، آن را در یک رشته جدید ( thread ) اجرا می‌کند که به سرور اجازه می‌دهد در یک رشته جداگانه کار کند و تامکت به کار بیشتر ادامه می‌دهد. در خود، دریافت و ارسال درخواست ها. علاوه بر این، Tomcat دو شی دیگر ایجاد می کند: یکی از نوع HttpServletRequest (در آینده به طور خلاصه آن را یک درخواست می نامم) و دومی از نوع HttpServletResponse .(من آن را پاسخ می نامم). در شی اول، تمام داده هایی را که دریافت کرده است در یک درخواست از مشتری قرار می دهد، بنابراین همه آن داده ها را می توان از این شی خارج کرد. خوب، بعد از همه اینها، این دو شی را به متد مناسب servlet که در یک رشته مجزا در حال اجرا است، منتقل می کند. به محض اینکه servlet کار خود را تمام کرد و پاسخی آماده ارسال به مشتری داشت، پرچمی را برای تامکت بالا می‌برد و می‌گوید: «تمام کردم، همه چیز آماده است». تامکت پاسخ را می پذیرد و برای مشتری ارسال می کند. این به Tomcat اجازه می‌دهد تا درخواست‌ها را بپذیرد و پاسخ‌ها را بدون وقفه ارسال کند، در حالی که تمام کار توسط servlet‌هایی انجام می‌شود که در رشته‌های جداگانه اجرا می‌شوند. بر این اساس، زمانی که کد سرورلت را می نویسیم، کاری را که انجام خواهد شد، تعریف می کنیم. و بله، شما می توانید متد ()main را در خود تامکت در نظر بگیرید (بله، در جاوا نوشته شده است) و وقتی Tomcat را "شروع" می کنیم، main().

ما متدهای GET را با servlet ها می گیریم و پاسخ های ساده ای را ارسال می کنیم

در حال حاضر سرورهای ما متدهای مناسبی (GET) ندارند، بنابراین تامکت خطای 405 را به ما برمی گرداند، بیایید آنها را بسازیم! کلاس HttpServlet که از آن سرورهای خود را به ارث می بریم، متدهای مختلفی را تعریف می کند. برای اینکه کدی برای متدها تنظیم کنیم، به سادگی آنها را لغو می کنیم. در این مورد، ما باید متد doGet() را در هر دو سرور رد کنیم.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
همانطور که می بینید، این روش دو شی req (درخواست) و resp (پاسخ) را می پذیرد. اینها همان اشیایی هستند که تامکت با فراخوانی متد مناسب در این سرورلت برای ما ایجاد و پر می کند. ابتدا بیایید ساده ترین پاسخ ها را انجام دهیم. برای انجام این کار، شی resp را بگیرید و از آن یک شی PrintWriter بگیرید ، که می تواند برای نوشتن پاسخ ها استفاده شود. خوب، با استفاده از آن، تعدادی رشته ساده را چاپ خواهیم کرد.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("Method GET from AddServlet");
}
ما کاری مشابه را در ListServlet servlet انجام خواهیم داد ، پس از آن سرور خود را دوباره راه اندازی می کنیم. همانطور که می بینید، همه چیز کار می کند! وقتی روی دکمه ها کلیک می کنید، صفحاتی با متنی که با PrintWriter "ضبط" کرده ایم باز می شود . فقط این است که jsp ما که برای تولید صفحات با پاسخ آماده کرده ایم به هیچ وجه استفاده نمی شود. این به این دلیل است که اعدام به سادگی به آنها نمی رسد. سرورلت خود اکنون یک پاسخ تولید می کند و کار خود را به پایان می رساند و به Tomcat نشان می دهد که یک پاسخ آماده برای مشتری دارد. Tomcat به سادگی این پاسخ را می گیرد و آن را برای مشتری ارسال می کند. ما کنترل را از servlets به jsp منتقل می کنیم. بیایید کد متدهای خود را به این صورت تغییر دهیم:
  • ما از شی درخواست یک شی مدیر درخواست دریافت می کنیم، جایی که آدرس jsp صفحه ای را که می خواهیم کنترل را به آن منتقل کنیم، ارسال می کنیم.
  • با استفاده از شی دریافتی، کنترل را به صفحه jsp مشخص شده منتقل می کنیم و فراموش نکنید که اشیاء درخواست و پاسخی که از Tomcat دریافت کرده ایم را در آنجا ضمیمه کنید.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
در بدنه صفحات jsp (داخل تگ body) می توانیم چیزی بنویسیم تا به وضوح ببینیم کدام صفحه نمایش داده می شود. پس از آن سرور را ریستارت کرده و بررسی می کنیم. دکمه های صفحه اصلی فشار داده می شوند، صفحات باز می شوند، به این معنی که درخواست ها به servlet ها ارسال می شوند، پس از آن کنترل به صفحات jsp که قبلا رندر شده اند منتقل می شود. همین. در قسمت بعدی مقاله به عملکرد اپلیکیشن خود می پردازیم.

دیگر چه بخوانیم:

ایجاد یک پروژه وب ساده در IntelliJ Idea Enterprise. گام به گام با عکس


چت من
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION