Uvod u Java servlete

1. Pregled

U ovom ćemo članku pogledati ključni aspekt web razvoja u Javi - Servleti.

2. Servlet i spremnik

Jednostavno rečeno, Servlet je klasa koja obrađuje zahtjeve, obrađuje ih i odgovara odgovorom.

Na primjer, možemo koristiti Servlet za prikupljanje podataka od korisnika putem HTML obrasca, upite iz baze podataka i dinamičko stvaranje web stranica.

Servleti su pod nadzorom drugog Java programa nazvanog a Spremnik za servlet. Kada aplikacija koja se izvodi na web poslužitelju primi zahtjev, poslužitelj predaje zahtjev Servlet spremniku - koji ga pak prosljeđuje ciljnom Servletu.

3. Ovisnosti Mavena

Da biste dodali podršku za Servlet u našu web aplikaciju, javax.servlet-api ovisnost je potrebna:

 javax.servlet javax.servlet-api 3.1.0 

Najnoviju ovisnost o mavenu možete pronaći ovdje.

Naravno, morat ćemo konfigurirati i spremnik Servlet za postavljanje naše aplikacije; ovo je dobro mjesto za početak kako postaviti WAR na Tomcat.

4. Životni ciklus servleta

Prođimo kroz skup metoda koje definiraju životni ciklus Servleta.

4.1. u tome()

The u tome metoda je dizajnirana da se pozove samo jednom. Ako instanca servleta ne postoji, web spremnik:

  1. Učitava klasu servleta
  2. Stvara instancu klase servleta
  3. Inicijalizira ga pozivanjem u tome metoda

The u tome metoda mora uspješno završiti prije nego što servlet može primiti bilo kakve zahtjeve. Spremnik servleta ne može staviti servlet u upotrebu ako je u tome metoda ili baca a ServletException ili se ne vrati u vremenskom razdoblju definiranom od strane web poslužitelja.

javna void init () baca ServletException {// inicijalizacijski kod poput postavljanja baze podataka itd ....}

4.2. servis()

Ova se metoda poziva samo nakon servleta u tome() metoda uspješno završena.

Kontejner poziva servis() metoda za obradu zahtjeva koji dolaze od klijenta, tumači vrstu HTTP zahtjeva (DOBITI, OBJAVI, STAVITI, IZBRISATIitd.) i pozive doGet, doPost, doPut, doDeleteitd. metode prema potrebi.

javna void usluga (zahtjev ServletRequest, odgovor ServletResponse) baca ServletException, IOException {// ...}

4.3. uništiti()

Nazvan od kontejnera za servlet da isključi servlet iz upotrebe.

Ova se metoda poziva samo jednom sve niti unutar servleta servis metode su izašle ili nakon isteka razdoblja isteka vremena. Nakon što spremnik pozove ovu metodu, neće pozvati servis metoda ponovno na Servletu.

javna prazna uništiti () {//}

5. Primjer servleta

Postavimo sada puni primjer rukovanja informacijama pomoću obrasca.

Za početak definirajmo servlet s preslikavanjem / izračunajServlet koji će uhvatiti podatke OBJAVLJENE obrascem i vratiti rezultat pomoću RequestDispatcher:

@WebServlet (name = "FormServlet", urlPatterns = "/ izračunajServlet") javna klasa FormServlet proširuje HttpServlet {@Override zaštićen void doPost (HttpServletRequest zahtjev, HttpServletResponse odgovor) baca ServletException. ; Težina niza = request.getParameter ("težina"); probajte {double bmi = izračunajBMI (Double.parseDouble (težina), Double.parseDouble (visina)); request.setAttribute ("bmi", bmi); response.setHeader ("Test", "Uspjeh"); response.setHeader ("BMI", String.valueOf (bmi)); RequestDispatcher dispečer = request.getRequestDispatcher ("index.jsp"); dispečer.naprijed (zahtjev, odgovor); } catch (Iznimka e) {response.sendRedirect ("index.jsp"); }} privatni Double izračunajBMI (dvostruka težina, dvostruka visina) {povratna težina / (visina * visina); }}

Kao što je gore prikazano, razredi označeni s @WebServlet mora proširiti javax.servlet.http.HttpServlet razred. Važno je napomenuti da @WebServlet napomena je dostupna samo od Jave EE 6 nadalje.

The @WebServlet bilješku obrađuje spremnik u vrijeme postavljanja, a odgovarajući servlet dostupan na navedenim uzorcima URL-a. Vrijedno je primijetiti da korištenjem bilješke za definiranje uzoraka URL-a možemo izbjeći upotrebu imenovanog XML deskriptora implementacije web.xml za naše mapiranje Servleta.

Ako Servlet želimo mapirati bez bilješki, možemo koristiti tradicionalni web.xml umjesto toga:

  FormServlet com.root.FormServlet FormServlet / izračunatiServlet 

Dalje, kreirajmo osnovni HTML oblik:

Vaša težina (kg):
Vaša visina (m):

$ {bmi}

Napokon - kako bismo bili sigurni da sve funkcionira prema očekivanjima, napišimo i brzi test:

javna klasa FormServletLiveTest {@Test javna praznina kadaPostRequestUsingHttpClient_thenCorrect () baca izuzetak {HttpClient client = new DefaultHttpClient (); HttpPost metoda = novi HttpPost ("// localhost: 8080 / izračunajServlet"); Popis nvps = novi ArrayList (); nvps.add (novi BasicNameValuePair ("visina", String.valueOf (2))); nvps.add (novi BasicNameValuePair ("težina", String.valueOf (80))); method.setEntity (novi UrlEncodedFormEntity (nvps)); HttpResponse httpResponse = client.execute (metoda); assertEquals ("Uspjeh", httpResponse .getHeaders ("Test") [0] .getValue ()); assertEquals ("20.0", httpResponse .getHeaders ("BMI") [0] .getValue ()); }}

6. Servlet, HttpServlet i JSP

Važno je to razumjeti tehnologija Servlet nije ograničena na HTTP protokol.

U praksi to gotovo uvijek jest, ali Servlet je generičko sučelje i HttpServlet je proširenje tog sučelja - dodajući HTTP specifičnu podršku - kao što je doGet i doPostitd.

Napokon, Servlet tehnologija također je glavni pokretač niza drugih web tehnologija kao što su JSP - JavaServer Pages, Spring MVC itd.

7. Zaključak

U ovom brzom članku predstavili smo temelje Servleta u Java web aplikaciji.

Primjer projekta može se preuzeti i pokrenuti kao i GitHub projekt.