JavaRush /Java Blog /Random-TK /Bölüm 5. Servlets, Java servlet API. Simpleönekeý web pro...

Bölüm 5. Servlets, Java servlet API. Simpleönekeý web programmasy ýazmak

Toparda çap edildi
Bu material “Kärhananyň ösüşine giriş” seriýasynyň bir bölegidir. Öňki makalalar: Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 1Konsola tekst çykarýan Java programmalaryny nädip ýazmalydygyny bilýärsiňizmi, emma ilkinji web programmaňyzy nädip döretmelidigini henizem bilmeýärsiňizmi? Gowy, özüňizi rahat ediň. Bu makalada, hyzmatkärler bilen tanşarys we dostlaryňyza jarnik ibermezden ýa-da Java göçürip almaga mejbur etmezden görkezip boljak programma ýazarys. Web programmasy ýazalyň . Web programmirlemekde ulanylýan çemeleşmeler bilen entek tanyş däl bolsaňyz, " Kärhananyň ösüşine giriş " seriýasyndaky birinji makaladan başlamagy maslahat berýärin.

Serwlet näme

Ilki bilen, servletiň nämedigini we näme üçin ýygy-ýygydan eşidýändigiňizi anyklalyň. Java Servlet API serwerde durmuşa geçirmek we haýyş-jogap shemasy bilen müşderi bilen işlemek üçin döredilen standartlaşdyrylan API. Serwlet, müşderiniň isleglerini kabul edip we oňa jogaplary alyp bilýän synpdyr. Hawa, Java-daky hyzmatlar, müşderi-serwer arhitekturasynyň gurlan elementleri. .Adyňyzda bolsa, eýýäm seriýadaky makalalaryň birinde bu hakda gürleşipdik. Gyrymsylygyň töwereginde urmaň: derrew käbir kod ýazalyň.

Web programmasy döretmek üçin näme gerek

Java-da servletler bilen rahat işlemek üçin Intellij IDEA Ultimate Edition gerek bolar. Tölegli, ýöne 30 günlük synag möhletini işjeňleşdirip ýa-da irki giriş wersiýasyny ulanyp bilersiňiz - elmydama mugt. Şeýle hem programma serwerimizi - Apache Tomcat guruň. Tomcat serwlet konteýner: daşardan gelýän haýyşlary gaýtadan işleýän we olary programmamyza iberýän zat. Tomkaty şu baglanyşykdan göçürip alyp bilersiňiz .

Ilkinji web programmasyny döretmek

Hemme zat taýyn bolsa, geliň Maven taslamasyny döredeliň. Maven bilen tanyş däl bolsaňyz, öňki makala üns beriň . Başlalyň!
  1. Pom.xml-de javax.servlet-api garaşlylygyny goşuň we gaplama söweşini düzüň:

    <?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>

    Pleönekeý hyzmat ediş synpy:

    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. Programmany işletmek üçin Tomcat konfigurasiýasyny döretmeli:

    Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 2 Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 3

  3. Ondan soň, Tomkatyň haýsy wersiýasyny ulanjakdygymyzy, serwere girip boljak URL-ni we porty görkezýäris. Munuň ýaly bir zat almaly:

    Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 4
  4. Galan zat, konteýnerde ýerleşdiriljek artefakty (ýygnalan taslama bankanyň arhiwine) görkezmekdir. “Düzediş” düwmesine basyp , ýarylan söweşi saýlap bilersiňiz : bu taslama täzeden gurlansoň, artefakt awtomatiki usulda hyzmat ediş konteýnerine ýerleşdiriljekdigini aňladýar. Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 5

  5. Programmanyň mazmuny servlets_war_exploded görnüşinde düzüldi, bu programma http: // localhost: 8080 / servlets_war_exploded salgysyna girmelidigini aňladýar .

    Näme üçin goşmaça tekst gerek? Gereksiz zatlary aýyralyň. Indi anketamyzyň salgysy: http: // localhost: 8080 .

    Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 6

  6. OK basyň. Indi programmany işe girizmäge mümkinçiligimiziň bardygyny görýäris:

    Bölüm 5. Servlets, Java servlet API.  Webönekeý web programmasy ýazmak - 7

    Indi, programmany işe girizeniňizde, brauzer 404 ýalňyşlygy açmaly we görkezmeli. Bu mantykly, sebäbi http: // localhost: 8080 / salgysynda “/” kartalaşdyryş hyzmaty bolmaly we ýeke-täk hyzmatçymyzda “/ salam” kartasy bar .

  7. Http: // localhost: 8080 / salam bilen habarlaşýarys we garaşylýan jogaby alýarys - "Salam" setiri!

Hemme zat işleýän bolsa, koda seredeliň. Adaty synpdan http servlet ýasamak üçin ony HttpServlet synpyndan miras almaly. Synpyň ýokarsynda @WebServlet () düşündirişini kesgitleýäris, onda serwleti belli bir ýol bilen baglanyşdyrýarys (“salam”). Bu düşündiriş diňe Java Servlet API 3.0-de peýda boldy, şonuň üçin internetde servlet kartasynyň XML faýly arkaly ýüze çykýan köp mysallary bar. Indi bu zerur däl. GET haýyşlaryny işlemek üçin doGet () usulyny ýok edýäris. Usul argumentlerine üns beriň - HttpServletRequest we HttpServletResponse. HttpServletRequest obýektinden haýyş hakda ähli zerur maglumatlary alyp bileris, HttpServletResponse-da jogabymyzy ýazyp bileris we zerur sözbaşylary belläp bileris.

Parametrler we sessiýa bilen işlemek

Serwletimizi haýyş parametrlerini gaýtadan işlemek we sessiýa bilen işlemek üçin kämilleşdireliň:
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 häzirki wagtda sessiýany dolandyrýar, sahypa her gezek gireninde “VisCounter” -i köpeldýär. “VisitCounter” atributy entek döredilmedik bolsa (sahypa ilkinji gezek gireniňizde) getAttribute () usuly null gaýdyp geler, şonuň üçin null barlamaly. Talap parametrlerine-de degişlidir. Ulanyjy ulanyjy adynyň parametrinden geçmedik bolsa, onuň gymmaty ýok bolar. Bu ýagdaýda ulanyjyny anonim diýip garşy alarys. GET haýyşynda bir parametr geçirmek üçin ýol üýtgeýjileri ulanylýar, ýagny http: // localhost: 8080 / salam? Username = Pavel . Http haýyşlary barada has giňişleýin seriýadaky öňki makalada okap bilersiňiz . Indi programmamyzyň minimal logikasy bar, ýöne kök ýolundaky 404 ýalňyşlyk birneme bizar edýär. Ony düzetmek üçin başga bir servlet döredeliň we başlangyç sahypasyna @WebServlet ("/") karta edeliň. Bu hyzmatçynyň işi, haýyşlary “/ salam” ýoluna gönükdirmek. Muny etmegiň iki usuly bar: öňe ýa-da gönükdirmek. Belki, olaryň arasyndaky tapawudyň nämedigine düşünmelidiris. öňe - delegatlar serwerdäki başga bir serwete gaýtadan işlemegi haýyş edýärler, müşderi gatnaşmaýar. Munuň üçin täze servletiň doGet () usulyna aşakdaky kody goşmaly:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Bu kodda, hyzmat ediş kontekstine girýäris, islenýän servletiň haýyş menejerini alýarys we görkezilen parametrler (req, resp) bilen belli bir haýyşy gaýtadan işlemegini soraýarys. gönükdirme - haýyşyny ýerine ýetirmek üçin habarlaşmaly salgysyny müşderä gaýtaryp berýär. Brauzerleriň köpüsi iberilen baglanyşyga awtomatiki girýärler. Gaýtadan gönükdirmäni amala aşyrmak üçin şu kody goşmaly:
resp.sendRedirect(req.getContextPath() + "/hello");
HttpServletResponse-da gönükdirme () usulyna jaň edýäris we müşderiniň habarlaşmaly salgysyny geçirýäris. Möhüm jikme-jiklik: Doly gönükdirme ýolunyň ahyrynda http parametrleri hem goşulmaly, bu gaty amatly däl. Biziň ýagdaýymyzda öňe ulanmak makul bilner, ýöne gönükdirmäni ulanmak has gowudyr. Işleriniň tapawudyna düşünýän bolsaňyz, öz islegiňiz bilen ýalňyşmarsyňyz. Täze servletiň kody şeýle:
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");
   }
}

Aşakdaky setir

Ilkinji web programmaňyz taýýar. Indiki makalada Intellij IDEA ulanmazdan nädip ýerleşdirmelidigini öwrenersiňiz. Diňe GET haýyşlaryny işleýän programma ýazdyk. Galan http usullary şol bir görnüşde işlenýär - ene synpyň degişli usullaryny ýok etmek. Şeýle ýönekeý hyzmat ediş enjamlaryny ulanyp, çylşyrymly, baý web programmalaryny gurup bilersiňiz. Elbetde, Bahar ýaly uly çarçuwalary ulanmak, muny etmek has aňsat. Emma, ​​hakykatdanam, hyzmatçylaryň ähli mümkinçiliklerini has jikme-jik öwrenmek isleseňiz, resmi spesifikasiýany okap bilersiňiz . Bölüm 6. Hyzmat ediş gaplary 7-nji bölüm. MVC (Model-View-Controller) nagşy bilen tanyşlyk 8-nji bölüm.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION