- tor hakda ;
- programma arhitekturasy barada ;
- HTTP / HTTPS protokollary hakda ;
- Maven esaslary barada .
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ň!-
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(); } }
-
Programmany işletmek üçin Tomcat konfigurasiýasyny döretmeli:
-
Ondan soň, Tomkatyň haýsy wersiýasyny ulanjakdygymyzy, serwere girip boljak URL-ni we porty görkezýäris. Munuň ýaly bir zat almaly:
-
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.
-
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 .
-
OK basyň. Indi programmany işe girizmäge mümkinçiligimiziň bardygyny görýäris:
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 .
-
Http: // localhost: 8080 / salam bilen habarlaşýarys we garaşylýan jogaby alýarys - "Salam" setiri!
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");
}
}
GO TO FULL VERSION