- şəbəkə haqqında ;
- proqram arxitekturası haqqında ;
- HTTP/HTTPS protokolları haqqında ;
- Maven əsasları haqqında .
Servlet nədir
Əvvəlcə servletin nə olduğunu və niyə bu barədə tez-tez eşitdiyinizi anlayaq. Java Servlet API serverdə həyata keçirmək və sorğu-cavab sxemindən istifadə edərək müştəri ilə işləmək üçün nəzərdə tutulmuş standartlaşdırılmış API-dir. Servlet, müştəridən sorğu qəbul edə və ona cavabları qaytara bilən sinifdir. Bəli, Java-da servletlər müştəri-server arxitekturasının qurulduğu elementlərdir. Xatırlayırsınızsa, biz artıq silsilədəki məqalələrin birində bu haqda danışmışdıq. Gəlin kolun ətrafında döyməyək: dərhal bəzi kod yazaq.Veb tətbiqi yaratmaq üçün nə lazımdır
Java-da servletlərlə rahat işləmək üçün sizə Intellij IDEA Ultimate Edition lazımdır. Ödənişlidir, lakin siz 30 günlük sınaq müddətini aktivləşdirə və ya erkən giriş versiyasından istifadə edə bilərsiniz - həmişə pulsuzdur. Həmçinin proqram serverimizi - Apache Tomcat-ı quraşdırın. Tomcat bir servlet konteyneridir: xaricdən daxil olan sorğuları emal edən və onları tətbiqimizə ötürəndir. Tomcat-ı bu linkdən yükləyə bilərsiniz .İlk veb tətbiqinin yaradılması
Hər şey hazırdırsa, Maven layihəsi yaradaq. Maven ilə tanış deyilsinizsə, əvvəlki məqaləyə diqqət yetirin . Başlayaq!-
Pom.xml-də javax.servlet-api asılılığını əlavə edin və qablaşdırma müharibəsini təyin edin:
<?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>
Sadə servlet sinfi:
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(); } }
-
Proqramı işə salmaq üçün Tomcat konfiqurasiyasını yaratmalısınız:
-
Sonra Tomcat-ın hansı versiyasını istifadə edəcəyimizi, serverə daxil ola biləcəyimiz URL-i və portu göstəririk. Bu kimi bir şey almalısınız:
-
Qalan şey konteynerə yerləşdiriləcək artefaktı (bir banka arxivinə yığılmış layihə) müəyyən etməkdir. Siz "Düzelt" düyməsini klikləyərək müharibənin partladıldığını seçə bilərsiniz : bu o deməkdir ki, layihə yenidən qurulduqdan sonra artefakt avtomatik olaraq servlet konteynerinə yerləşdiriləcək.
-
Tətbiq konteksti defolt olaraq servlets_war_exploded olaraq təyin olunub , bu o deməkdir ki, proqrama http://localhost:8080/servlets_war_exploded ünvanından daxil olmaq lazımdır .
Niyə bizə əlavə mətn lazımdır? Gəlin lazımsız şeyləri çıxaraq. İndi bizim müraciət ünvanımız: http://localhost:8080 .
-
OK düyməsini basın. İndi tətbiqi işə salmaq imkanımız olduğunu görürük:
İndi proqramı işə saldığınız zaman brauzer açılmalı və 404 xətası göstərməlidir. Bu məntiqlidir, çünki http://localhost:8080/ ünvanında “/” xəritələməsi olan servlet olmalıdır və bizim yeganə servletimizdə “/hello” xəritələməsi var .
-
Biz onunla http://localhost:8080/hello ünvanında əlaqə saxlayıb gözlənilən cavabı - “Salam” sətrini alırıq!
Parametrlər və sessiya ilə işləmək
Servletimizi təkmilləşdirək ki, o, sorğu parametrlərini emal edə və sessiya ilə işləyə bilsin: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 hazırda seansı idarə edir, səhifəyə hər dəfə daxil olanda visitCounter-i artırır. Əgər visitCounter atributu hələ yaradılmayıbsa (səhifəyə ilk dəfə daxil olanda), getAttribute() metodu null qaytaracaq, ona görə də null-u yoxlamaq lazımdır. Eyni şey sorğu parametrlərinə də aiddir. İstifadəçi istifadəçi adı parametrini keçməyibsə, onun dəyəri sıfır olacaq. Bu halda istifadəçini anonim olaraq salamlayacağıq. GET sorğusunda parametri ötürmək üçün yol dəyişənlərindən istifadə olunur, yəni http://localhost:8080/hello?username=Pavel linkinə daxil olmaq lazımdır . Http sorğuları haqqında daha ətraflı silsilənin əvvəlki məqaləsində oxuya bilərsiniz . İndi tətbiqimiz minimal məntiqə malikdir, lakin kök yolundakı 404 xətası bir az bezdiricidir. Bunu düzəltmək üçün başqa bir servlet yaradaq və onu @WebServlet("/") ilkin səhifəsinə uyğunlaşdıraq. Bu servletin işi sorğuları “/salam” yoluna yönləndirməkdir. Bunun iki yolu var: irəli və ya yönləndirmədən istifadə etməklə. Bəlkə də aralarındakı fərqin nə olduğunu anlamağa dəyər. irəli - nümayəndələr serverdəki başqa servletə emal tələb edir, müştəri iştirak etmir. Bunun üçün yeni servletin doGet() metoduna aşağıdakı kodu əlavə etməlisiniz:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Bu kodda biz servlet kontekstinə daxil oluruq, ondan istədiyimiz servletin sorğu menecerini alırıq və ondan müəyyən edilmiş parametrlərlə (req, resp) xüsusi sorğunu emal etməyi xahiş edirik. yönləndirmə - sorğusunu icra etmək üçün əlaqə saxlamalı olduğu ünvanı müştəriyə qaytarır. Əksər brauzerlər avtomatik olaraq ötürülən linkə keçir. İstiqamətləndirməni həyata keçirmək üçün bu kodu əlavə etməlisiniz:
resp.sendRedirect(req.getContextPath() + "/hello");
HttpServletResponse-də biz redirect() metodunu çağırırıq və ona müştərinin əlaqə saxlaması lazım olan ünvanı ötürürük. Əhəmiyyətli bir detal: http parametrləri də tam yönləndirmə yolunun sonuna əlavə edilməlidir, bu çox rahat deyil. Bizim vəziyyətimizdə irəlidən istifadəyə üstünlük verilir, lakin belə olur ki, yönləndirmədən istifadə etmək daha yaxşıdır. Onların işindəki fərqi başa düşsəniz, seçiminizdə səhv etməyəcəksiniz. Yeni servlet üçün kod belə görünür:
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");
}
}
GO TO FULL VERSION