JavaRush /Java blogi /Random-UZ /5-qism. Servletlar, Java servlet API. Oddiy veb-ilovani y...

5-qism. Servletlar, Java servlet API. Oddiy veb-ilovani yozish

Guruhda nashr etilgan
Ushbu material "Korxonani rivojlantirishga kirish" seriyasining bir qismidir. Oldingi maqolalar: 5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 1Konsolga matn chiqaradigan Java ilovalarini qanday yozishni allaqachon bilasizmi, lekin siz hali ham birinchi veb-ilovangizni qanday yaratishni bilmayapsizmi? Ajoyib, o'zingizni qulay qiling. Ushbu maqolada biz servletlar bilan tanishamiz va do'stlaringizga jarnik yubormasdan yoki Java-ni yuklab olishga majburlamasdan ko'rsatishingiz mumkin bo'lgan dastur yozamiz. Keling, veb-ilovani yozamiz . Agar siz hali veb-dasturlashda qo'llaniladigan yondashuvlar bilan tanish bo'lmasangiz, men sizga " Korxonani rivojlantirishga kirish " turkumidagi birinchi maqoladan o'qishni boshlashingizni maslahat beraman.

Servlet nima

Birinchidan, keling, servlet nima ekanligini va nima uchun u haqida tez-tez eshitishingizni aniqlaymiz. Java Servlet API - bu serverda amalga oshirish va so'rovga javob berish sxemasidan foydalangan holda mijoz bilan ishlash uchun mo'ljallangan standartlashtirilgan API. Servlet - bu mijozdan so'rovlarni qabul qilish va unga javoblarni qaytarish mumkin bo'lgan sinf. Ha, Java-dagi servletlar aynan mijoz-server arxitekturasi qurilgan elementlardir. Esingizda bo'lsa, biz bu haqda seriyadagi maqolalardan birida gaplashgan edik. Keling, butaning atrofida urmang: keling, darhol kod yozaylik.

Veb-ilovani yaratish uchun nima kerak

Java-da servletlar bilan qulay ishlash uchun sizga Intellij IDEA Ultimate Edition kerak bo'ladi. Bu pullik, lekin siz 30 kunlik sinov muddatini faollashtirishingiz yoki erta kirish versiyasidan foydalanishingiz mumkin - u har doim bepul. Shuningdek, bizning dastur serverimizni o'rnating - Apache Tomcat. Tomcat - bu servlet konteyneri: u tashqaridan kiruvchi so'rovlarni qayta ishlaydigan va ularni bizning ilovamizga uzatadigan konteynerdir. Tomcat-ni ushbu havoladan yuklab olishingiz mumkin .

Birinchi veb-ilovani yaratish

Agar hamma narsa tayyor bo'lsa, keling, Maven loyihasini yarataylik. Agar siz Maven bilan tanish bo'lmasangiz, oldingi maqolaga e'tibor bering . Boshlaylik!
  1. Pom.xml da javax.servlet-api bog'liqligini qo'shing va qadoqlash urushini o'rnating:

    <?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>org.example</groupId>
       <artifactId>servlets</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>war</packaging>
    
       <dependencies>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
           </dependency>
       </dependencies>
    </project>

    Oddiy servlet klassi:

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/hello")
    public class MainServlet extends HttpServlet {
    
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html");
           PrintWriter printWriter = resp.getWriter();
           printWriter.write("Hello!");
           printWriter.close();
       }
    }
  2. Ilovani ishga tushirish uchun siz Tomcat konfiguratsiyasini yaratishingiz kerak:

    5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 2 5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 3

  3. Keyinchalik, Tomcat-ning qaysi versiyasidan foydalanishimizni, serverga kirishimiz mumkin bo'lgan URL manzilini va portni ko'rsatamiz. Siz shunga o'xshash narsani olishingiz kerak:

    5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 4
  4. Qolgan narsa, konteynerga joylashtiriladigan artefaktni (yig'ilgan loyihani banka arxiviga) ko'rsatishdir. Tuzatish tugmasini bosishingiz va urush portlashini tanlashingiz mumkin : bu loyiha qayta qurilgandan so'ng artefakt avtomatik ravishda servlet konteyneriga joylashtirilishini anglatadi. 5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 5

  5. Ilova konteksti sukut bo'yicha servlets_war_exploded ga o'rnatiladi , ya'ni ilovaga quyidagi manzildan kirish kerak: http://localhost:8080/servlets_war_exploded .

    Nima uchun bizga qo'shimcha matn kerak? Keling, keraksiz narsalarni olib tashlaymiz. Endi bizning ariza manzilimiz: http://localhost:8080 .

    5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 6

  6. OK tugmasini bosing. Endi bizda ilovani ishga tushirish imkoniyati borligini ko'ramiz:

    5-qism. Servletlar, Java servlet API.  Oddiy veb-ilovani yozish - 7

    Endi, dasturni ishga tushirganingizda, brauzer ochilishi va 404 xatosini ko'rsatishi kerak. Bu mantiqan to'g'ri, chunki http://localhost:8080/ manzilida “/” xaritasi bo'lgan servlet bo'lishi kerak va bizning yagona servletimizda “/hello” xaritasi mavjud .

  7. Biz u bilan http://localhost:8080/hello manziliga murojaat qilamiz va kutilgan javobni olamiz - “Salom” qatori!

Agar hamma narsa ishlayotgan bo'lsa, kodni ko'rib chiqaylik. Oddiy sinfdan http servlet yaratish uchun uni HttpServlet sinfidan meros qilib olishingiz kerak. Sinf ustida biz @WebServlet() izohini belgilaymiz, unda biz servletni ma'lum bir yo'lga bog'laymiz (xaritalaymiz) ("/salom"). Ushbu izoh faqat Java Servlet API 3.0 da paydo bo'ldi, shuning uchun Internetda servlet xaritasi XML fayli orqali amalga oshiriladigan ko'plab misollar mavjud. Endi bu kerak emas. GET so'rovlarini qayta ishlash uchun biz doGet() usulini bekor qilamiz. Usul argumentlariga e'tibor bering - HttpServletRequest va HttpServletResponse. HttpServletRequest ob'ektidan biz so'rov haqida barcha kerakli ma'lumotlarni olishimiz mumkin, HttpServletResponse da biz javobimizni yozib olishimiz va kerakli sarlavhalarni o'rnatishimiz mumkin.

Parametrlar va seans bilan ishlash

Keling, so'rov parametrlarini qayta ishlash va sessiya bilan ishlash uchun servletimizni yaxshilaylik:
import javax.servlet.ServletException;
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 ServletException, 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" + "<br>");
       } else {
           printWriter.write("Hello, " + username + "<br>");
       }
       printWriter.write("Page was visited " + visitCounter + " times.");
       printWriter.close();
   }
}
Servlet hozirda seansni boshqarmoqda va har safar sahifaga tashrif buyurilganda visitCounter sonini oshiradi. Agar visitCounter atributi hali yaratilmagan bo'lsa (sahifaga birinchi marta tashrif buyurganingizda), getAttribute() usuli nullni qaytaradi, shuning uchun siz nullni tekshirishingiz kerak. Xuddi shu narsa so'rov parametrlariga ham tegishli. Agar foydalanuvchi foydalanuvchi nomi parametridan o'tmagan bo'lsa, uning qiymati null bo'ladi. Bunday holda, biz foydalanuvchini anonim sifatida kutib olamiz. GET so'rovida parametrni o'tkazish uchun yo'l o'zgaruvchilari ishlatiladi, ya'ni http://localhost:8080/hello?username=Pavel havolasiga kirishingiz kerak . Http so'rovlari haqida ko'proq ma'lumotni seriyadagi oldingi maqolada o'qishingiz mumkin . Endi bizning ilovamiz minimal mantiqqa ega, ammo ildiz yo'lidagi 404 xatolik biroz zerikarli. Buni tuzatish uchun keling, boshqa servlet yaratamiz va uni @WebServlet("/") boshlang'ich sahifasiga joylashtiramiz. Ushbu servletning vazifasi so'rovlarni "/salom" yo'liga yo'naltirishdir. Buning ikki yo'li mavjud: oldinga yoki qayta yo'naltirishdan foydalanish. Ehtimol, ular orasidagi farq nima ekanligini tushunishga arziydi. forward - delegatlar serverdagi boshqa servletga so'rovni qayta ishlash, mijoz ishtirok etmaydi. Buning uchun siz yangi servletning doGet() usuliga quyidagi kodni qo'shishingiz kerak:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Ushbu kodda biz servlet kontekstiga kiramiz, undan kerakli servletning so'rov menejerini olamiz va undan ko'rsatilgan parametrlar (req, resp) bilan muayyan so'rovni qayta ishlashni so'raymiz. qayta yo'naltirish - mijozga uning so'rovini ko'rib chiqish uchun bog'lanishi kerak bo'lgan manzilni qaytaradi. Ko'pgina brauzerlar uzatilgan havolaga avtomatik ravishda o'tadi. Qayta yo'naltirishni amalga oshirish uchun ushbu kodni qo'shishingiz kerak:
resp.sendRedirect(req.getContextPath() + "/hello");
HttpServletResponse da biz redirect() usulini chaqiramiz va unga mijoz bog'lanishi kerak bo'lgan manzilni uzatamiz. Muhim tafsilot: http parametrlari to'liq qayta yo'naltirish yo'lining oxirida ham qo'shilishi kerak, bu juda qulay emas. Bizning vaziyatimizda oldinga foydalanish afzalroq, lekin shunday bo'ladiki, qayta yo'naltirishdan foydalanish yaxshiroqdir. Agar siz ularning ishidagi farqni tushunsangiz, tanlovingiz bilan adashmaysiz. Yangi servlet uchun kod quyidagicha ko'rinadi:
import javax.servlet.ServletException;
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 ServletException, IOException {
//        getServletContext().getRequestDispatcher("/hello").forward(req, resp);
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}

Pastki chiziq

Sizning birinchi veb-ilovangiz tayyor. Keyingi maqolada siz Intellij IDEA-dan foydalanmasdan uni qanday joylashtirishni o'rganasiz. Biz faqat GET so'rovlarini qayta ishlaydigan dastur yozdik. Qolgan http usullari xuddi shu tarzda qayta ishlanadi - ota-klassning mos keladigan usullarini bekor qiladi. Bunday oddiy servletlardan foydalanib, siz murakkab, boy veb-ilovalarni yaratishingiz mumkin. Albatta, Spring kabi katta ramkalar yordamida buni qilish ancha oson. Ammo agar siz haqiqatan ham servletlarning barcha imkoniyatlarini batafsilroq o'rganishni istasangiz, rasmiy spetsifikatsiyani o'qishingiz mumkin . 6-qism. Servlet konteynerlari 7-qism. MVC (Model-View-Controller) naqshiga kirish 8-qism. Spring-boot-da kichik dastur yozish
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION