Servlet - është një Java-nporpaMMa që përdor klasën HttpServiet. Një servlet përdoret për të zgjeruar aftësitë e një serveri ekzistues, në veçanti të një serveri ueb. Në mënyrë tipike, një servlet funksionon në një server të dedikuar. Këta serverë quhen serverë të aplikacionit Java. Një server aplikacioni Java përfshin një server Web si një bllok ndërtimi (nganjëherë jo një, por disa), si dhe serverë që punojnë me komponentët e serverit, serverë për shërbime ndihmëse, etj. Një servlet funksionon në një mjedis të ofruar nga serveri. Pjesa e serverit e dedikuar për të shërbyer servlet quhet kontejneri i servletit. Specifikimi i servletit supozon se një klasë servlet ka metoda standarde që ekzekutohen në një pikë të ciklit jetësor të servletit. Këto metoda thirren nga kontejneri servlet. Zbatimi i specifikimit servlet përfshihet në grupin e paketave standarde të gjuhës Java.
Ky libër fokusohet në një server aplikacioni Java të quajtur Blazix. Serveri Blazix ofron një grup të plotë të aftësive servlet. Përveç krijimit të një klase (ose klasash) servlet, si dhe konfigurimit të programit të krijuar servlet dhe instalimit të tij në server, duhet të ndryshoni skedarin e konfigurimit të serverit në internet. Vlerat kryesore janë të specifikuara në skedarin e konfigurimit si më poshtë: servlet.name: myservlet
servlet.myservlet.className: mypackage.MyServletClass servlet.myservlet.url: /mysrvlet
Çdo servlet duhet të ketë një emër(servlet.name), me të cilin identifikohet në server. Ky emër përdoret për të vendosur vetitë e servletit, në veçanti, për të treguar emrin e klasës në të cilën ruhet programi servlet (rreshti tjetër), si dhe adresën në të cilën thirret ky servlet (rreshti i tretë).
Klienti kërkon nga serveri Web adresën ku ndodhet servleti (adresa duhet të specifikohet si vlera e servlet.myservlet.url në skedarin e konfigurimit të serverit Web). Serveri ia kalon kërkesën dhe të dhënat (nëse ka) te servleti, merr përgjigjen nga servleti dhe ia dërgon klientit.
Në këtë shpjegim se çfarë është një servlet, mund të përfundojë. Megjithatë, ka shumë detaje interesante dhe të dobishme që duhet t'i kushtoni vëmendje dhe t'i studioni më në detaje.
Është veçanërisht e rëndësishme të kihet parasysh se rruga e klasës servlet duhet të specifikohet në variabël ciasspath, ose mund të vendoset në direktoriumin C:\Blazix\classes ose në drejtorinë e specifikuar në skedarin e konfigurimit të serverit Web si vlera server.ciassDir. Pasi skedari i konfigurimit të jetë modifikuar për të përfshirë informacione rreth servletit të ri, serveri duhet të ndalet dhe të rindizet. Servleti gjithashtu mund të strehohet në një server që funksionon duke përdorur programin e administrimit, por për ta bërë këtë, servleti duhet të paketohet në një skedar arkivi të Ueb-it WAR. Nëse skedari i klasës servlet ka ndryshuar, nuk është e nevojshme të ndaloni serverin dhe ta nisni përsëri. Si parazgjedhje, serveri është konfiguruar në mënyrë që thirrja e servletit në http://localhost:81/_reload bën që të gjitha klasat të ringarkohen dhe klasa e modifikuar servlet të bëhet e disponueshme për kërkesat e klientit (Figura 4-1). Vizitoni këtë faqe pasi skedari i klasës servlet të jetë modifikuar. Ndalimi i serverit thjesht nuk është i nevojshëm.
Nëse lexuesi ka pasur tashmë një përvojë me servlets, ata do të vlerësojnë thjeshtësinë e serverit Blazix në krahasim me serverët e tjerë Java, siç është serveri Tomcat.
Për t'u nisur drejt biznesit, merrni parasysh një shembull të thjeshtë, një servlet disa Servlet (lista 4.1).
Listimi 4.1. Servlet SomeServlet.java I
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
klasa publike SomeServlet zgjeron HttpServlet ( public void doGet(HttpServletRequest kërkesë,
Përgjigja HttpServletResponse) hedh ServletException, IOException ( Printwriter out = answer.getWriter (); out.println ("Hello World");
Në skedarin e konfigurimit të serverit në internet, shkruani sa vijon:
servlet.emri: i pari
servlet.first.className: SomeServlet
servlet.first.url: /dofirst
Pastaj thirrja në servlet nga shfletuesi do të marrë formën http://localhost:81 /dofirst (Figura 4.2).
Servletët Java ofrojnë një metodë të pavarur nga platforma për ndërtimin e aplikacioneve Web (kjo nuk është e sigurt, por ne nuk do të thellohemi më tej në këtë temë, sepse atëherë do të na duhet të përcaktojmë se çfarë nënkuptohet me një aplikacion ueb, i cili nuk përfshihet në lista e temave të mbuluara), dhe shumë aplikacione janë të shpejta për t'u punuar dhe nuk kanë kufizimet e aplikacioneve CGI. Një servlet funksionon nën një server Web dhe, ndryshe nga një applet, nuk kërkon një ndërfaqe grafike të përdoruesit. Servleti komunikon me serverin duke shkëmbyer kërkesa dhe përgjigje me të. Programi i klientit i bën kërkesa serverit. Kërkesa përpunohet nga serveri, kalon në servlet, servleti dërgon një përgjigje përmes serverit te klienti. Servlet janë shumë të njohura sot për ndërtimin e aplikacioneve interaktive të Uebit. Ka shumë serverë ueb që mund të punojnë me servlet, të tilla si Tomcat, iPlanet Web Server (dikur Netscape
Serveri i Ndërmarrjes), Blazix. J Builder Enterprise përdor Serverin Borland Enterprise (BES) të përfshirë me paketën dhe gjithashtu mbështet serverët në internet Logic, WebSphere dhe iPlanet. Serveri J Builder Enterprise përfshin një server Tomcat i cili përdoret "si parazgjedhje".
Oriz. 4.2. Duke thirrur një Servlet
Një avantazh i rëndësishëm i servlets është shpejtësia e tyre. Ndryshe nga aplikacionet CGI, servlet-et ngarkohen në memorie vetëm një herë dhe më pas ekzekutohen direkt nga memoria. Servlet janë në thelb aplikacione me shumë fije. Përveç kësaj, ato janë të pavarura nga platforma, pasi janë shkruar në Java.
teknologjia JSP tek e cila kapitulli 3, është një shtrirje e teknologjisë servlet, në JSP Vëmendje e veçantë fokusohet në punën me dokumente HTML dhe XML. Si pjesë e kodit HTML dhe XML, fragmentet JSP gjejnë përdorimin e tyre më të zakonshëm. Si të bëni një zgjedhje dhe të vendosni se çfarë të përdorni: servlets apo faqet e serverit? Servlet janë më të përshtatshëm për zgjidhjen e detyrave programuese të nivelit të ulët dhe më pak të përshtatshëm për zgjidhjen e detyrave të krijimit të logjikës së prezantimit të aplikacionit. JSP-të nga ana e serverit, nga ana tjetër, janë të fokusuar kryesisht në atë se si t'i paraqesin rezultatin përdoruesit në mënyrën më të përshtatshme. Faqet e serverit krijohen në linjë me kodin HTML duke përdorur stilin e autorizimit të dokumentit HTML. Teknologjia JSP ofron veçori shumë më të pasura sesa HTML e thjeshtë. JSP-të mund të ofrojnë aftësinë për të zbatuar logjikën e aplikacionit duke përdorur fasule të thjeshta Java si dhe EJB nga ana e serverit duke krijuar biblioteka të shkurtoreve të personalizuara. Në vetvete, faqet e serverit Java mund të jenë komponentë modularë, të ripërdorshëm që funksionojnë me logjikën e prezantimit që mund të përdoren në lidhje me shabllone dhe filtra të ndryshëm. JSP-të konvertohen në servlet, kështu që teorikisht mund të përdorni vetëm servlet. Megjithatë, teknologjia JSP është krijuar për të thjeshtuar procesin e krijimit të dokumenteve në ueb duke ndarë logjikën e prezantimit të një aplikacioni nga përmbajtja e dokumentit. Në shumicën e rasteve, përgjigja që i dërgohet klientit përbëhet nga shabllone të prezantimit të dokumenteve dhe të dhëna që gjenerohen automatikisht duke plotësuar shabllonin. Në këto situata, JSP-të janë shumë më të lehta për t'u punuar sesa me servlet.
Një nga veçoritë më të këndshme të Java është natyra e saj e shumëanshme. Sigurisht, krijimi i desktopit tradicional dhe madje aplikacionet celulare- kjo është e lezetshme. Por, çka nëse doni të dilni nga rruga e rrahur dhe të hyni në territorin e zhvillimit të uebit Java? Për ju atje Lajme te mira: Gjuha vjen me një API të plotë Servlet që ju lejon të ndërtoni aplikacione të fuqishme në internet pa shumë telashe.
Ndërtimi i aplikacioneve Java me Servlets
Pra, ne kemi krijuar tashmë skedarët e konfigurimit të aplikacionit. Sidoqoftë, në gjendjen e tij aktuale, fjalë për fjalë nuk bën asgjë. Ne duam që klientët të jenë në gjendje të regjistrohen me një formular HTML, kështu që gjëja tjetër që duhet të bëjmë është të krijojmë skedarë JSP që do të shfaqin formularin e mësipërm dhe detajet e klientit pasi regjistrimi të jetë i suksesshëm. Kjo është ajo që ne do të bëjmë tani.
Duke punuar në pamjen
Pamja e aplikacionit do të përcaktohet nga dy skedarë JSP - në kontekstin e MVC ato quhen pamje. I pari do të jetë përgjegjës për paraqitjen e formularit të regjistrimit dhe gabimet e mundshme thirret pas vërtetimit të të dhënave të futura. E dyta do të jetë një faqe normale mirëseardhjeje që do të tregojë të dhënat e futura nga klienti pasi procesi i regjistrimit të ketë përfunduar me sukses.
Këtu është skedari i parë JSP:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Regjistrimi
$(shkelje).
Skedari përmban HTML të thjeshtë me disa shtesa. Kjo është bukuria e JSP e kombinuar me JSTL dhe JEL. Vini re se sa e lehtë është të kontrolloni për gabime të vërtetimit duke përdorur etiketa standarde si p.sh<с:if>dhe
Atributi i veprimit i formularit të regjistrimit tregon URL-në e mëposhtme: $(pageContext.request.contextPath)/processcustomer . Kjo do të thotë që sa herë që një klient përpiqet të regjistrohet, të dhënat do t'i dërgohen klientit të procesit, pavarësisht nga URL-ja ku formulari është i disponueshëm. Kjo arrihet përmes funksionalitetit të objekteve të disponueshme nga skedari JSP, si p.sh. kërkesa .
Së shpejti do të shohim se si servlet lidhet me URL-në e klientit të procesit dhe si ndërvepron me hyrjen. Tani për tani, le t'i hedhim një sy skedarit JSP që është përgjegjës për faqen e mirëseardhjes:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Faleminderit për regjistrimin!
Të dhënat tuaja të futura:
Emri:$(emri)
Mbiemri:$(mbiemri)
Email:$(email)
Tani që jemi marrë me paraqitjen e faqeve, hapi tjetër është krijimi i një servlet përgjegjës për mbledhjen e të dhënave të klientit nga kërkesat POST dhe vërtetimin e të dhënave në një mënyrë të thjeshtë.
Ne shkruajmë kontrolluesin
Shkrimi i një servleti që mund të marrë të dhëna nga një formular regjistrimi është po aq i lehtë sa granatimi i dardhave. Gjithçka që duhet të bëjmë është të shkruajmë një nënklasë të klasës HttpServlet dhe të implementojmë metodat e saj doGet() ose doPost() (ose të dyja nëse është e nevojshme). Në këtë rast, servlet do të ndërveprojë me të dhënat që vijnë nga kërkesat POST.
Ja si duket:
@WebServlet(emri = "CustomerController", urlPatterns = "/processcustomer") klasi publik CustomerController zgjeron HttpServlet ( @Override protected void doPost(HttpServletKërkesëKërkesë, HttpServletResponse përgjigje) hedh Recepsionin (IOusmersqueustClient. .setAsRequestAttributes(kërkesë); Shkeljet e listës = customer.validate(); nëse (!violations.isEmpty()) ( request.setAttribute("shkelje", shkelje); ) url varg = definUrl(shkelje); request.getRequestDispatcher(url ).forward(kërkesë, përgjigje); ) private String defineUrl(Lista e shkeljeve) ( if (!violations.isEmpty()) ( return "/"; ) other ( return "/WEB-INF/views/customerinfo.jsp"; ) ) klasa private statike RequestCustomer ( Emri i vargut privat përfundimtar; mbiemri i vargut privat përfundimtar; emaili privat i vargut përfundimtar; Kërkesa private e klientit (emri i vargut, mbiemri i vargut, emaili i vargut) ( this.firstName = firstName; th është.mbiemri = mbiemri; kjo.email = email; ) publike statike RequestCustomer fromRequestParameters(HttpServletRequest kërkesë) (ktheje requestCustomer(request.getParameter("firstname"), request.getParameter("mbiemri"), request.getParameter("email")); ( request.setAttribute ("firstname", firstname); request.setAttribute ("mbiemri", mbiemri); request.setAttribute ("email", email); ) Lista publike validate() ( Shkeljet e listës = ArrayList i ri<>(); if (!StringValidator.validate(firstName)) ( shkelje.add("Emri është fushë e detyrueshme"); ) if (!StringValidator.validate(mbiemri)) ( shkelje.add("Mbiemri është fushë e detyrueshme") ; ) nëse ( !EmailValidator.validate(email)) ( shkelje.add("Email-i duhet të jetë i formuar mirë"); ) ))
Gjëja e parë që duhet vënë re këtu është përdorimi i shënimit @WebServlet(emri ="CustomerController", urlPatterns = "/processcustomer"). Ai i thotë kontejnerit të servletit të përdorë klasën CustomerController për të trajtuar kërkesat HTTP për /processcustomer. I njëjti efekt mund të arrihet duke shtuar direktiva të hartës së servletit në web.xml si , por duke qenë se ne përdorim Specifikimin Servlet 3.1, nuk kemi nevojë t'i drejtohemi kësaj metode.
Këtu kemi emërtuar servlet CustomerController sepse konsiderohet praktikë e mirë përdorimi i emrit të klasës servlet si vlerë e atributit të emrit të shënimit @WebServlet. Përndryshe, disa kontejnerë nuk do të përputhen, duke rezultuar në një gabim 404.
Vetë klasa CustomerController kryen disa detyra të thjeshta. Së pari, ai mbledh të dhëna të formularit duke përdorur një implementim të ndërfaqes HttpServletRequest, e cila përmban vlera që korrespondojnë me emrin, mbiemrin dhe fushat e postës elektronike të formularit. Më pas i vendos ato vlera si atribute të pyetjes në mënyrë që ato të mund të riprodhohen ose në formular ose në faqen e rezultateve. Më në fund, verifikuesit kontrollojnë korrektësinë e të dhënave të futura.
Validuesit janë klasa të thjeshta që kontrollojnë veçori të caktuara, të tilla si nëse një varg është bosh ose nëse një email duket si një email. Në GitLab të autorit mund të shihni zbatimin e tyre.
Rezultati i vlefshmërisë ndikon në rrjedhën e mëtejshme të ngjarjeve: nëse të dhënat nuk janë të vlefshme, klienti ridrejtohet përmes objektit RequestDispatcher në faqen e regjistrimit, ku shfaqen gabimet përkatëse. Nëse gjithçka është në rregull, shfaqet faqja e mirëseardhjes.
Pra, ne kemi krijuar një aplikacion të plotë në internet Java që ju lejon të regjistroni klientët duke përdorur një formular HTML, një servlet bazë dhe disa skedarë JSP. Është koha për ta nisur atë.
Nisja e aplikacionit
Për të nisur aplikacionin, duhet të bëni hapat e mëposhtëm:
IntelliJ IDEA). Kur vendosni projektin dhe e ekzekutoni atë, shfletuesi i parazgjedhur duhet të hapet me një dritare identifikimi.
konkluzioni
Pra, ju keni fituar të gjitha aftësitë që ju nevojiten për të krijuar aplikacionin tuaj në internet Java pa pasur nevojë të përdorni korniza komplekse. Gjithçka që ju nevojitet është një Servlet API, një teknologji si JSP për renderim dhe pajisje të integruara Java. Është e mrekullueshme, apo jo?
Vlen të përmendet se zbatimi i klasës CustomerController nxjerr në pah avantazhet dhe disavantazhet e servlets: nga njëra anë, tregon shkurtimisht se sa e lehtë është të përpunosh parametrat e kërkesave dhe t'i dërgosh përgjigje klientit në formate të ndryshme. Por ky funksionalitet ka një çmim: të dy implementimet e ndërfaqeve HttpServletResponse dhe HttpServletResponse janë lokalizues të rregullt të shërbimit. Kjo nuk do të thotë se kjo është e keqe, pasi lokalizuesit thjesht përmbajnë të dhëna. Megjithatë, mbani në mend se këto zbatime do të jenë gjithmonë të lidhura me servlet.
Servletështë një program java që funksionon në anën e serverit të një aplikacioni ueb. Ashtu si apletet zgjerojnë dinamikisht funksionalitetin e një shfletuesi uebi, servletët zgjerojnë në mënyrë dinamike funksionalitetin e një serveri ueb.
puna servlet"dhe mund të përshkruhet si më poshtë: kur vjen një kërkesë nga një klient, serveri i uebit mund të përcaktojë se cili servlet duhet të ekzekutohet duke përdorur një skedar të veçantë konfigurimi. Pas kësaj, serveri i uebit nis JVM, i cili nga ana e tij ekzekuton servletin. Servleti përpunon kërkesën dhe kalon përmbajtjen e serverit në internet (mundësisht në formën e një faqeje HTML) Ueb serveri dërgon një përgjigje (një faqe HTML e krijuar nga servleti) te klienti.
Serveri WEB është në thelb një lloj kontejneri që shkarkon servlet"s, i ekzekuton ato dhe, pasi ka marrë rezultatin prej tyre, ia dërgon klientit.
Servlet në arkitekturën e aplikacioneve në ueb
Për shkak të fuqisë dhe fleksibilitetit të tij, servlet"S mund të luajnë një rol të rëndësishëm në arkitekturën e sistemit. Ata mund të kryejnë detyra aplikimi të destinuara për shtresën e mesme, të veprojnë si një server proxy për klientin dhe madje të përmirësojnë funksionalitetin e shtresës së mesme duke shtuar mbështetje për protokollet e reja dhe funksione të tjera Shtresa e mesme vepron si një server aplikacioni në të ashtuquajturin sistem klient-server me tre nivele dhe ndodhet midis një klienti "të lehtë", siç është një shfletues uebi, dhe burimit të të dhënave.
Servlet si përfaqësues
Për të mbështetur aplikacionet, servletët mund të veprojnë si serverët e tyre proxy. Kjo mund të jetë e rëndësishme sepse sistemi i sigurisë Java lejon vetëm apletet të lidhen me serverin nga i cili janë shkarkuar. Nëse aplikacioni duhet të lidhet me një server të bazës së të dhënave të vendosur në një makinë tjetër, servlet mund të krijojë këtë lidhje për një applet.
Të përkohshme dhe të përhershme servlet"s
Servletet mund të nisen dhe ndalen për çdo kërkesë të klientit. Ato gjithashtu mund të nisen kur serveri i uebit fillon dhe ekzistojnë derisa të ndalet. E përkohshme servlet"S janë ngarkuar sipas kërkesës dhe ofrojnë një mënyrë të mirë për të ruajtur burimet e serverit për funksionet e përdorura rrallë. Servletat e vazhdueshme ngarkohen kur serveri ueb fillon dhe zgjat derisa të ndalet. Servlet-et instalohen si shtesa të vazhdueshme në server nëse kostoja e fillimit ato janë shumë të larta (p.sh. krijimi i një lidhjeje me bazën e të dhënave) nëse ofrojnë funksionalitet të vazhdueshëm në anën e serverit (p.sh. një shërbim RMI), ose në rastet kur duhet t'u përgjigjen kërkesave të klientit sa më shpejt që të jetë e mundur. Nuk ka kod specifik për t'u caktuar servlet"por i përhershëm ose i përkohshëm; ky është një funksion i vendosjes së serverit në internet.
Cikli i jetës së Servlet, javax.servlet.Servlet
Servlet-et ekzekutohen në platformën e serverit të Ueb-it si pjesë e të njëjtit proces si vetë serveri i uebit. Serveri në internet është përgjegjës për inicializimin, thirrjen dhe shkatërrimin e çdo shembulli të servletit. Ueb serveri ndërvepron me servletin përmes një ndërfaqe të thjeshtë: javax.servlet.servlet.
Ndërfaqja javax.servlet.Servlet përfshin tre metoda kryesore:
- init ()
- shërbim ()
- shkatërroj ()
dhe dy metoda ndihmëse:
- getServletConfig()
- getServletInfo ()
Ngjashmëritë ndërmjet ndërfaqeve servlet"Dhe apleti Java është i qartë. Kështu është projektuar! Servletët Java janë për serverët e uebit siç janë apletet për shfletuesit e uebit. Një aplet funksionon në një shfletues uebi, duke kryer veprime sipas kërkesës së tij përmes një ndërfaqeje të veçantë. Një servlet bën të njëjtën gjë. kur punoni në një server në internet.
Inicializimi i Servlet, metoda init().
Herën e parë që ngarkohet servlet, thirret metoda init(). Kjo i lejon servletit të kryejë çdo punë instalimi, të tilla si hapja e skedarëve ose krijimi i lidhjeve me serverët e tyre. Nëse servleti është i instaluar përgjithmonë në server, ai ngarkohet kur serveri fillon. Përndryshe, serveri thërret servletin në kërkesën e parë nga klienti për të kryer shërbimin e ofruar nga ai servlet.
Është e garantuar se metoda init () do të përfundojë përpara çdo thirrjeje tjetër në servlet, siç është thirrja e një metode shërbim (). vini re se init () do të thirret vetëm një herë; ai nuk do të thirret derisa servleti të shkarkohet dhe pastaj të ngarkohet përsëri nga serveri.
Metoda init () merr një argument - një referencë për një objekt ServletConfig, i cili përmban argumente për të inicializuar servletin. Ky objekt ka një metodë getServletContext(), e cila kthen një objekt ServletContext A që përmban informacione rreth mjedisit të servletit.
Bërthama Servlet, metoda e shërbimit().
Metoda shërbim ()është zemra e servletit. Çdo kërkesë nga klienti rezulton në një thirrje metodë shërbim (). Kjo metodë lexon kërkesën dhe gjeneron një mesazh përgjigjeje duke përdorur dy argumentet e saj ServletRequest dhe ServletResponse:
Kështu, ekzistojnë dy mënyra për të kaluar informacionin nga klienti në servlet. E para është kalimi i vlerave në parametrat e kërkesës. Vlerat e parametrave mund të futen në URL. Mënyra e dytë për të kaluar informacionin nga klienti në servlet është nëpërmjet një InputStream (ose Reader).
Punë me metodë shërbim () në thelb është e thjeshtë - krijon një përgjigje për çdo kërkesë të klientit që i kalon atij nga serveri. Megjithatë, mbani në mend se mund të ketë disa kërkesa paralele që përpunohen në të njëjtën kohë. Nëse metoda shërbim () kërkon çdo burim të jashtëm si skedarë, baza të të dhënave, atëherë është e nevojshme të sigurohet që qasja në burime të jetë e sigurt në lidhje.
Metoda e shkarkimit të Servlet, shkatërrojë().
Metoda shkatërroj () thirrur për të lëshuar të gjitha burimet (për shembull, skedarë të hapur dhe lidhjet e bazës së të dhënave) përpara shkarkimit të servletit. Kjo metodë mund të jetë bosh nëse nuk ka nevojë të kryeni ndonjë operacion përfundimtar. Përpara se të telefononi një metodë shkatërroj () serveri pret ose për përfundimin e të gjitha operacioneve të servisimit, ose për skadimin e një kohe të caktuar. Kjo do të thotë se metoda shkatërroj () mund të thirret gjatë ekzekutimit të çdo metode të gjatë shërbim ().
Është e rëndësishme të zyrtarizohet metoda shkatërroj () në mënyrë të tillë që të shmanget mbyllja e burimeve të nevojshme deri në të gjitha thirrjet shërbim () nuk do të përfundojë.
Konfigurimi i Servlet, metoda getServletConfig().
Metoda getServletConfig() kthen një referencë për një objekt që zbaton ndërfaqen ServletConfig. Ky objekt ofron akses në informacionin e konfigurimit të servletit, d.m.th. aksesi në parametrat e inicializimit të servletit dhe objekti i kontekstit të servletit ServletContext, i cili i jep akses në servlet dhe mjedisin e tij.
Informacioni Servlet, metoda getServletInfo().
Metoda getServletInfo () përcaktuar nga programuesi që krijon servletin për të kthyer një varg që përmban informacione rreth servletit, si autori dhe versioni i servletit.
Ndërfaqja e ServletRequest
ServletRequest ofron informacion të klientit në lidhje me parametrat e kërkesës HTTP në servlet, d.m.th. ofron të dhëna duke përfshirë emrin dhe vlerat e parametrave, atributet dhe rrjedhën hyrëse. Ky informacion i kalohet metodës shërbim ().
Tjetra shembull servlet tregon se si të merrni informacion nga një parametër kërkesë metodë shërbim ():
lexues BufferedReader; vargu param1; vargu param2; shërbimi publik i zbrazët (Kërkesa ServletRequest, përgjigja ServletResponse) (lexues = request.getReader(); param1 = request.getParameter ("First"); param2 = request.getParameter ("E dyta"); )
Informacione shtesë në lidhje me kërkesën janë në dispozicion të servletit përmes metodave, ato kryesore janë renditur në tabelën e mëposhtme:
getAttribute () | Kthen vlerën e atributit të specifikuar të kësaj kërkese. |
getContentLength() | Kërko madhësinë, nëse dihet. |
getContentType() | Rikthen llojin MIME të trupit të kërkesës. |
getInputStream() | Kthen një InputStream për leximin e të dhënave binare nga trupi i kërkesës. |
GetParameterNames() | Kthen një grup vargjesh me emrat e të gjithë parametrave. |
getParameterValues() | Kthen një grup vlerash për parametrin e specifikuar. |
getProtocol () | Kthen protokollin dhe versionin për kërkesën si varg të formularit |
getReader () | Kthen një BufferedReader për të marrë tekst nga trupi i kërkesës. |
getRealPath () | Kthen shtegun real për shtegun e specifikuar virtual. |
getRemoteAddr() | Adresa IP e klientit që ka dërguar këtë kërkesë. |
getRemoteHost() | Emri i hostit të makinës së klientit që dërgoi kërkesën. |
getScheme () | Kthen skemën e përdorur në URL-në e kësaj kërkese (për shembull, https, http, ftp, etj.). |
getServerName () | Emri i hostit të serverit që pranoi këtë kërkesë. |
getServerPort () | Kthen numrin e portit të përdorur për të marrë këtë kërkesë. |
Ndërfaqja ServletResponse
Ndërfaqja ServletResponseështë një mjet për dërgimin e të dhënave te klienti. Të gjitha metodat e këtij mjeti i shërbejnë pikërisht kësaj detyre:
Publike java.lang.String getCharacterEncoding() publik void setLocale(java.util.Locale loc) public java.util.Locale getLocale()
Metoda e parë kthen llojin e kodimit MIME (për shembull, UTF8) në të cilin do të shfaqet informacioni. Dy metodat e dyta gjithashtu funksionojnë me grupin e karaktereve. Ata tregojnë gjuhën e përdorur në dokument (për shembull - rusisht).
ServletOutputStream Publik getOutputStream() hedh java.io.IOException
Metoda getOutputStream kthen rrjedhën e daljes për servletin. Ky transmetim përdoret, për shembull, për të nxjerrë skedarë binare. Të dhënat e tekstit mund të nxirren duke përdorur java.io.Writer:
Java.io.PrintWriter publike getWriter() hedh java.io.IOException
Metoda getWriter() konverton automatikisht vargjet në grupin e karaktereve të specifikuar në metodat getCharacterEncoding() dhe getLocale().
publik void setContentLength (int len)
Metoda setContentLength vendos vlerën e fushës së kokës HTTP "Content-Length"
publik void setContentType (lloji i vargut)
Metoda setContentType përdoret për të dërguar llojin e përmbajtjes MIME të dokumentit. Fusha e kokës së HTTP "Lloji i përmbajtjes".
Rrjedha e daljes është e bllokuar. Kjo do të thotë që një pjesë e të dhënave do t'i lëshohet klientit vetëm pasi buferi të jetë mbushur.
publik void setBufferSize(int size) publik int getBufferSize() publik void flushBuffer() hedh java.io.IOException publik void resetBuffer()
4 metodat e mësipërme lejojnë, përkatësisht, të vendosni madhësinë e bufferit të dërgimit, të merrni madhësinë e tij, të inicializoni dërgimin e përmbajtjes së buferit te klienti pa pritur që ai të mbushet dhe të pastroni këtë bufer nga të dhënat.
Boolean publik ështëCommitted()
Duke përdorur metodën isCommitted, mund të merrni një flamur, nëse dërgimi i të dhënave te klienti ka filluar tashmë. Flamuri do të jetë pozitiv nëse një titull i përgjigjes HTTP është dërguar tashmë.
rivendosja e zbrazëtisë publike ()
Nëse titulli HTTP nuk është dërguar ende, atëherë metoda e rivendosjes "rivendos" kokën HTTP në vlerat e paracaktuara.
Grafikët e JFreeChart në Servlets
Biblioteka grafike JFreeChart mund të përdoret në servlet për të krijuar grafikët dhe për t'i shfaqur ato si imazhe në faqet e internetit. Janë dhënë detaje të përshkrimit dhe shembuj të përdorimit të JFreeChart në servlet.
Servlet me bibliotekë grafike Chart.js
JNI në Servlet
Në disa raste, mund t'ju duhet të përdorni JNI në një aplikacion WEB. Është paraqitur një shembull i përdorimit të JNI në servlet.
Mesazhet JMS në një servlet
Servlet mund të përdoret për shkëmbim JMS mesazhe ndërmjet aplikacioneve. Jepet një shembull i përdorimit të një servlet për të dërguar dhe lexuar mesazhe JMS në një kontejner JBoss.
Një Java Servlet është një program nga serveri i shkruar në gjuhën e programimit me të njëjtin emër që merr sinjale nga një klient dhe i dërgon përgjigjet atij. Është elementi kyç që formon Java EE tipike, përveç JSP, EJB, XML dhe teknologjive të tjera të ngjashme. Një aplikacion mund të paketohet në një skedar WAR (Web AR chive) për t'u vendosur në një server në internet. Një server që mund të ekzekutojë një servlet Java quhet kontejner. Një program që funksionon në një server të tillë mund të krijojë faqe web dinamike.
Bazat e Java Servlet
Kontejnerët më të njohur dhe më të përdorur janë Tomcat dhe JBoss. Teknikisht, një Servlet është një klasë normale Java që ka një shtrirje për Protokollin e Përbashkët të Klientit/Serverit, ose HTTP. Në praktikë, përdoret për përpunimin e kërkesave, përkatësisht, përmes mbivendosjeve HttpServlet GET dhe POST. Kontejneri Java Servlet ofron Http.ServletRequest dhe Http.ServletResponse, të cilat janë objekte kërkesa-përgjigje. Dhe zakonisht përdoret në lidhje me JSP për të gjeneruar përmbajtje dinamike.
Skenari tipik i modelit:
Filtrat Java Servlet janë plug-in Java që përdoren për të përgjuar dhe përpunuar kërkesat përpara se ato të dërgohen në servlet dhe të përgjigjen pasi të ketë përfunduar kodi i tij dhe përpara se kontejneri t'i dërgojë përgjigjen klientit.
Detyrat e zakonshme për të kryer me filtra:
Filtrat përfshihen dhe konfigurohen në një skedar përshkruesi të vendosjes (web.xml). Servlet dhe filtrat nuk dinë për njëri-tjetrin, kështu që mund të shtoni ose hiqni një filtër thjesht duke redaktuar web.xml. Është e pranueshme që të keni filtra të shumtë për një burim të vetëm, ose filtra zinxhir për web.xml, ose të ekzekutoni filtra Java Servlet duke zbatuar ndërfaqen javax.servlet.Filter.
Kërkesat paralele në server përpunohen me thread-e, të cilat ofrojnë cilësi të rëndësishme të ueb-it - multithreading dhe paralelizëm.
Funksionet kryesore:
Nevoja për ueb faqe dinamike
Ka shumë arsye pse një biznes dëshiron të krijojë faqe dinamike në internet, si për shembull kur të dhënat në një faqe interneti ndryshojnë shpesh. Faqet e lajmeve dhe motit zakonisht mbështeten në CGI për të mbajtur përmbajtjen të freskët pa vëmendjen e vazhdueshme të zhvilluesve. Faqet e internetit të tregtisë elektronike që listojnë çmimet aktuale dhe nivelet e aksioneve përdorin CGI për të marrë këtë përmbajtje sipas kërkesës, duke e marrë atë nga infrastruktura e brendshme e kompanisë.
Shumë përdorues kanë përvojë në përdorimin e teknologjisë Java për të krijuar shërbime uebi të bazuara në CGI, por Java Servlets janë më efikase, të fuqishme, më të lehta për t'u përdorur dhe më pak të kushtueshme se alternativat tradicionale CGI.
Përfitimet e Java Servlets:
Kanë kaluar pothuajse njëzet vjet nga ardhja e gjuhës programuese Java. Gjatë kësaj kohe, Java u profetizua nga vdekja dhe harresa, programuesit këtu qeshën me ngadalësinë dhe lakminë e saj për burime. Por kishte edhe nga ata që besuan në Java, ata zhvilluan të gjitha llojet e bibliotekave, zhvilluan komunitetin, dëshmuan me kokëfortësi se nuk ka kufij për Java: në kohë reale, të ngulitura, AI - gjithçka është e mundur. Ne vendosëm të mos qëndrojmë mënjanë dhe të bëjmë një seri të vogël artikujsh mbi Java në këtë seksion. Shkoni!
Kazani juaj zgjedh Java
Sipas vetë Oracle, sot virtuali makinë java instaluar në mbi tre miliardë pajisje. Dhe këto nuk janë vetëm kompjuterë dhe telefona inteligjentë, por edhe kamera, televizorë, lojtarë Blue-ray, printera, karta SIM, ATM dhe madje edhe makina. Kjo listë do të rritet në mënyrë të qëndrueshme, dhe bashkë me të, ofertat e punës për programuesit Java. Edhe tani, numri i vendeve vakante për programues Java tejkalon pjesën tjetër. Dhe kompanitë janë të gatshme të paguajnë gjithnjë e më shumë, duke gjuajtur punonjës dhe duke organizuar kushte më të favorshme pune.
Dhe pse ajo është e mirë?
Programuesit Java tërhiqen nga minimalizmi i sintaksës. Nuk ka modifikues shtesë dhe fjalë shërbimi. Edhe mungesa e trashëgimisë së shumëfishtë, e cila në fillim i ngatërroi pak programuesit e C++, në fund rezulton e arsyeshme dhe e justifikuar. Logjikë e thjeshtë, punë automatike me memorie, dokumentacion i detajuar, forume me përgjigje për të gjitha llojet e pyetjeve, burim i hapur- e gjithë kjo ju lejon të kuptoni shpejt procesin e zhvillimit dhe zvogëlon ndjeshëm numrin e gabimeve të mundshme. Edhe fshatarët indianë mësojnë Java brenda nja dy muajsh, të paktën kështu thonë diplomat e tyre :). Gjithashtu, Java është një gjuhë e interpretuar. Përpiluesi e përkthen kodin burim në të ashtuquajturin bytecode, i cili është i lehtë për t'u kthyer përsëri, gjë që e bën Java veçanërisht tërheqëse për inxhinierinë e kundërt.
Epo, le të fillojmë
Java është një gjuhë e orientuar nga objekti, që do të thotë se të gjitha variablat, metodat, konstantet deklarohen brenda një klase. Përveç klasave, ekzistojnë edhe ndërfaqe - një konstrukt i veçantë abstrakt që ju lejon të përshkruani sjelljen e një objekti pa specifikuar një zbatim specifik. Dhe nëse nuk ka trashëgimi të shumëfishtë të klasave në Java, atëherë një klasë mund të zbatojë çdo numër ndërfaqesh, gjë që lejon që një objekt të ketë shumë funksione, por të sigurojë vetëm një pjesë të tyre.
Llojet e të dhënave mund të ndahen në dy grupe: të thjeshta (int, long, char, e kështu me radhë) dhe llojet e objekteve: klasa, ndërfaqe, vargje. Llojet e thjeshta janë gjithmonë dhe kudo me dimension fiks. Për shembull, në çdo arkitekturë dhe çdo pajisje, një int zë katër bajt memorie. Kjo është mjaft e përshtatshme për llogaritjet. Vargu i të dhënave përmban një atribut të veçantë të gjatësisë që ruan madhësinë e grupit, për të cilin falënderim special për zhvilluesit. Të dhënat e llojeve të ndryshme u kalohen metodave në mënyra të ndryshme. Llojet e thjeshta kalohen gjithmonë nga vlera. Objekti - gjithmonë duke iu referuar për të ruajtur kujtesën. Kjo do të thotë se nëse kalojmë int a = 10 dhe ndryshojmë vlerën e tij në 5 në metodën e thirrur, atëherë a do të jetë ende 10 në metodën origjinale. Por nëse ndryshojmë vetinë e objektit, ajo do të ndryshojë në metodën origjinale si mirë.
Mbani mend kujtimin
Edhe pse Programues Java dhe i çliruar nga nevoja për të ndarë dhe çliruar kujtesën, mosnjohja e disa veçorive të veprës Makine virtuale dhe mbledhësi i mbeturinave mund ta kthejë programin tuaj lehtësisht në një përbindësh të pangopur që gllabëron kohën e CPU-së dhe të gjithë memorien e disponueshme.
Kur krijoni një grup të ri, mbani mend gjithmonë se është shumë më e lehtë të krijoni shumë pjesë të vogla memorie sesa një të madhe. Përndryshe, ju rrezikoni të hasni në një gabim "Out of memory", që përafërsisht do të thotë se keni pasur memorie, por gjithçka doli.
Shumë programues, kur kalojnë në Java dhe mësojnë për pastrimin automatik të kujtesës, fillojnë të krijojnë objekte në sasi të mëdha, duke shpresuar se gjithçka do të pastrohet vetë. Ndërkohë, mbledhësi i plehrave është si një makinë që mund të marrë vetëm mbeturinat e hedhura në një kosh pranë shtëpisë. Nëse nuk keni më nevojë për disa të dhëna, nuk duhet t'i ruani ato për çdo rast, si një grumbull kartolinash të vjetra - caktoni null në treguesin e të dhënave, ndihmoni pastruesin të pastrojë :). Është gjithashtu praktikë e mirë të pastroni listën nëse nuk ju nevojitet më. Mbani mend, një objekt do të mbahet në memorie për sa kohë që ka referenca për të në kod. Edhe nëse programi juaj funksionon me 16 gigabajt memorie dhe nuk rrezikon të humbasë memorien, ai do të bëhet gjithnjë e më i ngathët dhe i ngadalshëm nga një tepricë e memories së përdorur. 99% e ankesave të përdoruesve për programet e ngadalta Java janë për shkak të shkrimit joefikas Kodi i burimit. Nëse keni nevojë të krijoni vazhdimisht objekte që përdoren shpejt dhe nuk nevojiten më, të tilla si shumë mesazhe të vogla, merrni parasysh krijimin e një grupi që do të ruajë një sërë shembujsh për përdorim të përsëritur. Mbani mend, krijimi dhe fshirja e një objekti është një operacion i shtrenjtë.
Hyni në punë, zotërinj.
Një shembull është më i mirë se një mijë fjalë. Ju mund të lëvizni nëpër manual dhe të shikoni fjalët standarde përshëndetje pa ne, kështu që ne do të supozojmë se ju e keni bërë tashmë këtë dhe jeni gati të zbatoni një shembull më interesant.
Ju dhe unë do të merremi me aplikacionin e serverit të Java dhe do të shkruajmë një program të vogël për "spiunimin" e përdoruesve rrjete sociale. Për ta bërë këtë, as nuk duhet të merrni një punë në NSA - përdoruesit përhapin gjithçka për veten e tyre, dhe ne do të na duhet vetëm ta marrim, sistemojmë dhe shfaqim këtë informacion në një mënyrë të bukur. Merrni një nga më të njohurit sherbimet sociale, për shembull katërkëndësh dhe vizatoni lëvizjet e miqve tanë në hartë.
Së pari, le të shohim se çfarë mund të marrim nga katrori. Pasi kalojmë nëpër faqet për zhvilluesit, ne e drejtojmë vëmendjen tonë në dy metoda:
- https://developer.foursquare.com/docs/users/checkins - vende të vizituara nga përdoruesi. Fatkeqësisht, aktualisht mbështetet vetëm për përdoruesin e regjistruar në program dhe ka zëra se për shkak të kufizimeve në zbatim, do të mbetet i tillë;
- https://developer.foursquare.com/docs/checkins/recent - vende të vizituara nga miqtë e përdoruesit të regjistruar. Nëse luani pak me këtë funksion, atëherë rezulton një fakt i trishtuar: për secilin mik, kthehet saktësisht një vend - vendi i fundit ku ai kontrolloi veten.
Për të përdorur API-në foursquare, duhet të regjistroni aplikacionin tonë të ardhshëm, shkoni në këtë adresë: https://ru.foursquare.com/developers/register dhe plotësoni fushat (po, do të duhet të regjistroheni edhe në vetë foursquare, por ju mund ta bëni atë në mënyrë të përsosur pa mua).
Nga fushat e rëndësishme, këtu mund të shënohen vetëm "Emri i aplikacionit", "Shkarko / url e faqes së mirëseardhjes" (fut një adresë arbitrare në internet) dhe "URI (të) ridrejtuese" - kjo është adresa në të cilën do të na dërgojë serveri pas regjistrimit. Ne do të fusim vlerën e dëshiruar këtu më vonë, por tani për tani ju thjesht mund të futni çdo adresë ueb. Klikoni "Ruaj" dhe aplikacioni ynë gjurmues është regjistruar me sukses.
Ne ngrihemi në retë
Captain Obvious përcjell se çdo aplikacion serveri ka nevojë për një server për të punuar. Ngritja e një serveri vetë është hemorroide, kështu që ne do të përdorim zgjidhjet e resë kompjuterike që tani janë të njohura. Reja do të sponsorizohet nga Google Corporation sepse Motori i tyre i aplikacionit Google është falas, mjaft i lehtë për t'u konfiguruar dhe përdorur. Për të filluar, shkoni këtu dhe shkarkoni Google App Engine SDK për Java.
Tani mund të filloni të krijoni projektin. Për zhvillimin e Java-s, unë përdor IntelliJ IDEA, por ju mund të përdorni mjedisin e lirë dhe po aq të mirënjohur Eclipse.
Le të zgjedhim një projekt të ri Java. Le ta quajmë nsa_tracker.
![](https://i0.wp.com/xakep.ru/wp-content/uploads/2014/07/image1.png)
Në skedën tjetër, shënoni aplikacionin Ueb dhe Motorin e aplikacionit Google në të majtë dhe tregoni shtegun për në SDK-në e motorit të aplikacionit të shkarkuar dhe të paketuar më parë.
![](https://i1.wp.com/xakep.ru/wp-content/uploads/2014/07/image2.png)
Tani rri duarkryq dhe lëre IDE të bëjë gjënë e vet. Nëse keni zgjedhur IDEA dhe keni bërë gjithçka siç duhet, atëherë si rezultat do të shihni një projekt të përfunduar që, kur të lansohet, hap një dritare të shfletuesit me përmbajtje boshe. Mund të filloni të kodoni.
Ne fillojmë të kërkojmë
Pra, kemi një dosje projekti, e cila përmban dosjen src. Këtu do të vendosim kodin burimor. Burimet në Java janë të grupuara sipas paketave. Një paketë është një dosje në disk. Paketat janë të nevojshme për të mos hedhur të gjitha burimet në një grumbull, por për t'i ndarë ato, të udhëhequr nga parimet e logjikës. Për shembull, kodi i lidhur me ndërfaqen e përdoruesit do të vendoset logjikisht në paketën UI, ndërveprimet e rrjetit në paketën e rrjetit. Kjo lehtëson shumë zhvillimin dhe mbështetjen e projektit më vonë. Historikisht ka qenë praktikë për të filluar strukturën e paketës me emrin e kompanisë e ndjekur nga emri i programit. Kjo do të ndihmojë në identifikimin e lehtë të burimeve tona midis një grupi të njëjtave në të ardhmen. Për programin tonë, ne do të krijojmë paketën org.nsa.tracker. Në të do të krijojmë klasa.
Servlet përdoren për të përpunuar kërkesat e përdoruesve në server. Një servlet është një klasë që zakonisht trashëgon nga HttpServlet dhe funksionon në bazë të kërkesës-përgjigje. Gjithçka që nevojitet është të anashkaloni metodën doGet. Me kërkesë të përdoruesit, ne duhet të identifikohemi në katror, të ngarkojmë listën e miqve të regjistruar dhe ta ridrejtojmë kërkesën në faqen e hartës.
Për të punuar me API katërsquare, ne do të përdorim bibliotekën e lirë foursquare-api-java, e cila mund të merret nga këtu. Një bibliotekë Java është një arkiv ZIP me një shtrirje jar që përmban klasa të përpiluara Java që zbatojnë funksione të caktuara. Për autorizim, na duhen ClientId dhe ClientSecret të marra në fazën e regjistrimit të aplikacionit në katror. Meqenëse këto parametra nuk ndryshojnë gjatë ekzekutimit të programit, ne i deklarojmë ato si konstante.
Vargu përfundimtar statik privat CLIENT_ID = "FAKE_CLIENT_ID"; String final statik privat CLIENT_SECRET = "FAKE_CLIENT_SECRET";
Final do të thotë që kësaj ndryshore i është caktuar një vlerë përfundimtare që nuk mund të ndryshohet. Static e bën variablin të disponueshëm për të gjitha instancat e klasës së caktuar. Duke përdorur shembullin e autorizimit nga biblioteka foursquare-api-java, marrim diçka si kodi i mëposhtëm:
Protected void doGet(HttpServletRequest req, HttpServletResponse resp) hedh ServletException, IOException ( FoursquareApi foursquareApi = i ri FoursquareApi(CLIENT_ID, CLIENT_SECRET, CALLBACK_URL =kod. Shkoni në faqen e regjistrimit resp.sendRedirect(foursquareApi.getAuthenticationUrl()); ) tjetër (provoni ( foursquareApi.authenticateCode(code); // Regjistrimi i suksesshëm, ngarkoni të dhënat Rezultati
Vini re "hedh ServletException, IOException" në deklaratën e metodës. Kjo linjë do të thotë që metoda mund të hedhë një nga këto përjashtime. Një përjashtim në Java është një objekt që sinjalizon se ka ndodhur një përjashtim. Ato janë të verifikueshme dhe të paverifikueshme. Përjashtimet e kontrolluara duhet të trajtohen duke rrethuar një pjesë të kodit me një bllok try-catch, ose duhet të kalohen më lart. Përjashtimet e pakontrolluara në përgjithësi nuk trajtohen sepse ato ndodhin kur programi nuk është në gjendje të rikuperojë gjendjen e tij. Në këtë metodë, ne trajtojmë vetëm FoursquareApiException.
Kur serveri në internet merr një kërkesë për një aplikacion, ai përdor përshkruesin e vendosjes për të përputhur URL-në e kërkesës me kodin që duhet të trajtojë kërkesën. Përshkruesi i vendosjes është një skedar XML i quajtur web.xml. Le të shtojmë një përshkrim të servletit gjurmues.
Tani kërkesat për /track do të përpunohen nga servleti ynë i quajtur TrackerServlet. Mund ta vendosni parametrin Url-ja e kthimit të thirrjes në vlerën e saktë http://localhost:8080/track.
Për të shfaqur rezultatet, mund të përdorni API-në Static Maps, të ofruar me mirësi nga e njëjta korporatë Google (https://developers.google.com/maps/documentation/staticmaps/). Servleti ynë do të gjenerojë një faqe të thjeshtë HTML dhe do ta kthejë atë në përgjigje të një kërkese të përdoruesit.
StringBuilder sb = StringBuilder i ri ("
- "); indeksi = 1; për (Checkin checkin: result.getResult()) (sb.append("
Për të gjeneruar faqen, përdoret klasa StringBuilder, kjo për faktin se vargjet në Java janë objekte të pandryshueshme. Kur lidhni vargjet duke përdorur operatorin +. krijuar linjë e re në mend. StringBuilder kursen kujtesën sepse përdor një grup char për të ruajtur vargjet që do të bashkohen. Dërgimi i një përgjigjeje përdoruesit:
Bajt rezultatBytes = sb.toString().getBytes("utf-8"); resp.setContentLength(resultBytes.length); resp.getOutputStream().write(resultBytes);
…Dhe gjithçka është gati. Ne nisim dhe shohim diçka të ngjashme me një foto me një thënie "Rezultati i programit".
![](https://i0.wp.com/xakep.ru/wp-content/uploads/2014/07/image3.png)
Ç'pritet më tej?
Aplikacioni mund të përmirësohet, si ndarja e mbledhjes dhe shfaqjes së të dhënave. Transferoni mbledhjen e të dhënave në një shërbim të veçantë që do të funksionojë vazhdimisht dhe do të mbajë mend të gjitha lëvizjet e përdoruesve në bazën e të dhënave. Atëherë do të jetë e mundur të shfaqen jo pika individuale, por një rrugë e lidhur. Me pak gërmim në API katërkëndësh, mund të nxirrni edhe më shumë informacion rreth aktivitetit të përdoruesit.
Por shpresoj se kam arritur gjënë kryesore: t'ju bind që Java është e thjeshtë dhe e lezetshme. Shihemi pas një muaji!
Libra për programues Java
Ju këshillojmë të filloni të mësoni gjuhën me librin “Java. Java: Një udhëzues fillestar nga Herbert Schildt. Niveli tjetër është "Java. Udhëzues i plotë” prej tij, dhe mund të mësoni më shumë rreth servlets në Java Servlet dhe JSP Cookbook nga Bruce W. Perry.